o
    :ήc=h                     @   s  d dl Z d dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZ d dlm Z  e!g dg dg d	g d	g d
g dg dg dg dg dg
Z"e"# Z$de$dddf< e$# %ej&d Z'ej(dej)dZ*de*ddddf< e*# d Z+ej,dej-dZ.de.ddddddf< de.d< e.# Z/dd Z0dd  Z1d!d" Z2d#d$ Z3d%d& Z4d'd( Z5d)d* Z6d+d, Z7d-d. Z8d/d0 Z9d1d2 Z:d3d4 Z;d5d6 Z<d7d8 Z=d9d: Z>d;d< Z?d=d> Z@d?d@ ZAdAdB ZBdCdD ZCdEdF ZDdGdH ZEdIdJ ZFdKdL ZGdMdN ZHdOdP ZIdQdR ZJdSdT ZKdUdV ZLdWdX ZMdYdZ ZNd[d\ ZOd]d^ ZPd_d` ZQdadb ZRdcdd ZSdedf ZTdgdh ZUdidj ZVdkdl ZWdmdn ZXdodp ZYdqdr ZZdsdt Z[dudv Z\dwdx Z]dydz Z^d{d| Z_d}d~ Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsdd Ztdd ZudS )    N)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalassert_equal)datadraw	transform)expected_warnings)
COL_DTYPESOBJECT_COLUMNSPROPS#_inertia_eigvals_to_axes_lengths_3D_parse_docs_props_to_dicteuler_number	perimeterperimeter_croftonregionpropsregionprops_table)slic)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   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   r   r   r   r   r   r   r      r   	      g      $@
   dtype                   @   r$   r$   )r   r   r   c               	   C   sp   t ttd } tD ],}z!t| | t| t|  | |kr+tt| |t| t|  W q	 ty5   Y q	w d S Nr   )r   SAMPLEINTENSITY_SAMPLEr   r   getattrlower	TypeErrorregionprop r.   M/tmp/pip-target-vg8gfxp4/lib/python/skimage/measure/tests/test_regionprops.pytest_all_props.   s   
r0   c               
   C   st   t ttd } tD ].}z!t| | t| t|  | |kr+tt| |t| t|  W q	 ttfy7   Y q	w d S r%   )	r   	SAMPLE_3DINTENSITY_SAMPLE_3Dr   r   r(   r)   NotImplementedErrorr*   r+   r.   r.   r/   test_all_props_3d@   s   
r4   c                   C   s   t tjdtd t tjdtjd tt t tjdtd W d    n1 s,w   Y  tt t tjdtj	d W d    n1 sKw   Y  tt t tjdt
d W d    d S 1 sjw   Y  d S )Nr   r   r   )r   npzerosintuintpytestraisesr*   floatdoubleboolr.   r.   r.   r/   
test_dtypeP   s   "r?   c                   C   s   t tjdtd t tjdtd t tjdtd t tjdtd t tjdtd tt t tjdtd W d    d S 1 sGw   Y  d S )Nr5   r   )r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   )r   r6   r7   r8   r:   r;   r*   r.   r.   r.   r/   	test_ndim[   s   "rB   c                  C   s~   d} t td j}t||  dk sJ tjdtjd}d|ddddf< t |d j}t|dtd  dk s=J d S )	N   r   r      rE   r   r      )r   r&   feret_diameter_maxr6   absr7   uint8sqrt)comparator_resulttest_resultimgrH   r.   r.   r/   test_feret_diameter_maxe   s   $rO   c                  C   sf   t jdt jd} d| ddddf< t | fd }t|d j}t |dt d  dk s1J d S )	NrD   r   r   r   rF   r   r   rG   )r6   r7   rJ   dstackr   rH   rI   rK   )rN   img_3drH   r.   r.   r/   test_feret_diameter_max_3dq   s
   $rR   c                  C   sD   t td j} | ttksJ t td j} | ttks J d S r%   )r   r&   arear6   sumr1   rS   r.   r.   r/   	test_areay   s   rV   c                  C   s   t td j} t| ddtjd tjd f t }d|d d df< t |d j} t| ddtjd tjd d f t td j} t| d d S )Nr   r   )r   r   r      r   r   )r   r&   bboxr   shapecopyr1   )rY   
