a
    
d7                     @   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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 Z.ej/dej0dZ1de1ddddddf< de1d< e1$ Z2dd d!Z3dd#d$Z4dd%d&Z5d'd( Z6d)d* Z7d+d, Z8d-d. Z9d/d0 Z:d1d2 Z;d3d4 Z<d5d6 Z=ej>?d7e#dfe#dfe#dfe#d8fe1dfe1dfe1d9fgd:d; Z@d<d= ZAd>d? ZBd@dA ZCdBdC ZDdDdE ZEdFdG ZFdHdI ZGdJdK ZHej>?dLg dMg dNg dOgdPdQ ZIej>?dLdRdSgdTdU ZJej>?dLejKejLejL gdVdW ZMej>?dLdgddggd"fdXdY ZNej>?dLdZd[gddgddggd\d] ZOej>?dLd^gg d_gd`da ZPdbdc ZQddde ZRdfdg ZSdhdi ZTej>?dLg djdkdl ZUej>?dLg dmdndo ZVdpdq ZWdrds ZXdtdu ZYdvdw ZZdxdy Z[dzd{ Z\d|d} Z]d~d Z^dd Z_dd 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 Zej>?dedd 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Zendpointr   ijZindexingc                    s   t |   |   S NnpsumpqXYimg o/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/skimage/measure/tests/test_regionprops.py<lambda>6       z%get_moment_function.<locals>.<lambda>shaper-   meshgridlinspace)r5   spacingrowscolsr6   r2   r7   get_moment_function2   s
    

rA   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,   )r0   r1   rr3   r4   Zr5   r6   r7   r8   >   r9   z'get_moment3D_function.<locals>.<lambda>r:   )r5   r>   Zslicesr?   r@   r6   rD   r7   get_moment3D_function9   s    rF   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,   r/   r3   r4   cXcYr5   r6   r7   r8   J   r9   z-get_central_moment_function.<locals>.<lambda>)r;   r-   r<   r=   rA   )r5   r>   r?   r@   Mpqr6   rH   r7   get_central_moment_functionA   s    

rL   c               	   C   sr   t ttd } tD ]Z}zBt| | t| t|  | |krVtt| |t| t|  W q tyj   Y q0 qd S Nr   )r   SAMPLEINTENSITY_SAMPLEr   r   getattrlower	TypeErrorregionpropr6   r6   r7   test_all_propsM   s    
rV   c               
   C   sv   t ttd } tD ]^}zBt| | t| t|  | |krVtt| |t| t|  W q ttfyn   Y q0 qd S rM   )	r   	SAMPLE_3DINTENSITY_SAMPLE_3Dr   r   rP   rQ   NotImplementedErrorrR   rS   r6   r6   r7   test_all_props_3d_   s    
rZ   c                  C   s<   t td j} | dksJ t tddd j} | dks8J d S )Nr   H   r   r   rG   )r   rN   
num_pixels)r]   r6   r6   r7   test_num_pixelso   s    r^   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 sX0    Y  tt$ t tjdtj	d W d    n1 s0    Y  tt" t tjdt
d W d    n1 s0    Y  d S )Nr   r   r   )r   r-   zerosintZuintpytestraisesrR   floatfloat64boolr6   r6   r6   r7   
test_dtypew   s    02rg   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    n1 s0    Y  d S )Nr_   r   )r   r   r   )r   r   r   r'   rB   )r   r   r   r   )r   r-   r`   ra   rb   rc   rR   r6   r6   r6   r7   	test_ndim   s    rh   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 sXJ tjdtjd}d|d	d
d	d
f< t |d j}t|dtd	  dk sJ t|td dk sJ d S )N   r   r   r   皙?rG      rl   r   r      i  ư>r   rN   feret_diameter_maxr-   absr`   uint8sqrt)comparator_resulttest_resultZcomparator_result_spacingZtest_result_spacingr5   rq   r6   r6   r7   test_feret_diameter_max   s     rw   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 sJ d S )Nri   r   r   r\   rk   r   r   rm   rG   rn   ro   rp   )ru   rv   r>   r5   rq   r6   r6   r7   test_feret_diameter_max_spacing   s    
rx   c                  C   sT  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 sJ 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sPJ d S )Nrk   r   r   r   rm   r   r   i  ro   r   rG      rn   )r-   r`   rs   Zdstackr   rq   rr   rt   )r5   Zimg_3drq   r>   r6   r6   r7   test_feret_diameter_max_3d   sD    



