o
    ^iJ                     @   s  d dl Z d dlZ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 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*dej+f g d Z,ej-dej.dZ/de/ddddf< e/& d Z0ej1dej2dZ3de3ddddddf< de3d< e3& Z4dd d!Z5dd#d$Z6dd%d&Z7d'd( Z8d)d* Z9d+d, Z:d-d. Z;d/d0 Z<d1d2 Z=d3d4 Z>d5d6 Z?ej@Ad7e%dfe%dfe%dfe%d8fe3dfe3dfe3d9fgd:d; ZBd<d= ZCd>d? ZDd@dA ZEdBdC ZFdDdE ZGdFdG ZHdHdI ZIdJdK ZJej@AdLg dMg dNg dOgdPdQ ZKej@AdLdRdSgdTdU ZLej@AdLejMejNejN gdVdW ZOej@AdLdgddggd"fdXdY ZPej@AdLdZd[gddgddggd\d] ZQej@AdLd^gg d_gd`da ZRdbdc ZSddde ZTdfdg ZUdhdi ZVej@AdLg djdkdl ZWej@AdLg dmdndo ZXdpdq ZYdrds ZZdtdu Z[dvdw Z\dxdy Z]dzd{ Z^d|d} Z_d~d Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsdd Ztdd Zudd Zvdd Zwdd Zxdd Zydd Zzdd Z{dd Z|dd Z}dd Z~dd Zdd Zdd ZddÄ Zddń ZddǄ ZddɄ Zdd˄ Zdd̈́ Zddτ Zddф Zddӄ ZddՄ Zddׄ Zddل Zddۄ Zdd݄ Zdd߄ Zdd Zdd Zdd Zdd Zdd Zej@Adedd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    N)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalassert_equal)datadraw	transform)testing)
COL_DTYPESOBJECT_COLUMNSPROPS#_inertia_eigvals_to_axes_lengths_3D_parse_docs_props_to_dict_require_intensity_image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      $@.r   r      
   dtyper                   @   r&   r&   )r   r   r   r   r   c                    sZ   j \}}tjtjd||d  |ddtjd||d  |dddd\  fddS )	Nr   Fendpointr   ijindexingc                    s   t |   |   S NnpsumpqXYimg a/var/www/html/RAG/RAG_venv/lib/python3.10/site-packages/skimage/measure/tests/test_regionprops.py<lambda>J       z%get_moment_function.<locals>.<lambda>shaper/   meshgridlinspace)r7   spacingrowscolsr8   r4   r9   get_moment_functionC   s   