SAMPLE_modr.   r.   r/   	test_bbox   s   "r]   c                  C   s.   t jtddd} t| d j}t|tj d S )Nr   constantmoder   )r6   padr&   r   	area_bboxr   size)padded	bbox_arear.   r.   r/   test_area_bbox   s   rf   c                  C   st   t td j} t| d d t| d d t| d d t| d d	 t| d
 d t| d d t| d d d S )Nr   r   r   g    @{@r   r   g
r@   g@UUUUUr   r   g@8_r   r   gpq@r   r   gKh/A@r   r   ga2)r   r&   moments_centralr   )mur.   r.   r/   test_moments_central   s   ro   c                  C      t td j} t| d d S )Nr   )g@g98"@)r   r&   centroidr   rq   r.   r.   r/   test_centroid      rs   c                  C   rp   )Nr   )gI?:?ru   )r   r1   rq   r   rr   r.   r.   r/   test_centroid_3d   rt   rv   c                  C   s   t td j} | dksJ d S )Nr   }   )r   r&   area_convexrU   r.   r.   r/   test_area_convex   s   ry   c                  C   sb   t td j} tg dg dg dg dg dg dg dg d	g d	g d
g
}t| | d S )Nr   )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   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   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&   image_convexr6   arrayr   )rN   refr.   r.   r/   test_image_convex   s   r}   c                  C   s   t jdt jd} t ddgddgddgg}d| |d d df |d d df f< t| d j}t|| t jdt jd} t g d	g d
g dg}d| |d d df |d d df |d d df f< t| d j}t|| d S )Nr5   r   r   r   rX   r   r   r#   rA   )r   r   r   )r   r   r   )r6   r7   int8r{   r   coordsr   )sampler   prop_coordsr.   r.   r/   test_coordinates   s   $
2r   c                  C   sR   t jtddd} tj\}}t| d j}tdd| tdd| f}t|| d S )N))r   rX   )r   r   r^   r_   r   r   r   )r6   ra   r&   rZ   r   slicer   )rd   nrowncolresultexpectedr.   r.   r/   
test_slice   s
   
r   c                  C   sJ   t td j} t| d tjdtd}d|d< t |d j} t| d d S )Nr   gPq~q?)r   r   r   r   r   r   )r   r&   eccentricityr   r6   r7   r8   )epsrN   r.   r.   r/   test_eccentricity   s   
r   c                  C   rp   )Nr   g3&#@)r   r&   equivalent_diameter_arear   )diameterr.   r.   r/   test_equivalent_diameter_area   rt   r   c                  C   s
  t td j} | dksJ t }d|d< t |d j} | dks"J ttd} | dks-J t|d} | dks8J ttd} | dksCJ ttd} | dksNJ td}d|dd	dd	dd	f< t|d} | dkskJ d|d
dd
dd
df< t|d} | dksJ d S )Nr   r    rW   r   r   r   )d   r   r   (   <   -   7   )r   r&   r   r[   r1   r6   r7   )enr\   SAMPLE_3D_2r.   r.   r/   test_euler_number   s*   






r   c                  C   rp   )Nr   皙?)r   r&   extentr   )r   r.   r.   r/   test_extent     r   c                  C   s*   t td j} tg d}t| | d S )Nr   )g?z~?gu/,?g'?gHU-T?g^L>gw-g?b1۾)r   r&   
moments_hur6   r{   r   )hur|   r.   r.   r/   test_moments_hu  s   
r   c                  C   sJ   t td j} t| t t td j} t| tddddddf  d S )Nr   r   rX   r   )r   r&   imager   r1   rN   r.   r.   r/   
test_image  s   
$r   c                  C   s4   t td j} t| d t td j} t| d d S )Nr   r   )r   r&   labelr   r1   r   r.   r.   r/   
test_label$  s   
r   c                  C   sT   t td j} | ttksJ t }d|d< t |d j} | ttks(J d S )Nr   r   )r   r&   area_filledr6   rT   r[   )rS   r\   r.   r.   r/   test_area_filled,  s   r   c                  C   s   t td j} t| t d S r%   )r   r&   image_filledr   r   r.   r.   r/   test_image_filled6  r   r   c                  C   rp   )Nr   g8D0@)r   r&   axis_major_lengthr   lengthr.   r.   r/   test_axis_major_length;     r   c                  C       t ttdd j} t| d d S )Nintensity_imager   r   )r   r&   r'   intensity_maxr   	intensityr.   r.   r/   test_intensity_maxB     
r   c                  C   r   )Nr   r   gqq?)r   r&   r'   intensity_meanr   r   r.   r.   r/   test_intensity_meanH  r   r   c                  C   r   )Nr   r   r   )r   r&   r'   intensity_minr   r   r.   r.   r/   test_intensity_minN  r   r   c                  C   rp   )Nr   g7z#@)r   r&   axis_minor_lengthr   r   r.   r.   r/   test_axis_minor_lengthT  r   r   c                  C   s   t td j} t| d d t| d d t| d d t| d d	 t| d
 d t| d d t| d d t| d d t| d d t| d d d S )Nr   )r   r   g      R@)r   r   g     @@rj   g     @rl   g    @V@)r   r   g     y@r@   g     l@rk   g    @m@rg   g     x@ri   g     A@rh   g     P@)r   r&   momentsr   )mr.   r.   r/   test_moments[  s   r   c                  C   sf   t td j} t| d d t| d d t| d d t| d d	 t| d
 d t| d d d S )Nr   rj   ge/