rz   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 )NrG   r   r   )r   arear-   r.   prod)sampler>   r|   Zdesiredr6   r6   r7   	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{   rG   r   r   )r   r   r      r   r   )      ?r   r"   )r   rN   bboxr   r;   copyrW   )r   
SAMPLE_modr6   r6   r7   	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-   padrN   r   	area_bboxr   size)padded	bbox_arear6   r6   r7   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   rG   r   )r-   r   rN   r   r   r   r   r}   )r>   r   r   r6   r6   r7   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   ga2rG   r   r   r   )r   rN   moments_centralr   rL   )mu
centralMpqr6   r6   r7   test_moments_central   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?rG   r   r   r   r   r   r'   r   r\   r   r{   r   )rL   rN   r   r   r   )r>   r   r   r6   r6   r7   test_moments_central_spacing
  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'   rG   r   )r   rN   centroidr   rA   )r   rK   rJ   rI   r6   r6   r7   test_centroid  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   rG   r   r   )rA   rN   r   r   r   r>   rK   rJ   rI   r   r6   r6   r7   test_centroid_spacing&  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   rB   rG   r   )r   rW   r   r   rF   )r   MpqrcZrJ   rI   r6   r6   r7   test_centroid_3d1  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.rG   r   r   N)rF   rW   r   r   r   )r>   r   r   rJ   rI   r   r6   r6   r7   test_spacing_parameter_3d?  s    r   )r   y              ?y      ?        c                 C   sD   t jtdd" tt| dd j W d   n1 s60    Y  dS )r   z3Element of spacing isn't float or integer type, gotmatchrG   r   N)rb   rc   rR   r   rN   r   rG   r6   r6   r7   $test_spacing_parameter_complex_inputO  s    r   c                 C   s@   t t" tt| dd j W d   n1 s20    Y  dS )r   rG   r   Nrb   rc   
ValueErrorr   rN   r   rG   r6   r6   r7   test_spacing_parameter_nan_infX  s    r   c                 C   sD   t jtdd" tt| dd j W d    n1 s60    Y  d S )Nz%spacing isn't a scalar nor a sequencer   rG   r   r   rG   r6   r6   r7   test_spacing_mismtaching_shapea  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   rG   r   r   intensity_imager>   N)rA   rO   r   rN   centroid_weightedr   r   r6   r6   r7   test_spacing_parameter_2di  s
    r   	bad input)r   r   r   c                 C   sB   t t$ ttt| dd j W d   n1 s40    Y  dS )r   r   r   N)rb   rc   r   r   rN   rO   r   rG   r6   r6   r7   #test_spacing_parameter_2d_bad_inputw  s    r   c                  C   s   t td j} | dksJ d S )Nr   }   )r   rN   area_convexr|   r6   r6   r7   test_area_convex  s    r   c                  C   s0   d} t t| dd j}|dt|  ks,J d S )Nr   r   rG   r   r   )r   rN   r   r-   r}   )r>   r|   r6   r6   r7   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   rN   Zimage_convexr-   arrayr   )r5   refr6   r6   r7   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 )
Nr_   r   r   r   r   r   r   )r   333333?rG   )r-   r`   int8r   r   coordsr   )r~   r   prop_coordsr6   r6   r7   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 rp|}n|t |  }t|| d S )	Nr_   r   r   r   r   r   r   rG   r-   r`   r   r   r   Zcoords_scaledr   r>   r~   r   r   Zdesired_coordsr6   r6   r7   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   rB   )r   r   r   )r   r   r   r   r   r   rG   r   r   r6   r6   r7   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   rN   r;   r   slicer   )r   nrowncolresultexpectedr6   r6   r7   
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   rG   r   )r   r   r   r   r   r>   r6   r6   r7   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   rG   )r!   r!   r   r   r   r   r   r   )r   rN   Zeccentricityr   r-   r`   ra   )Zepsr5   r6   r6   r7   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   rG   r$   r   )r   rN   Zequivalent_diameter_arear   r-   pir.   r}   )Zdiameterr>   Zequivalent_arear6   r6   r7   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sTJ ttd}|dksjJ t|d}|dksJ qttd}|dksJ ttd}|dksJ td	}d|d
dd
dd
df< t|d}|dksJ d|ddddddf< t|d}|dksJ d S )N)r'   )r   g?rG   r   r"   r   r   r   r   )d   r   r   (   <   -   7   )r   rN   r   r   rW   r-   r`   )r>   enr   ZSAMPLE_3D_2r6   r6   r7   test_euler_number  s,    