rC   r   r   r   c              	      sx   j \}}}tjtjd||d  |ddtjd||d  |ddtjd||d  |dddd\  fdd	S )
Nr   Fr(   r   r   r*   r+   c                    s"   t |  |   |   S r-   r.   )r2   r3   rr5   r6   Zr7   r8   r9   r:   U      " z'get_moment3D_function.<locals>.<lambda>r<   )r7   r@   slicesrA   rB   r8   rF   r9   get_moment3D_functionM   s   rJ   c                    s   j \}}tjtjd||d  |ddtjd||d  |dddd\ t|d}|dd|dd |dd|dd  fdd	S )
Nr   Fr(   r   r*   r+   r@   c                    s"   t  |    |   S r-   r.   r1   r5   r6   cXcYr7   r8   r9   r:   d   rH   z-get_central_moment_function.<locals>.<lambda>)r=   r/   r>   r?   rC   )r7   r@   rA   rB   Mpqr8   rL   r9   get_central_moment_functionX   s   

rP   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propr8   r8   r9   test_all_propsg   s   rZ   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 rQ   )	r   	SAMPLE_3DINTENSITY_SAMPLE_3Dr   r   rT   rU   NotImplementedErrorrV   rW   r8   r8   r9   test_all_props_3dx   s   r^   c                  C   s<   t td j} | dksJ t tddd j} | dksJ d S )Nr   H   r   r   rK   )r   rR   
num_pixels)ra   r8   r8   r9   test_num_pixels   s   rb   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   r/   zerosintuintpytestraisesrV   floatfloat64boolr8   r8   r8   r9   
test_dtype   s   "rl   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 )Nrc   r   )r   r   r   )r   r   r   r'   rD   )r   r   r   r   )r   r/   rd   re   rg   rh   rV   r8   r8   r8   r9   	test_ndim   s   "rm   c                  C   s   d} t td j}t||  dk sJ d}t tddgd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 sUJ t|td dk scJ d S )N   r   r   r   皙?rK      rq   r   r      i  ư>r   rR   feret_diameter_maxr/   absrd   uint8sqrt)comparator_resulttest_resultcomparator_result_spacingtest_result_spacingr7   rv   r8   r8   r9   test_feret_diameter_max   s     r~   c               
   C   s   d} t td j}t||  dk sJ d}tjdtjd}d|ddddf< t ||d	d j}t|t|d d
 |d |d k d |d d
 |d |d k  d   dk s]J d S )Nrn   r   r   r`   rp   r   r   rr   rK   rs   rt   ru   )rz   r{   r@   r7   rv   r8   r8   r9   test_feret_diameter_max_spacing   s$   r   c                  C   sP  t jdt jd} d| ddddf< t | fd }t|d j}t |t d d	k s/J d
}t||dd j}t |t |d d d |d d d  |d d d   d	k s^J t |t |d d d |d d d  |d d d   d	ksJ t |t |d d d |d d d  |d d d   d	ksJ d S )Nrp   r   r   r   rr   r   r   i  rt   r   rK      rs   )r/   rd   rx   dstackr   rv   rw   ry   )r7   img_3drv   r@   r8   r8   r9   test_feret_diameter_max_3d   s`   r   zsample,spacingr   r   )r   r   r   c                 C   s>   t | |dd j}t| |rt|nd }||ksJ d S )NrK   r   r   )r   arear/   r0   prod)sampler@   r   desiredr8   r8   r9   	test_area   s   r   c                  C   s  t td j} t| ddtjd tjd f t tdd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 |ddd j} t| ddtjd tjd d f t td j} t| d t tddd j} t| d d S )	Nr   r   r   rK   r   r   )r   r   r      r   r   )      ?r   r"   )r   rR   bboxr   r=   copyr[   )r   
SAMPLE_modr8   r8   r9   	test_bbox  s   ""
r   c                  C   s.   t jtddd} t| d j}t|tj d S )Nr!   constantmoder   )r/   padrR   r   	area_bboxr   size)padded	bbox_arear8   r8   r9   test_area_bbox$  s   r   c                  C   s@   d} t jtddd}t|| dd j}t|tjt |   d S )N)r   r   r!   r   r   rK   r   )r/   r   rR   r   r   r   r   r   )r@   r   r   r8   r8   r9   test_area_bbox_spacing*  s   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tdd}t|dd| d  t|dd| d  t|dd| d  t|dd| d  t|dd| d
  t|dd| d  t|dd| d  d S )Nr   r   r   g    @{@r   r   g
r'   g@UUUUUr`   g@8_r   r   gpq@r   gKh/A@r   r   ga2rK   r   r   r   )r   rR   moments_centralr   rP   )mu
centralMpqr8   r8   r9   test_moments_central1  s    r   c                  C   s   d} t t| d}tt| dd j}t|d |dd t|d |dd t|d |d	d	 t|d
 |dd	 t|d |dd t|d |d	d t|d |dd d S )Ng?g?rK   r   r   r   r   r   r'   r   r`   r   r   r   )rP   rR   r   r   r   )r@   r   r   r8   r8   r9   test_moments_central_spacingH  s   r   c                  C   s^   t td j} t| d ttdd}|dd|dd }|dd|dd }t||f|  d S )Nr   )g@g98"@r'   rK   r   )r   rR   centroidr   rC   )r   rO   rN   rM   r8   r8   r9   test_centroidW  s   