?rl   gcZr@   g,lC@rk   g^ ^H?rg   g/O懵?ri   g⪹Rg)r   r&   moments_normalizedr   )nur.   r.   r/   test_moments_normalizedj  s   r   c                  C   s   t td j} t| d tjdtd}t |d j}t|tj d  t t	|d j}t|tjd  t t
|d j}t|tjd  t t
t	|d j}t|tj d  d S )Nr   g/9vr   r   rX   )r   r&   orientationr   r6   eyer8   mathpiflipudfliplr)orientdiagorient_diagr.   r.   r/   test_orientationv  s   
r   c                  C   8   t td j} t| d ttddd} t| d d S )Nr   g֟K@r=   r!   )neighbourhoodgXg	jG@)r   r&   r   r   astypeperr.   r.   r/   test_perimeter     
r   c                  C   r   )Nr   gχ?N@r=   r   )
directionsgP@)r   r&   r   r   r   r   r.   r.   r/   test_perimeter_crofton  r   r   c                  C   rp   )Nr   g;On?)r   r&   solidityr   )r   r.   r.   r/   test_solidity  r   r   c                  C   sN   t ttdd j} tg dg dg dg dg}tjdd t| | d S )	Nr   r   )     R@g($=gp8"@g)g0   Ngc"UgiC*Nڠ@g]}ᘎ)g|}@g(kbgz*@gqo)g}gF%uݓg~2	@g"0V0r   )	precision)r   r&   r'   moments_weighted_centralr6   r{   set_printoptionsr   )wmur|   r.   r.   r/   test_moments_weighted_central  s   

r   c                  C   r   )Nr   r   )g8 u)@g1<S"@)r   r&   r'   centroid_weightedr   rr   r.   r.   r/   test_centroid_weighted  r   r   c                  C   s.   t ttdd j} tg d}t| | d S )Nr   r   )ga'R?gg	?y?g"
-?g!mT?gODګ>gpcgʝ~ܾ)r   r&   r'   moments_weighted_hur6   r{   r   )whur|   r.   r.   r/   test_moments_weighted_hu  s   
	r   c                  C   sB   t ttdd j} tg dg dg dg dg}t| | d S )Nr   r   )r   g     ؅@g     @g    P@)g     y@g     @g    @g    .y!A)g     |@g    E@g    Ag   MA)g    P@g    \Ag    ?Ag   p1zA)r   r&   r'   moments_weightedr6   r{   r   )wmr|   r.   r.   r/   test_moments_weighted  s   
r   c                  C   sP   t ttdd j} ttjtjddgtjdddgg dg d	g}t| | d S )
Nr   r   g!%su?gSmgvlgc6r?g,>Ak)gS*]?gNCyigcd?g\}$bg)g7g"h ;ig\q?gA׸R)r   r&   r'   moments_weighted_normalizedr6   r{   nanr   )wnur|   r.   r.   r/    test_moments_weighted_normalized  s   
r   c                  C   sP   t jdtd} d| d d d d f< t| }t|dksJ |d jdks&J d S )Nr   r   r   r   r   )r6   emptyr8   r   lenr   apsr.   r.   r/   test_label_sequence  s
   r   c                  C   s*   t jdtd} t| }t|dksJ d S )Nr   r   r   )r6   r7   r8   r   r   r   r.   r.   r/   test_pure_background  s   r   c                     sJ   t t  fdd} tt |   W d    d S 1 sw   Y  d S )Nc                      s    d j  d S r%   )image_intensityr.   r   r.   r/   get_intensity_image     z)test_invalid.<locals>.get_intensity_image)r   r&   r:   r;   AttributeError)r   r.   r   r/   test_invalid  s
   "r   c                  C   sL   t dgdgg} tt tt|  W d    d S 1 sw   Y  d S Nr   )r6   r{   r:   r;   