r   c                  C   s8   t td j} t| d t tddd j} t| d d S )Nr   皙?)r!   r   rG   )r   rN   extentr   )r   r6   r6   r7   test_extent  s    
r   c                  C   sf   t td j} tg d}t| | tt" t tddd j W d    n1 sX0    Y  d S )Nr   )g?z~?gu/,?g'?gHU-T?g^L>gw-g?b1۾r\   rG   )	r   rN   Z
moments_hur-   r   r   r
   rc   rY   )hur   r6   r6   r7   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   rN   imager   rW   r5   r6   r6   r7   
test_image+  s    
r   c                  C   s4   t td j} t| d t td j} t| d d S )Nr   r   )r   rN   labelr   rW   r   r6   r6   r7   
test_label3  s    
r   c                  C   s$   t td j} | ttks J d S rM   )r   rN   area_filledr-   r.   r   r6   r6   r7   test_area_filled;  s    r   c                  C   s4   t  } d| d< t| d j}|tt ks0J d S )Nr   r   )rN   r   r   r   r-   r.   )r   r|   r6   r6   r7   test_area_filled_zero@  s    r   c                  C   st   t  } d| d< d}tt |dd j}|tt t| ksBJ t| |dd j}|tt t| kspJ d S )Nr   r   )r   r   rG   )rN   r   r   r   r-   r.   r}   )r   r>   r|   r6   r6   r7   test_area_filled_spacingG  s    r   c                  C   s8   t td j} t| t t tddd j} t| t d S )Nr   r   rG   )r   rN   image_filledr   r   r6   r6   r7   test_image_filledS  s    
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sJ t |d d d d df ddd j} t| |dd d S )Nr   g8D0@r   rG   r   ellipse)rl      r   r   r"   r   r   rotationr   r'   rj   r{   decimal)r   rN   axis_major_lengthr   skimage.drawr   r-   r`   rs   deg2radaxis_minor_lengthrr   lengthZtarget_lengthr   r5   rrccZlength_wo_spacingr6   r6   r7   test_axis_major_lengthZ  s     
$r  c                  C   s    t ttdd j} t| d d S )Nr   r   r   )r   rN   rO   Zintensity_maxr   Z	intensityr6   r6   r7   test_intensity_maxq  s    
r  c                  C   s    t ttdd j} t| d d S )Nr  r   gqq?)r   rN   rO   Zintensity_meanr   r  r6   r6   r7   test_intensity_meanw  s    
r  c                  C   s    t ttdd j} t| d d S )Nr  r   r   )r   rN   rO   Zintensity_minr   r  r6   r6   r7   test_intensity_min}  s    
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sJ t |d d d ddd j} t| |dd d S )Nr   g7z#@r   rG   r   r   )r      r   r!   r&   r      r   r   r'   r   rj   r\   r   )r   rN   r   r   r   r   r-   r`   rs   r   rr   r   r6   r6   r7   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@rG   r   r   r   )r   rN   momentsr   rA   )mrK   r6   r6   r7   test_moments  s,    r  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?rG   r   r  r  r   r   r   r   r   r  r'   r{   r   r\   r   )r   rN   r  rA   r   )r>   r  rK   r6   r6   r7   test_moments_spacing  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   r   e/
?r   cZr'   ,lC@r{   ^ ^H?r   /O懵?r\   ⪹Rgr   rN   Zmoments_normalizedr   )nur6   r6   r7   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   rG   r   r   r  r   r  r'   r  r{   r  r   r  r\   r  r  )r>   r  r6   r6   r7   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   rG   r   r   r   r{   r   g      ?)r   rN   orientationr   r-   eyera   mathr   Zarccosrt   ZflipudZfliplr)ZorientZtarget_orientZdiagZorient_diagr6   r6   r7   test_orientation  s,    