r   c                  C   s\   d} t t| d}|dd|dd }|dd|dd }tt| dd j}t|||f d S )Nr   rK   r   r   )rC   rR   r   r   r   r@   rO   rN   rM   r   r8   r8   r9   test_centroid_spacingd  s   r   c                  C   s   t td j} t| d ttdd}|ddd|ddd }|ddd|ddd }|ddd|ddd }t|||f|  d S )Nr   )gI?:?r   rD   rK   r   )r   r[   r   r   rJ   )r   MpqrcZrN   rM   r8   r8   r9   test_centroid_3do  s   
r   r@   ) @皙@ffffff@)r$   r$   r$   )r   r   r   c                 C   sz   t t| d}|ddd|ddd }|ddd|ddd }|ddd|ddd }tt| dd j}t||||f dS )!Test the _normalize_spacing code.rK   r   r   N)rJ   r[   r   r   r   )r@   r   r   rN   rM   r   r8   r8   r9   test_spacing_parameter_3d}  s   r   )r   y              ?y      ?        c                 C   sF   t jtdd tt| dd j W d   dS 1 sw   Y  dS )r   z3Element of spacing isn't float or integer type, gotmatchrK   r   N)rg   rh   rV   r   rR   r   rK   r8   r8   r9   $test_spacing_parameter_complex_input  s
   "r   c                 C   sB   t t tt| dd j W d   dS 1 sw   Y  dS )r   rK   r   Nrg   rh   
ValueErrorr   rR   r   rK   r8   r8   r9   test_spacing_parameter_nan_inf  s   "r   c                 C   sF   t jtdd tt| dd j W d    d S 1 sw   Y  d S )Nz%spacing isn't a scalar nor a sequencer   rK   r   r   rK   r8   r8   r9   test_spacing_mismtaching_shape  s   "r   r   r   c                 C   sZ   t t| d}|dd|dd }|dd|dd }ttt| dd j}t|||f dS )r   rK   r   r   intensity_imager@   N)rC   rS   r   rR   centroid_weightedr   r   r8   r8   r9   test_spacing_parameter_2d  s   r   	bad input)r   r   r   c                 C   sD   t t ttt| dd j W d   dS 1 sw   Y  dS )r   r   r   N)rg   rh   r   r   rR   rS   r   rK   r8   r8   r9   #test_spacing_parameter_2d_bad_input  s   "r   c                  C   s   t td j} | dksJ d S )Nr   }   )r   rR   area_convexr   r8   r8   r9   test_area_convex  s   r   c                  C   s0   d} t t| dd j}|dt|  ksJ d S )Nr   r   rK   r   r   )r   rR   r   r/   r   )r@   r   r8   r8   r9   test_area_convex_spacing  s   r   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   rR   image_convexr/   arrayr   )r7   refr8   r8   r9   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| dd	d j}t|| d S )
Nrc   r   r   r   r   r   r   )r   333333?rK   )r/   rd   int8r   r   coordsr   )r   r   prop_coordsr8   r8   r9   test_coordinates  s   $
r   )Nr   r   r'   )r   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d j}| d u r8|}n|t |  }t|| d S )	Nrc   r   r   r   r   r   r   rK   r/   rd   r   r   r   coords_scaledr   r@   r   r   r   desired_coordsr8   r8   r9   test_coordinates_scaled  s   $r   )Nr   r   )皙?r   r   c                 C   s   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	d j}| d u r?|}n|t |  }t|| d S )
Nr%   r   rD   )r   r   r   )r   r   r   r   r   r   rK   r   r   r8   r8   r9   test_coordinates_scaled_3d  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   r   )r!   r   r   r   r   r   r!   r/   r   rR   r=   r   slicer   )r   nrowncolresultexpectedr8   r8   r9   
test_slice
  s
   
r   c                  C   sh   t jtddd} tj\}}t| d j}tdd| tdd| f}d}t| |dd j}t|| d S )	Nr   r   r   r   r   r!   )r   r   rK   r   )r   r   r   r   r   r@   r8   r8   r9   test_slice_spacing  s   
r   c                  C   s   t td j} t| d t tddd j} t| d tjdtd}d|d< t |d j} t| d t |d	dd j} t| d d S )
Nr   gPq~q?      ?r   rK   )r!   r!   r   r   r   r   r   r   )r   rR   eccentricityr   r/   rd   re   )epsr7   r8   r8   r9   test_eccentricity  s   


r   c                  C   s\   t td j} t| d d}t t|dd j} tj| d d  }t|t t|  d S )Nr   g3&#@r   r   rK   r$   r   )r   rR   equivalent_diameter_arear   r/   pir0   r   )diameterr@   equivalent_arear8   r8   r9   test_equivalent_diameter_area,  s   
r   c                  C   s  dD ]>} t t| dd j}|dksJ t }d|d< t || dd j}|dks*J ttd}|dks5J t|d}|dks@J qttd}|dksLJ ttd}|dksWJ td	}d|d
dd
dd
df< t|d}|dkstJ d|ddddddf< t|d}|dksJ d S )N)r'   )r   g?rK   r   r"   r   r   r   r   )d   r   r   (   <   -   7   )r   rR   r   r   r[   r/   rd   )r@   enr   SAMPLE_3D_2r8   r8   r9   test_euler_number7  s,   