ValueErrorr   r&   )wrong_intensity_sampler.   r.   r/   test_invalid_size  s   "r   c                  C   s   t jdtd} d| ddddf< d| ddddf< t| }|d }t| }|d }|d }t||kd	d
 t||kd	d d S )N)r   r   r   r   r      r   2   c   TzSame regionprops are not equalzDifferent regionprops are equal)r6   r7   r8   r   r   )arrregionsr1r2r3r.   r.   r/   test_equals  s   r  c                     sX   t td   fdd D } t ttdd   fdd D }t| t|k s*J d S )Nr   c                       i | ]}| | qS r.   r.   .0pr,   r.   r/   
<dictcomp>	      z*test_iterate_all_props.<locals>.<dictcomp>r   c                    r  r.   r.   r  r	  r.   r/   r
    r  )r   r&   r'   r   )p0p1r.   r	  r/   test_iterate_all_props  s
   r  c                  C   sZ   t  } t| d }|j}d|jd d< |j}t|| d|_|j}t||ks+J d S )Nr   r   r   F)	r&   r[   r   r   _label_imager   _cache_activer6   any)r\   r,   f0f1r.   r.   r/   
test_cache  s   
r  c                  C   s   dd } t | j}ttd }t }dd t|D }t|}t|}|rAt|| |d }d|vs4J t|dd	ks?J d S t|d d S )
Nc                   S      dS )fooNr.   r.   r.   r.   r/   r  #  s    z&test_docstrings_and_props.<locals>.foor   c                 S   s   g | ]	}| d s|qS )_)
startswith)r  r   r.   r.   r/   
<listcomp>+  s    z-test_docstrings_and_props.<locals>.<listcomp>r   	iteration
r   )	r>   __doc__r   r&   r   dirr   r   split)r  has_docstringsr,   docspropsnr_docs_parsednr_propsdsr.   r.   r/   test_docstrings_and_props"  s   

r%  c               	   C   s   t t} t| }|tdgtdgtdgtdgtdgdks(J t t} t| ddd}|tdgtd	gtdgtdgtdgtdgd
ksXJ d S Nr   r   r   rC   )r   zbbox-0zbbox-1zbbox-2zbbox-3r   rS   rY   +
properties	separatorH   )r   rS   bbox+0bbox+1bbox+2bbox+3)r   r&   r   r6   r{   )r   outr.   r.   r/   test_props_to_dict8  s   r2  c               	   C   s   t t} | tdgtdgtdgtdgtdgdks$J t tddd} | tdgtd	gtdgtdgtdgtdgd
ksPJ d S r&  )r   r&   r6   r{   r1  r.   r.   r/   test_regionprops_tableG  s   r4  c                  C   s,   t tdd} |  D ]	}|dsJ q
d S )N)local_centroidr*  r5  )r   r&   keysr  )r1  keyr.   r.   r/   1test_regionprops_table_deprecated_vector_propertyT  s   r9  c                  C   s&   t tdd} t|  dgksJ d S )N)re   r6  re   )r   r&   listr7  r3  r.   r.   r/   1test_regionprops_table_deprecated_scalar_property[  s   r;  c               	   C   s   t tt} tttt d}t D ]a\}}t| D ]X\}}|| }t	|s0|t
v s0|tju r:t||| |  qt|tjrC|jnt|f}t|D ]$}dtt|f| }	t|dkrb|n|d }
t||
 ||	 |  qMqqd S )Nr6  -r   r   )r   r&   INTENSITY_FLOAT_SAMPLEr   r   r7  items	enumerater6   isscalarr   object_r   