r!  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 r6   )r  ).0rU   r6   r6   r7   
<listcomp>  r9   z/test_orientation_continuity.<locals>.<listcomp>r   r   g{Gz?ZrtolZatolge{g-DT!r   g4,1g뿩g	@r   r   rG   r  r  r   r   r   r  r'   r{   r   r   r\   r   r   r   r   r   r   r   r   )r-   r   Zhstackr   r
   r   r   rN   rO   moments_weighted_centralrL   )	Zarr1Zarr2Zarr3r   propsZorientationsr>   wmur   r6   r6   r7   test_orientation_continuity  sB    """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    n1 s0    Y  d S )Nr   g֟K@r   rG   r   doubler#   )ZneighborhoodgXg	jG@r\   )r   rN   r   r   astyper
   rc   rY   )perZ
target_perr6   r6   r7   test_perimeter"  s    

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    n1 s0    Y  d S )
Nr   gχ?N@r   rG   r   r,  )Z
directionsgP@r\   )r   rN   r   r   r-  r
   rc   rY   )r.  Ztarget_per_crofr6   r6   r7   test_perimeter_crofton0  s    

r0  c                  C   s<   t td j} d}t| | t tddd j} t| | d S )Nr   g;On?)r   r   rG   )r   rN   solidityr   )r1  Ztarget_solidityr6   r6   r7   test_solidity>  s
    
r2  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sJ t	|jtj
dfksJ t	|jtj
| j	d fksJ tt| dd	}t|t|jksJ 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   rN   r-   r
   r   r   Zsqueezer   r;   ndimr   lenr   )r   Zrp0Zrp1Zrpmtabler6   r6   r7   )test_multichannel_centroid_weighted_tableG  s&    



r8  c                  C   s  t ttdd j} tg dg dg dg dg}tjdd 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   )Z	precisionr'   rG   r  r   r  r   r   r   r   r  r{   r   r   r\   r   r&  r   r'  r   r   )
r   rN   rO   r(  r-   r   Zset_printoptionsr   rL   r   )r*  r   r   r6   r6   r7   test_moments_weighted_central\  s:    


r:  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   )      @r;  r  r   )g8 u)@g1<S"@r'   rG   r   r   r   r   )g?gffffff?)	r-   r   r   rN   rO   r   r   rA   r   )Zsample_for_spacingZtarget_centroid_wspacingr   Ztarget_centroidrK   rJ   rI   r>   r6   r6   r7   test_centroid_weighted  sH    

r<  c                  C   sj   t ttdd j} tg d}t| | tt	" t tddd j W d    n1 s\0    Y  d S )Nr  r   )ga'R?gg	?y?g"
-?g!mT?gODګ>gpcgʝ~ܾr\   rG   )
r   rN   rO   Zmoments_weighted_hur-   r   r   r
   rc   rY   )Zwhur   r6   r6   r7   test_moments_weighted_hu  s    
	
r=  c                  C   s  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   r9  g     ؅@g     @g    P@g     y@g     @g    @g    .y!Ag     |@g    E@g    Ag   MAg    P@g    \Ag    ?Ag   p1zAr'   rG   r  r   r  r   r   r   r   r  r{   r   r   r\   r   r&  r   r'  r   r   	r   rN   rO   Zmoments_weightedr-   r   r   rA   r   )wmr   rK   r6   r6   r7   test_moments_weighted  s8    

rD  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@  rA  r%  r   rG   r  r  r   r   r   r   r   r  r'   r{   r   r   r\   r   r&  r   r'  r   r   r&   r   rB  )rC  r   r>   r*  rK   r6   r6   r7   test_moments_weighted_spacing  sD    

rE  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   rN   rO   moments_weighted_normalizedr-   r   nanr   )wnur   r6   r6   r7    test_moments_weighted_normalized  s    
rX  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   rF  rG  rH  rI  rJ  rK  rP  r   r   r'   r{   r   r   rL  r\   rM  r   rN  r&  rO  r   rQ  r'  rR  r   rS  rT  )r   rN   rO   rU  r-   r   rV  r   )r>   rW  r6   r6   r7   (test_moments_weighted_normalized_spacing  s,    rY  c                  C   s@   t td } tddg}t t|dd }t| j|j|  d S )Nr   i   i   )offset)r   rN   r-   r   r   r   )r)  rZ  Zprops_offsetr6   r6   r7   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sLJ d S )Nr   r   r   r   r   )r-   emptyra   r   r6  r   apsr6   r6   r7   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-   r`   ra   r   r6  r]  r6   r6   r7   test_pure_background3  s    ra  c                     sH   t t  fdd} tt |   W d    n1 s:0    Y  d S )Nc                      s    d j  d S rM   )image_intensityr6   r_  r6   r7   get_intensity_image<  s    z)test_invalid.<locals>.get_intensity_image)r   rN   rb   rc   AttributeError)rd  r6   rc  r7   test_invalid9  s    rf  c                  C   sJ   t dgdgg} tt tt|  W d    n1 s<0    Y  d S Nr   )r-   r   rb   rc   r   r   rN   )Zwrong_intensity_sampler6   r6   r7   test_invalid_sizeC  s    rh  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-   r`   ra   r   r   )ZarrregionsZr1Zr2Zr3r6   r6   r7   test_equalsI  s    rm  c                     sX   t td   fdd D } t ttdd   fdd D }t| t|k sTJ d S )Nr   c                    s   i | ]}| | qS r6   r6   r"  r0   rT   r6   r7   
<dictcomp>[  r9   z*test_iterate_all_props.<locals>.<dictcomp>r  c                    s   i | ]}| | qS r6   r6   rn  ro  r6   r7   rp  ^  r9   )r   rN   rO   r6  )Zp0p1r6   ro  r7   test_iterate_all_propsY  s
    rr  c                  C   sZ   t  } t| d }|j}d|jd d< |j}t|| d|_|j}t||ksVJ d S )Nr   r   r   F)	rN   r   r   r   Z_label_imager   Z_cache_activer-   any)r   rT   Zf0f1r6   r6   r7   
test_cachec  s    
ru  c                  C   s   dd } t | j}ttd }t }dd t|D }t|}t|}|rt|| |d }d|vshJ t|dd	ksJ n
t|d d S )
Nc                   S   s   dS )fooNr6   r6   r6   r6   r7   rv  u  s    z&test_docstrings_and_props.<locals>.foor   c                 S   s   g | ]}| d s|qS )_)
startswith)r"  r  r6   r6   r7   r#  }  r9   z-test_docstrings_and_props.<locals>.<listcomp>rU  	iteration
r   )	rf   __doc__r   rN   r   dirr6  r   split)rv  Zhas_docstringsrT   Zdocsr)  Znr_docs_parsedZnr_propsZdsr6   r6   r7   test_docstrings_and_propst  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sPJ 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sJ d S Nr   r   r   ri   )r   zbbox-0zbbox-1zbbox-2zbbox-3r   r|   r   +r3  	separatorr[   )r   r|   bbox+0bbox+1bbox+2bbox+3)r   rN   r   r-   r   )rl  outr6   r6   r7   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sHJ 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sJ d S r  )r   rN   r-   r   r  r6   r6   r7   test_regionprops_table  s    r  c                  C   s,   t tdd} |  D ]}|dsJ qd S )N)local_centroidr3  r  )r   rN   keysrx  )r  keyr6   r6   r7   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   rN   listr  r  r6   r6   r7   1test_regionprops_table_deprecated_scalar_property  s    r  c               	   C   s   t tt} tttt d}t D ]\}}t| D ]\}}|| }t	|s`|t
v s`|tju rtt||| |  q4t|tjr|jnt|f}t|D ]H}dtt|f| }	t|dkr|n|d }
t||
 ||	 |  qq4q$d S )Nr  -r   r   )r   rN   INTENSITY_FLOAT_SAMPLEr   r   r  items	enumerater-   Zisscalarr   Zobject_r   
isinstanceZndarrayr;   r6  Zndindexjoinmapstrr   )rl  Z	out_tablerU   r    iregrpr;   indZmodified_proplocr6   r6   r7   (test_regionprops_table_equal_to_original  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sPJ t| d
 dksdJ t| d dksxJ t| d dksJ t| d dksJ d S )Nr   r   r  r  r  r&   r   r   r|   r  r  r  r  )r   r-   r`   ra   r6  r  r6   r6   r7   !test_regionprops_table_no_regions  s    r  c                   C   s&   t t tt t ks"J d S r+   )setr   r  unionr   r   valuesr6   r6   r6   r7   test_column_dtypes_complete  s    r  c               
   C   s   d} t ttdd }tD ]}|| }|tv r>t| tksJ qtt|d }t	|tj
rt| tksJ | d| d|  dt|  qt	|tjrt| tksJ | d| d|  dt|  qdsJ | d| d|  dt|  qd S )Nzmismatch with expected type,r  r   z dtype  F)r   rN   rO   r   r   objecttyper-   ZravelZ
issubdtypeZfloatingrd   integerra   )msgrT   colrC   tr6   r6   r7   test_column_dtypes_correct  s&    r  c                 C   s
   t | S )z"a short test for an extra propertyr,   )
regionmaskr6   r6   r7   
pixelcount  s    r  c                 C   s   t ||  S r+   )r-   median)r  rb  r6   r6   r7   intensity_median  s    r  c                 C   s   dS rg  r6   )r  rb  Zsuperfluousr6   r6   r7   too_many_args  s    r  c                   C   s   dS rg  r6   r6   r6   r6   r7   too_few_args  s    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   rN   r  r-   r.   ro  r6   r6   r7   test_extra_properties  s    r  c                  C   s4   t tttfdd } | jtttdk ks0J d S N)r   r  r   r   )r   rN   rO   r  r-   r  ro  r6   r6   r7   test_extra_properties_intensity  s    r  intensity_propc                 C   sb   t td }tt}t||  W d    n1 s60    Y  d|  d}|t|jks^J d S )Nr   zAttribute 'z<' unavailable when `intensity_image` has not been specified.)r   rN   rb   rc   re  rP   r  value)r  rT   eZexpected_errorr6   r6   r7   test_intensity_image_required  s    (
r  c                  C   sF   t t( tttfdd } | j}W d    n1 s80    Y  d S Nr  r   )rb   rc   re  r   rN   r  rT   rw  r6   r6   r7   +test_extra_properties_no_intensity_provided  s    r  c                  C   s   t t( tttfdd } | j}W d    n1 s80    Y  t t( tttfdd } | j}W d    n1 sz0    Y  d S r  )rb   rc   re  r   rN   r  r  r  r6   r6   r7   test_extra_properties_nr_args   s    $r  c                  C   sN   t ttttfdd } | jtttdk ks2J | jttdkksJJ d S r  )r   rN   rO   r  r  r-   r  r.   ro  r6   r6   r7   test_extra_properties_mixed)  s    r  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   r3  r  r  r$   r;  r  r   r   )	r   SAMPLE_MULTIPLEINTENSITY_SAMPLE_MULTIPLEr  r  r   r-   r   r   r  r6   r6   r7   test_extra_properties_table2  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 ]N}|| }|| }t|t|krt|| q~t|t|d d	d	d
 q~dS )z2Test that computing multichannel properties works.Nr   ).r   r   )Zstart_labelr   r  r  g-q=r$  )r   Z	astronautr   r-  rd   r-   maxr   r  r  r   r  r;   r   r   Zasarray)	ZastroZastro_greenlabelsZsegment_idxrT   Zregion_multirU   r0   Zp_multir6   r6   r7   test_multichannel<  s0    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 sJ qt|j|d  dk sJ t|j|d  dk sJ dS )zuVerify that estimated axis lengths are correct.

    Uses an ellipsoid at an arbitrary position and orientation.
    )rl   r   rj  ))r
  ri   )r
  r	  )r   rl   r   )Z	pad_widthr   )r   r  r   r   )r   Zdimensionalityr   c                 S   s   g | ]}d | qS )r   r6   )r"  hr6   r6   r7   r#  q  r9   z2test_3d_ellipsoid_axis_lengths.<locals>.<listcomp>T)reverseg{Gz?gHz>r   N)r   Z	ellipsoidr-  ra   r-   r   r	   ZEuclideanTransformndiZaffine_transformparamsr   Zinertia_tensor_eigvalsr   sortedziprr   r   r   )	Zhalf_lengthsr  Rr  ZevsZaxis_lengthsZexpected_lengthsZax_len_expectedZax_lenr6   r6   r7   test_3d_ellipsoid_axis_lengthsY  s    
r  )r'   )rB   )r'   )r   numpyr-   rb   Zscipy.ndimageZndimager  Znumpy.testingr   r   r   r   r   Zskimager   r   r	   Zskimage._sharedr
   Zskimage.measure._regionpropsr   r   r   r   r   r   r   r   r   r   r   r   Zskimage.segmentationr   r   rN   r   rO   r-  re   r  Znewaxisr4  r  int32r  r  r`   rs   rW   rX   rA   rF   rL   rV   rZ   r^   rg   rh   rw   rx   rz   markZparametrizer   r   r   r   r   r   r   r   r   r   r   rV  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  r  r  r  r!  r+  r/  r0  r2  r8  r:  r<  r=  rD  rE  rX  rY  r[  r`  ra  rf  rh  rm  rr  ru  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r6   r6   r6   r7   <module>   sL  8











	


!&	$)"


		