r   c                  C   s8   t td j} t| d t tddd j} t| d d S )Nr   皙?)r!   r   rK   )r   rR   extentr   )r   r8   r8   r9   test_extentX     
r   c                  C   sh   t td j} tg d}t| | tt t tddd j W d    d S 1 s-w   Y  d S )Nr   )g?z~?gu/,?g'?gHU-T?g^L>gw-g?b1۾r`   rK   )	r   rR   
moments_hur/   r   r   r
   rh   r]   )hur   r8   r8   r9   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   r   r   )r   rR   imager   r[   r7   r8   r8   r9   
test_images  s   
$r   c                  C   s4   t td j} t| d t td j} t| d d S )Nr   r   )r   rR   labelr   r[   r   r8   r8   r9   
test_label{  s   
r  c                  C   s$   t td j} | ttksJ d S rQ   )r   rR   area_filledr/   r0   r   r8   r8   r9   test_area_filled  s   r  c                  C   s4   t  } d| d< t| d j}|tt ksJ d S )Nr   r   )rR   r   r   r  r/   r0   )r   r   r8   r8   r9   test_area_filled_zero  s   r  c                  C   st   t  } d| d< d}tt |dd j}|tt t| ks!J t| |dd j}|tt t| ks8J d S )Nr   r   )r   r   rK   )rR   r   r   r  r/   r0   r   )r   r@   r   r8   r8   r9   test_area_filled_spacing  s    r  c                  C   s8   t td j} t| t t tddd j} t| t d S )Nr   r   rK   )r   rR   image_filledr   r   r8   r8   r9   test_image_filled  r   r  c                  C   s   t td j} d}t| | t tddd j} t| d|  ddlm} tjdtjd}|d	d	d
dt	dd\}}d|||f< t |ddd j}t |d d d ddd j
}t|| dksaJ t |d d d d df ddd j} t| |dd d S )Nr   g8D0@r   rK   r   ellipse)rq      r   r   r"   r   r   rotationr   r'   ro   r   decimal)r   rR   axis_major_lengthr   skimage.drawr
  r/   rd   rx   deg2radaxis_minor_lengthrw   lengthtarget_lengthr
  r7   rrcclength_wo_spacingr8   r8   r9   test_axis_major_length  s   
$r  c                  C       t ttdd j} t| d d S )Nr   r   r   )r   rR   rS   intensity_maxr   	intensityr8   r8   r9   test_intensity_max     r   c                  C   r  )Nr  r   gqq?)r   rR   rS   intensity_meanr   r  r8   r8   r9   test_intensity_mean  r!  r#  c                  C   r  )Nr  r   r   )r   rR   rS   intensity_minr   r  r8   r8   r9   test_intensity_min  r!  r%  c                  C   r  )Nr  r   g|f?)r   rR   rS   intensity_stdr   r  r8   r8   r9   test_intensity_std  r!  r'  c                  C   s   t td j} d}t| | t tddd j} t| d|  ddlm} tjdtjd}|d	d
dd	t	dd\}}d|||f< t |ddd j}t |d d d ddd j}t
|| dksaJ t |d d d ddd j} t| |dd d S )Nr   g7z#@r   rK   r   r	  )r      r   r!   r&   r      r  r   r'   r   ro   r`   r  )r   rR   r  r   r  r
  r/   rd   rx   r  rw   r  r8   r8   r9   test_axis_minor_length  s   
r*  c                  C   sr  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 ttdd}t|dd| d  t|dd| d  t|dd| d  t|dd| d  t|dd| d
  t|dd| d  t|dd| d  t|dd| d  t|dd| d  t|dd| d  d S )Nr   r   r   g      R@r   r   g     @@r   g     @r   g    @V@r   r   g     y@r'   g     l@r   g    @m@r   g     x@r`   g     A@r   g     P@rK   r   r   r   )r   rR   momentsr   rC   )mrO   r8   r8   r9   test_moments  s,   r0  c                  C   s   d} t t| dd j}tt| d}t|d |dd t|d |dd t|d |dd t|d	 |dd
 t|d |dd t|d |dd t|d |dd t|d |dd t|d |dd t|d |d