isinstancendarrayrZ   r   ndindexjoinmapstrr   )r   	out_tabler-   r   iregrprZ   indmodified_proplocr.   r.   r/   (test_regionprops_table_equal_to_original`  s*   

rO  c                  C   s   t tjdtdddd} t| dksJ t| d dksJ t| d	 dks(J t| d
 dks2J t| d dks<J t| d dksFJ t| d dksPJ d S )Nr   r   r'  r(  r)  r$   r   r   rS   r-  r.  r/  r0  )r   r6   r7   r8   r   r3  r.   r.   r/   !test_regionprops_table_no_regionst  s   rP  c                   C   s&   t t tt t ksJ d S N)setr   r7  unionr   r   valuesr.   r.   r.   r/   test_column_dtypes_complete  s   &rU  c               
   C   s   d} t ttdd }tD ]j}|| }|tv rt| tksJ qtt|d }t	|tj
rGt| tksFJ | d| d|  dt|  qt	|tjrft| tkseJ | d| d|  dt|  qJ | d| d|  dt|  d S )Nzmismatch with expected type,r   r   z dtype  )r   r&   r'   r   r   objecttyper6   ravel
issubdtypefloatingr<   integerr8   )msgr,   colrtr.   r.   r/   test_column_dtypes_correct  s(   ra  c                   C   sr   t dg ttdd W d    n1 sw   Y  tt ttdd W d    d S 1 s2w   Y  d S )Nzcoordinates keyword argumentrc)coordinatesxy)r
   r   r&   r:   r;   r   r.   r.   r.   r/   test_deprecated_coords_argument  s   "re  c                 C   s
   t | S )z"a short test for an extra property)r6   rT   )
regionmaskr.   r.   r/   
pixelcount  s   
rg  c                 C   s   t ||  S rQ  )r6   median)rf  r   r.   r.   r/   intensity_median  r   ri  c                 C   r  r   r.   )rf  r   superfluousr.   r.   r/   too_many_args     rk  c                   C   r  r   r.   r.   r.   r.   r/   too_few_args  rl  rm  c                  C   s.   t ttfdd } | jttdkksJ d S )Nextra_propertiesr   r   )r   r&   rg  r6   rT   r	  r.   r.   r/   test_extra_properties  s   rp  c                  C   s4   t tttfdd } | jtttdk ksJ d S N)r   ro  r   r   )r   r&   r'   ri  r6   rh  r	  r.   r.   r/   test_extra_properties_intensity  s    rr  c                  C   sH   t t tttfdd } | j}W d    d S 1 sw   Y  d S Nrn  r   )r:   r;   r   r   r&   ri  r,   r  r.   r.   r/   +test_extra_properties_no_intensity_provided  s   "ru  c                  C   s   t t tttfdd } | j}W d    n1 sw   Y  t t tttfdd } | j}W d    d S 1 s>w   Y  d S rs  )r:   r;   r   r   r&   rm  rk  rt  r.   r.   r/   test_extra_properties_nr_args  s   "rv  c                  C   sN   t ttttfdd } | jtttdk ksJ | jttdkks%J d S rq  )r   r&   r'   ri  rg  r6   rh  rT   r	  r.   r.   r/   test_extra_properties_mixed  s   rw  c                  C   sH   t ttdttfd} t| d tddg t| d tddg d S )	Nr   )r   r*  ro  ri  r"   g      @rg  r   r   )	r   SAMPLE_MULTIPLEINTENSITY_SAMPLE_MULTIPLEri  rg  r   r6   r{   r   r3  r.   r.   r/   test_extra_properties_table  s   rz  c            	      C   s   t  ddddddf } | d }t| tdd}t|d }t||tgd| }t|| tgd| }t	t
 dg D ]'}|| }|| }t|t|krYt|| q?t|t|d d	d	d
 q?dS )z2Test that computing multichannel properties works.NrX   ).r   r   )start_labelr   rn  ri  g-q=)rtolatol)r   	astronautr   r   r<   r6   maxr   ri  r:  r   r7  rZ   r   r   asarray)	astroastro_greenlabelssegment_idxr,   region_multir-   r  p_multir.   r.   r/   test_multichannel  s2   r  c            	      C   s   d} t j|  t}tj|g ddd}tjg ddd}t	||j
}t|d }|j}t|}td	d
 | D dd}t||D ]\}}t|| d| k sQJ qAt|j|d  dk s_J t|j|d  dk slJ dS )zuVerify that estimated axis lengths are correct.

    Uses an ellipsoid at an arbitrary position and orientation.
    )rE   r   r   ))   rC   )r     )r   rE   r^   )	pad_widthr`   )g?g333333?r   r   )rotationdimensionalityr   c                 S   s   g | ]}d | qS )r   r.   )r  hr.   r.   r/   r    s    z2test_3d_ellipsoid_axis_lengths.<locals>.<listcomp>T)reverseg{Gz?gHz>rW   N)r   	ellipsoidr   r8   r6   ra   r	   EuclideanTransformndiaffine_transformparamsr   inertia_tensor_eigvalsr   sortedziprI   r   r   )	half_lengthseRrK  evsaxis_lengthsexpected_lengthsax_len_expectedax_lenr.   r.   r/   test_3d_ellipsoid_axis_lengths  s   
r  )vr   numpyr6   r:   scipy.ndimagendimager  numpy.testingr   r   r   r   r   skimager   r   r	   skimage._shared._warningsr
   skimage.measure._regionpropsr   r   r   r   r   r   r   r   r   r   r   skimage.segmentationr   r{   r&   r[   r'   r   float64r=  r   int32rx  ry  r7   rJ   r1   r2   r0   r4   r?   rB   rO   rR   rV   r]   rf   ro   rs   rv   ry   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%  r2  r4  r9  r;  rO  rP  rU  ra  re  rg  ri  rk  rm  rp  rr  ru  rv  rw  rz  r  r  r.   r.   r.   r/   <module>   s    4

 


		