d d S )N)r   333333?rK   r   r+  r,  r   r   r   r   r   r-  r'   r   r   r`   r   )r   rR   r.  rC   r   )r@   r/  rO   r8   r8   r9   test_moments_spacing   s   r2  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   r   e/
?r   cZr'   ,lC@r   ^ ^H?r   /O懵?r`   ⪹Rgr   rR   moments_normalizedr   )nur8   r8   r9   test_moments_normalized  s   r<  c                  C   sn   d} t t| dd j}t|d d t|d d t|d d	 t|d
 d t|d d t|d d d S )Nr   rK   r   r   r3  r   r4  r'   r5  r   r6  r   r7  r`   r8  r9  )r@   r;  r8   r8   r9   test_moments_normalized_spacing  s   r=  c                  C   s  t td j} d}t| | t tddd j} t| | tjdtd}t |d j}t|tjd  t |ddd j}t|t	d	t
d
  t t|d j}t|tj d  t t|ddd j}t|t	d	t
d
   t t|d j}t|tj d  t t|ddd j}t|t	d	t
d
   t tt|d j}t|tjd  t tt|ddd j}t|t	d	t
d
  d S )Nr   g/9vr   rK   r   r   r   r   r   g      ?)r   rR   orientationr   r/   eyere   mathr   arccosry   flipudfliplr)orienttarget_orientdiagorient_diagr8   r8   r9   test_orientation*  s,   

rH  c            	      C   s6  t g dg dg dg dg} t g dg dg dg dg}t g d	g d
g dg dg}t | ||f}t|}dd |D }t jj||d ddd t|d d t|d d t|d d d}ttt|dd j	}t
t|d}t|d |dd t|d |dd t|d |dd t|d |dd t|d |dd t|d  |dd t|d! |dd t|d" |dd t|d# |dd t|d$ |dd t|d% |dd t|d& |dd t|d' |dd t|d( |dd t|d) |dd t|d* |dd d S )+N)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   c                 S   s   g | ]}|j qS r8   )r>  ).0rY   r8   r8   r9   
<listcomp>P  s    z/test_orientation_continuity.<locals>.<listcomp>r   r   g{Gz?rtolatolge{g-DT!r   g4,1g뿩g	@r   r   rK   r+  r,  r   r   r   r-  r'   r   r   r   r`   r   r   r   r   r   r   r   r   )r/   r   hstackr   r
   r   r   rR   rS   moments_weighted_centralrP   )	arr1arr2arr3r   propsorientationsr@   wmur   r8   r8   r9   test_orientation_continuityG  sB   """rY  c                  C   s   t td j} d}t| | t tddd j} t| d|  ttddd} t| d	 tt t td
dd j} W d    d S 1 sFw   Y  d S )Nr   g֟K@r   rK   r   doubler#   )neighborhoodgXg	jG@r`   )r   rR   r   r   astyper
   rh   r]   )per
target_perr8   r8   r9   test_perimetern     

"r_  c                  C   s   t td j} d}t| | t tddd j} t| d|  ttddd} t| d tt t td	dd j} W d    d S 1 sFw   Y  d S )
Nr   gχ?N@r   rK   r   rZ  )
directionsgP@r`   )r   rR   r   r   r\  r
   rh   r]   )r]  target_per_crofr8   r8   r9   test_perimeter_crofton|  r`  rc  c                  C   s<   t td j} d}t| | t tddd j} t| | d S )Nr   g;On?)r   r   rK   )r   rR   solidityr   )rd  target_solidityr8   r8   r9   test_solidity  s
   
rf  c                  C   s   t } tt| d dd }tt| dddf dd }tt| dd }tj|jt|j tj|jt|jdddf  t	|jtj
fksLJ t	|jtj
dfksYJ t	|jtj
| j	d fksiJ tt| dd	}t|t|jks|J dS )
zBTest for https://github.com/scikit-image/scikit-image/issues/6860.).r   r  r   .r   Nr   )r   )r   
properties)#INTENSITY_FLOAT_SAMPLE_MULTICHANNELr   rR   r/   r
   r   r   squeezer   r=   ndimr   lenr   )r   rp0rp1rpmtabler8   r8   r9   )test_multichannel_centroid_weighted_table  s"    rp  c                  C     t ttdd j} tg dg dg dg dg}t| | ttdd}t|dd|d	  t|dd
|d  t|dd|d  t|dd|d  t|d
d|d  t|d
d
|d  t|d
d|d  t|d
d|d  t|dd|d  t|dd
|d  t|dd|d  t|dd|d  t|dd|d  t|dd
|d  t|dd|d  t|dd|d  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'   rK   r+  r   r,  r   r   r   r   r-  r   r   r   r`   r   rO  r   rP  r   r   )	r   rR   rS   rR  r/   r   r   rP   r   )rX  r   r   r8   r8   r9   test_moments_weighted_central  s<   

	rs  c               	   C   s  t g dg dg dg dg dg dg} d}tttdd j}d}t|| ttdd}|dd	|dd }|d	d|dd }t||f| d
}tt|d}|dd	|dd }|d	d|dd }ttt|dd j}t|||f t|dt |  t| | |dd j}t|dt |  d}tt|d}|dd	|dd }|d	d|dd }ttt|dd j}t|||f t| | |dd j}t||t |  d S )N)r   r   r   r   r   r   )r   r   r   r   r   r   )      @rt  r  r   )g8 u)@g1<S"@r'   rK   r   r   r   r   )g?gffffff?)	r/   r   r   rR   rS   r   r   rC   r   )sample_for_spacingtarget_centroid_wspacingr   target_centroidrO   rN   rM   r@   r8   r8   r9   test_centroid_weighted  st   


rx  c                  C   sl   t ttdd j} tg d}t| | tt	 t tddd j W d    d S 1 s/w   Y  d S )Nr  r   )ga'R?gg	?y?g"
-?g!mT?gODګ>gpcgʝ~ܾr`   rK   )
r   rR   rS   moments_weighted_hur/   r   r   r
   rh   r]   )whur   r8   r8   r9   test_moments_weighted_hu  s   
"r{  c                  C   rq  )Nr  r   rr  g     ؅@g     @g    P@g     y@g     @g    @g    .y!Ag     |@g    E@g    Ag   MAg    P@g    \Ag    ?Ag   p1zAr'   rK   r+  r   r,  r   r   r   r   r-  r   r   r   r`   r   rO  r   rP  r   r   	r   rR   rS   moments_weightedr/   r   r   rC   r   )wmr   rO   r8   r8   r9   test_moments_weighted  s4   
r  c                  C   s  t ttdd j} tg dg dg dg dg}t| | d}t tt|dd j}tt|d	}t|d
 |dd t|d |dd t|d |dd t|d |dd t|d |dd t|d |dd t|d |dd t|d |dd t|d |dd t|d |dd t|d |dd t|d |dd t|d |dd t|d |dd t|d |dd t|d |dddd d S )Nr  r   r|  r}  r~  r  rN  r   rK   r+  r,  r   r   r   r   r   r-  r'   r   r   r   r`   r   rO  r   rP  r   r   r&   r  r  )r  r   r@   rX  rO   r8   r8   r9   test_moments_weighted_spacing5  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   !%su?Smvlc6r?,>AkS*]?NCyicd?\}$bg7"h ;i\q?A׸R)r   rR   rS   moments_weighted_normalizedr/   r   nanr   )wnur   r8   r8   r9    test_moments_weighted_normalizedY  s   
r  c                  C   s  d} 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 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 t|d d t|d d t|d d d S )Nr   r   r   r  r  r  r  r  r  r  r   r   r'   r   r   r   r  r`   r  r   r  rO  r  r   r  rP  r  r   r  r  )r   rR   rS   r  r/   r   r  r   )r@   r  r8   r8   r9   (test_moments_weighted_normalized_spacingh  s4   
r  c                  C   s@   t td } tddg}t t|dd }t| j|j|  d S )Nr   i   i   )offset)r   rR   r/   r   r   r   )rV  r  props_offsetr8   r8   r9   test_offset_features  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   )r/   emptyre   r   rk  r   apsr8   r8   r9   test_label_sequence  s
   r  c                  C   s*   t jdtd} t| }t|dksJ d S )Nr   r   r   )r/   rd   re   r   rk  r  r8   r8   r9   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 rQ   )image_intensityr8   r  r8   r9   get_intensity_image     z)test_invalid.<locals>.get_intensity_image)r   rR   rg   rh   AttributeError)r  r8   r  r9   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   )r/   r   rg   rh   r   r   rR   )wrong_intensity_sampler8   r8   r9   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)r/   rd   re   r   r   )arrregionsr1r2r3r8   r8   r9   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 r8   r8   rI  r2   rX   r8   r9   
<dictcomp>      z*test_iterate_all_props.<locals>.<dictcomp>r  c                    r  r8   r8   r  r  r8   r9   r    r  )r   rR   rS   rk  )p0p1r8   r  r9   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)	rR   r   r   r  _label_imager   _cache_activer/   any)r   rX   f0f1r8   r8   r9   
test_cache  s   
r  c                  C   s2   t  } t| ddd }|j}|jt ksJ d S )NF)cacher   )rR   r   r   r  _cachedict)r   rX   _r8   r8   r9   test_disabled_cache_is_empty  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 )fooNr8   r8   r8   r8   r9   r    s    z&test_docstrings_and_props.<locals>.foor   c                 S   s   g | ]	}| d s|qS )r  
startswith)rI  r/  r8   r8   r9   rJ    r;   z-test_docstrings_and_props.<locals>.<listcomp>r  	iteration
r   )	rk   __doc__r   rR   r   dirrk  r   split)r  has_docstringsrX   docsrV  nr_docs_parsednr_propsdsr8   r8   r9   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   rn   )r   zbbox-0zbbox-1zbbox-2zbbox-3r   r   r   +rg  	separatorr_   )r   r   bbox+0bbox+1bbox+2bbox+3)r   rR   r   r/   r   )r  outr8   r8   r9   test_props_to_dict  s&   










r  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   rR   r/   r   r  r8   r8   r9   test_regionprops_table  s"   










r  c                  C   s,   t tdd} |  D ]	}|dsJ q
d S )N)local_centroidrg  r  )r   rR   keysr  )r  keyr8   r8   r9   1test_regionprops_table_deprecated_vector_property$  s   r  c                  C   s&   t tdd} t|  dgksJ d S )N)r   r  r   )r   rR   listr  r  r8   r8   r9   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 )Nr  -r   r   )r   rR   INTENSITY_FLOAT_SAMPLEr   r   r  items	enumerater/   isscalarr   object_r   
isinstancendarrayr=   rk  ndindexjoinmapstrr   )r  	out_tablerY   r    iregrpr=   indmodified_proplocr8   r8   r9   (test_regionprops_table_equal_to_original0  s"   

r  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   r   r  r  r  r  )r   r/   rd   re   rk  r  r8   r8   r9   !test_regionprops_table_no_regionsC  s   r  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   rR   rS   r   r   objecttyper/   ravel
issubdtypefloatingri   integerre   )msgrX   colrE   tr8   r8   r9   test_column_dtypes_correctP  s   00"r	  c                     s\   t d} | t}|d }tdd |}d  fdd|D }tt }||ks,J d S )Nznumpydoc.docscrapeNotesc                 S   s
   |  dS )Nz**r  )liner8   r8   r9   r:   h  s   
 z9test_all_documented_items_in_col_dtypes.<locals>.<lambda>z$\*\*(?P<property_name>[a-z_]+)\*\*.*c                    s   h | ]}t  |d qS )property_name)researchgroup)rI  property_linepatternr8   r9   	<setcomp>j  s    z:test_all_documented_items_in_col_dtypes.<locals>.<setcomp>)rg   importorskipFunctionDocr   filtersetr   r  )numpydoc_docscrape	docstringnotes_linesproperty_linesproperty_namescolumn_keysr8   r  r9   'test_all_documented_items_in_col_dtypesd  s   


r  c                 C   s
   t | S )z"a short test for an extra propertyr.   
regionmaskr8   r8   r9   
pixelcountr  s   
r!  c                 C   s   t ||  S r-   )r/   median)r   r  r8   r8   r9   intensity_medianw  r  r#  c                 C   s   dg| j d  S )z=Extra property whose output shape is dependent on mask shape.r   )r=   r  r8   r8   r9   	bbox_list{  s   r$  c                 C   r  r  r8   )r   r  superfluousr8   r8   r9   too_many_args     r&  c                   C   r  r  r8   r8   r8   r8   r9   too_few_args  r'  r(  c                  C   s.   t ttfdd } | jttdkksJ d S )Nextra_propertiesr   r   )r   rR   r!  r/   r0   r  r8   r8   r9   test_extra_properties  s   r+  c                  C   s4   t tttfdd } | jtttdk ksJ d S N)r   r*  r   r   )r   rR   rS   r#  r/   r"  r  r8   r8   r9   test_extra_properties_intensity  s    r-  intensity_propc                 C   sb   t td }tt}t||  W d    n1 sw   Y  d|  d}|t|jks/J d S )Nr   zAttribute 'z<' unavailable when `intensity_image` has not been specified.)r   rR   rg   rh   r  rT   r  value)r.  rX   eexpected_errorr8   r8   r9   test_intensity_image_required  s   
r2  c                  C   sH   t t tttfdd } | j}W d    d S 1 sw   Y  d S Nr)  r   )rg   rh   r  r   rR   r#  rX   r  r8   r8   r9   +test_extra_properties_no_intensity_provided  s   "r5  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 r3  )rg   rh   r  r   rR   r(  r&  r4  r8   r8   r9   test_extra_properties_nr_args  s   "r6  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 r,  )r   rR   rS   r#  r!  r/   r"  r0   r  r8   r8   r9   test_extra_properties_mixed  s   r7  c                  C   s   t ttdtttfd} t| d tddg t	| d tddg | d	 j
tjks-J | d	 d
 dgd ks:J | d	 d dgd ksGJ d S )Nr  )r   rg  r*  r#  r$   rt  r!  r   r   r$  r   r   )r   SAMPLE_MULTIPLEINTENSITY_SAMPLE_MULTIPLEr#  r!  r$  r   r/   r   r   r    r  r  r8   r8   r9   test_extra_properties_table  s   r:  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.Nr   ).r   r   )start_labelr   r)  r#  g-q=rK  )r   	astronautr   r\  ri   r/   maxr   r#  r  r   r  r=   r   r   asarray)	astroastro_greenlabelssegment_idxrX   region_multirY   r2   p_multir8   r8   r9   test_multichannel  s"   rE  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.
    )rq   r   r  ))r)  rn   )r)  r(  )r   rq   r   )	pad_widthr   )r   r1  r   r   )r  dimensionalityr   c                 S   s   g | ]}d | qS )r   r8   )rI  hr8   r8   r9   rJ    s    z2test_3d_ellipsoid_axis_lengths.<locals>.<listcomp>T)reverseg{Gz?gHz>r   N)r   	ellipsoidr\  re   r/   r   r	   EuclideanTransformndiaffine_transformparamsr   inertia_tensor_eigvalsr   sortedziprw   r  r  )	half_lengthsr0  Rr  evsaxis_lengthsexpected_lengthsax_len_expectedax_lenr8   r8   r9   test_3d_ellipsoid_axis_lengths  s   rY  c                  C   sf   t jdtd} d| d d ddf< t| }t|dksJ t|d }t|}|d |ks1J d S )Nrc   r   r   r   r!   )r/   rd   re   r   rk  pickledumpsloads)label_imager  pickled	unpickledr8   r8   r9   test_pickling_region_properties  s   
r`  )r'   )rD   )r@  rZ  r  numpyr/   rg   scipy.ndimagendimagerL  numpy.testingr   r   r   r   r   skimager   r   r	   skimage._sharedr
   skimage.measure._regionpropsr   r   r   r   r   r   r   r   r   r   r   r   skimage.segmentationr   r   rR   r   rS   r\  rj   r  newaxisrh  r?  int32r8  r9  rd   rx   r[   r\   rC   rJ   rP   rZ   r^   rb   rl   rm   r~   r   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r  infr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r   r#  r%  r'  r*  r0  r2  r<  r=  rH  rY  r_  rc  rf  rp  rs  rx  r{  r  r  r  r  r  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  r5  r6  r7  r:  rE  rY  r`  r8   r8   r8   r9   <module>   s\   8




2










!'	#5 $



	!