U
    ?h7                     @   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"d d d d d d d d d dd ddd d d d d gd d d d d d d d ddddd d d d d d gd d d d d d d d dddd d d d d d d gd d d d d d d d dddd d d d d d d gd d d d d d ddddddd d d d d d gd d d d d d dddddddddddd gd d d d d d dddddddddddd gdd dd d ddd ddd d dddddd gd dddddddd ddd d d ddddgd ddd d dddd d d d d d d d ddgg
Z#e#$ Z%de%dd	d
f< e%$ &ej'd Z(e(dej)f dddg 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&d' Z:d(d) Z;d*d+ Z<d,d- Z=ej>?d.e#dfe#dfe#dfe#d/fe1dfe1dfe1d0fgd1d2 Z@d3d4 ZAd5d6 ZBd7d8 ZCd9d: ZDd;d< ZEd=d> ZFd?d@ ZGdAdB ZHej>?dCdDdEdFgdddgdddggdGdH ZIej>?dCdIdJgdKdL ZJej>?dCejKejLejL gdMdN ZMej>?dCdgddggdfdOdP ZNej>?dCdDdEgddgddggdQdR ZOej>?dCdSgdSddDggdTdU ZPdVdW ZQdXdY ZRdZd[ ZSd\d] ZTej>?dCddddd^gd_d` ZUej>?dCddddagdbdc ZVddde ZWdfdg ZXdhdi ZYdjdk ZZdldm Z[dndo Z\dpdq Z]drds Z^dtdu Z_dvdw Z`dxdy Zadzd{ Zbd|d} Zcd~d 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      	      g      $@.   
   dtype                @   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 X/var/www/html/venv/lib/python3.8/site-packages/skimage/measure/tests/test_regionprops.py<lambda>6       z%get_moment_function.<locals>.<lambda>shaper,   meshgridlinspace)r4   spacingrowscolsr5   r1   r6   get_moment_function2   s    
 
r@   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+   )r/   r0   rr2   r3   Zr4   r5   r6   r7   >   r8   z'get_moment3D_function.<locals>.<lambda>r9   )r4   r=   Zslicesr>   r?   r5   rC   r6   get_moment3D_function9   s     rE   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.   r2   r3   cXcYr4   r5   r6   r7   J   r8   z-get_central_moment_function.<locals>.<lambda>)r:   r,   r;   r<   r@   )r4   r=   r>   r?   Mpqr5   rG   r6   get_central_moment_functionA   s    
 
rK   c               	   C   st   t ttd } tD ]\}zBt| | t| t|  | |krVtt| |t| t|  W q tk
rl   Y qX qd S Nr   )r   SAMPLEINTENSITY_SAMPLEr   r   getattrlower	TypeErrorregionpropr5   r5   r6   test_all_propsM   s    
rU   c               
   C   sx   t ttd } tD ]`}zBt| | t| t|  | |krVtt| |t| t|  W q ttfk
rp   Y qX qd S rL   )	r   	SAMPLE_3DINTENSITY_SAMPLE_3Dr   r   rO   rP   NotImplementedErrorrQ   rR   r5   r5   r6   test_all_props_3d_   s    
rY   c                  C   s<   t td j} | dkstt tddd j} | dks8td S )Nr   H   r   r   rF   )r   rM   
num_pixelsAssertionError)r\   r5   r5   r6   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 5 Q R X tt t tjdtj	d W 5 Q R X tt t tjdt
d W 5 Q R X d S )Nr   r   r   )r   r,   zerosintZuintpytestraisesrQ   floatfloat64boolr5   r5   r5   r6   
test_dtypew   s    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 5 Q R X d S )Nr_   r   )r   r   r   )r   r   r   r&   rA   )r   r   r   r   )r   r,   r`   ra   rb   rc   rQ   r5   r5   r5   r6   	test_ndim   s    rh   c                  C   s   d} t td j}t||  dk s(td}t tddgdd j}t|| dk sXttjdtjd}d|d	d
d	d
f< t |d j}t|dtd	  dk stt|td dk std S )N   r   r   r   皙?rF      rl   r   r      i  ư>	r   rM   feret_diameter_maxr,   absr]   r`   uint8sqrt)comparator_resulttest_resultZcomparator_result_spacingZtest_result_spacingr4   rq   r5   r5   r6   test_feret_diameter_max   s     rw   c               
   C   s   d} t td j}t||  dk s(t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 std S )Nri   r   r   r[   rk   r   r   rm   rF   rn   ro   rp   )ru   rv   r=   r4   rq   r5   r5   r6   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^td
}t||dd j}t |t |d d d |d d d  |d d d   d	k stt |t |d d d |d d d  |d d d   d	kstt |t |d d d |d d d  |d d d   d	ksPtd S )Nrk   r   r   r   rm   r   r   i  ro   )r   r   r   rF      rn   )	r,   r`   rs   Zdstackr   rq   rr   rt   r]   )r4   Zimg_3drq   r=   r5   r5   r6   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:td S )NrF   r   r   )r   arear,   r-   prodr]   )sampler=   r|   Zdesiredr5   r5   r6   	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{   rF   r   r   )r   r   r      r   r   )      ?r   r!   )r   rM   bboxr   r:   copyrV   )r   
SAMPLE_modr5   r5   r6   	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,   padrM   r   	area_bboxr   size)padded	bbox_arear5   r5   r6   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   rF   r   )r,   r   rM   r   r   r   r   r}   )r=   r   r   r5   r5   r6   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   ga2rF   r   r   r   )r   rM   moments_centralr   rK   )mu
centralMpqr5   r5   r6   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?rF   r   r   r   r   r   r&   r   r[   r   r{   r   )rK   rM   r   r   r   )r=   r   r   r5   r5   r6   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&   rF   r   )r   rM   centroidr   r@   )r   rJ   rI   rH   r5   r5   r6   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   rF   r   r   )r@   rM   r   r   r   r=   rJ   rI   rH   r   r5   r5   r6   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   rA   rF   r   )r   rV   r   r   rE   )r   MpqrcZrI   rH   r5   r5   r6   test_centroid_3d1  s    
r   r=    @g@ffffff@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.rF   r   r   N)rE   rV   r   r   r   )r=   r   r   rI   rH   r   r5   r5   r6   test_spacing_parameter_3d?  s    r   )r   y              ?y      ?        c              	   C   s0   t jtdd tt| dd j W 5 Q R X dS )r   z3Element of spacing isn't float or integer type, gotmatchrF   r   N)rb   rc   rQ   r   rM   r   rF   r5   r5   r6   $test_spacing_parameter_complex_inputO  s    r   c              	   C   s,   t t tt| dd j W 5 Q R X dS )r   rF   r   Nrb   rc   
ValueErrorr   rM   r   rF   r5   r5   r6   test_spacing_parameter_nan_infX  s    r   c              	   C   s0   t jtdd tt| dd j W 5 Q R X d S )Nz%spacing isn't a scalar nor a sequencer   rF   r   r   rF   r5   r5   r6   test_spacing_mismtaching_shapea  s    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   rF   r   r   intensity_imager=   N)r@   rN   r   rM   centroid_weightedr   r   r5   r5   r6   test_spacing_parameter_2di  s
    r   z	bad inputc              	   C   s.   t t ttt| dd j W 5 Q R X dS )r   r   r   N)rb   rc   r   r   rM   rN   r   rF   r5   r5   r6   #test_spacing_parameter_2d_bad_inputw  s    r   c                  C   s   t td j} | dkstd S )Nr   }   )r   rM   area_convexr]   r|   r5   r5   r6   test_area_convex  s    r   c                  C   s0   d} t t| dd j}|dt|  ks,td S )Nr   r   rF   r   r   )r   rM   r   r,   r}   r]   )r=   r|   r5   r5   r6   test_area_convex_spacing  s    r   c                  C   s  t td j} tddddddddddddddddddgddddddddddddddddddgddddddddddddddddddgddddddddddddddddddgddddddddddddddddddgddddddddddddddddddgddddddddddddddddddgddddddddddddddddddgddddddddddddddddddgddddddddddddddddddgg
}t| | d S Nr   r   )r   rM   Zimage_convexr,   arrayr   )r4   refr5   r5   r6   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?rF   )r,   r`   int8r   r   coordsr   )r~   r   prop_coordsr5   r5   r6   test_coordinates  s    $
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 krp|}n|t |  }t|| d S )	Nr_   r   r   r   r   r   r   rF   r,   r`   r   r   r   Zcoords_scaledr   r=   r~   r   r   Zdesired_coordsr5   r5   r6   test_coordinates_scaled  s    $r   )皙?r   r   c                 C   s   t jdt jd}t dddgdddgdddgg}d||d d df |d d df |d d df f< t|| dd j}| d kr|}n|t |  }t|| d S )Nr$   r   r   r   r   r   rF   r   r   r5   r5   r6   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   rM   r:   r   slicer   )r   nrowncolresultexpectedr5   r5   r6   
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   rF   r   )r   r   r   r   r   r=   r5   r5   r6   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   rF   )r    r    r   r   r   r   r   r   )r   rM   Zeccentricityr   r,   r`   ra   )epsr4   r5   r5   r6   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   rF   r#   r   )r   rM   Zequivalent_diameter_arear   r,   pir-   r}   )Zdiameterr=   Zequivalent_arear5   r5   r6   test_equivalent_diameter_area  s    
r   c                  C   s  dD ]|} t t| dd j}|dks&tt }d|d< t || dd j}|dksTtttd}|dksjtt|d}|dkstqttd}|dkstttd}|dksttd	}d|d
dd
dd
df< t|d}|dkstd|ddddddf< t|d}|dkstd S )N)r&   )r   g?rF   r   r!   r   r   r   r   )d   r   r   (   <   -   7   )r   rM   r   r]   r   rV   r,   r`   )r=   enr   ZSAMPLE_3D_2r5   r5   r6   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   rF   )r   rM   extentr   )r   r5   r5   r6   test_extent  s    
r   c               	   C   s\   t td j} tdddddddg}t| | tt t td	d
d j W 5 Q R X d S )Nr   g?z~?gu/,?g'?gHU-T?g^L>gw-g?b1۾r[   rF   )	r   rM   Z
moments_hur,   r   r   r
   rc   rX   )hur   r5   r5   r6   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   rM   imager   rV   r4   r5   r5   r6   
test_image+  s    
r   c                  C   s4   t td j} t| d t td j} t| d d S r   )r   rM   labelr   rV   r   r5   r5   r6   
test_label3  s    
r   c                  C   s$   t td j} | ttks td S rL   )r   rM   area_filledr,   r-   r]   r   r5   r5   r6   test_area_filled;  s    r   c                  C   s4   t  } d| d< t| d j}|tt ks0td S )Nr   r   )rM   r   r   r   r,   r-   r]   )r   r|   r5   r5   r6   test_area_filled_zero@  s    r   c                  C   st   t  } d| d< d}tt |dd j}|tt t| ksBtt| |dd j}|tt t| ksptd S )Nr   r   )r   r   rF   )rM   r   r   r   r,   r-   r}   r]   )r   r=   r|   r5   r5   r6   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   rF   )r   rM   image_filledr   r   r5   r5   r6   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stt |d d d d df ddd j} t| |dd d S )Nr   g8D0@r   rF   r   ellipse)rl      r   r   r!   r   r   rotationr   r&   rj   r{   decimal)r   rM   axis_major_lengthr   skimage.drawr   r,   r`   rs   deg2radaxis_minor_lengthrr   r]   lengthZtarget_lengthr   r4   ZrrccZlength_wo_spacingr5   r5   r6   test_axis_major_lengthZ  s     
$r  c                  C   s    t ttdd j} t| d d S )Nr   r   r   )r   rM   rN   Zintensity_maxr   Z	intensityr5   r5   r6   test_intensity_maxq  s    
r  c                  C   s    t ttdd j} t| d d S )Nr  r   gqq?)r   rM   rN   Zintensity_meanr   r  r5   r5   r6   test_intensity_meanw  s    
r  c                  C   s    t ttdd j} t| d d S )Nr  r   r   )r   rM   rN   Zintensity_minr   r  r5   r5   r6   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stt |d d d ddd j} t| |dd d S )Nr   g7z#@r   rF   r   r   )r      r   r    r%   r      r   r   r&   r   rj   r[   r   )r   rM   r   r   r   r   r,   r`   rs   r   rr   r]   r   r5   r5   r6   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@rF   r   r   r   )r   rM   momentsr   r@   )mrJ   r5   r5   r6   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?rF   r   r  r  r   r   r   r   r   r  r&   r{   r   r[   r   )r   rM   r  r@   r   )r=   r  rJ   r5   r5   r6   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   rM   Zmoments_normalizedr   )nur5   r5   r6   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   rF   r   r   r  r   r  r&   r  r{   r  r   r  r[   r  r  )r=   r  r5   r5   r6   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   rF   r   r   r   r{   r   g      ?)r   rM   orientationr   r,   eyera   mathr   Zarccosrt   ZflipudZfliplr)ZorientZtarget_orientZdiagZorient_diagr5   r5   r6   test_orientation  s,    

r   c            	   	   C   sf  t ddddgddddgddddgddddgg} t ddddgddddgddddgddddgg}t ddddgddddgddddgddddg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 )Nr   r   r   r   c                 S   s   g | ]
}|j qS r5   )r  ).0rT   r5   r5   r6   
<listcomp>  s     z/test_orientation_continuity.<locals>.<listcomp>g{Gz?ZrtolZatolge{g-DT!g4,1g뿩g	@r   r   rF   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   rM   rN   moments_weighted_centralrK   )	Zarr1Zarr2Zarr3r   propsZorientationsr=   wmur   r5   r5   r6   test_orientation_continuity  sB    222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 5 Q R X d S )Nr   g֟K@r   rF   r   doubler"   )ZneighborhoodgXg	jG@r[   )r   rM   r   r   astyper
   rc   rX   )perZ
target_perr5   r5   r6   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 5 Q R X d S )
Nr   gχ?N@r   rF   r   r+  )Z
directionsgP@r[   )r   rM   r   r   r,  r
   rc   rX   )r-  Ztarget_per_crofr5   r5   r6   test_perimeter_crofton0  s    

r/  c                  C   s<   t td j} d}t| | t tddd j} t| | d S )Nr   g;On?)r   r   rF   )r   rM   solidityr   )r0  Ztarget_solidityr5   r5   r6   test_solidity>  s
    
r1  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stt	|jtj
dfkstt	|jtj
| j	d fksttt| dd	}t|t|jkst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   rM   r,   r
   r   r   Zsqueezer   r:   ndimr]   r   lenr   )r   Zrp0Zrp1Zrpmtabler5   r5   r6   )test_multichannel_centroid_weighted_tableG  s&    



r7  c               	   C   s  t ttdd j} tddddgddd	d
gddddgddddg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og}gF%uݓg~2	@g"0V0r   )	precisionr&   rF   r  r   r  r   r   r   r   r  r{   r   r   r[   r   r%  r   r&  r   r   )
r   rM   rN   r'  r,   r   Zset_printoptionsr   rK   r   )r)  r   r   r5   r5   r6   test_moments_weighted_central\  sJ    


r:  c                  C   s  t ddddddgddddddgddddddgddddddgddddddgddddddg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 )Nr   r   )      @r;  r  )g8 u)@g1<S"@r&   rF   r   r   r   )g?gffffff?)	r,   r   r   rM   rN   r   r   r@   r   )Zsample_for_spacingZtarget_centroid_wspacingr   Ztarget_centroidrJ   rI   rH   r=   r5   r5   r6   test_centroid_weighted  sH    

r<  c               	   C   s`   t ttdd j} tddddddd	g}t| | tt	 t td
dd j W 5 Q R X d S )Nr  r   ga'R?gg	?y?g"
-?g!mT?gODګ>gpcgʝ~ܾr[   rF   )
r   rM   rN   Zmoments_weighted_hur,   r   r   r
   rc   rX   )Zwhur   r5   r5   r6   test_moments_weighted_hu  s    
	
r=  c               	   C   s  t ttdd j} tddddgddd	d
gddddgddddg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   r8       ؅@     @    P@     y@     @    @    .y!A     |@    E@    A   MA    P@    \A    ?A   p1zAr&   rF   r  r   r  r   r   r   r   r  r{   r   r   r[   r   r%  r   r&  r   r   	r   rM   rN   Zmoments_weightedr,   r   r   r@   r   )wmr   rJ   r5   r5   r6   test_moments_weighted  s8    





rO  c               	   C   s  t ttdd j} tddddgddd	d
gddddgddddg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   r8  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  r$  r   rF   r  r  r   r   r   r   r   r  r&   r{   r   r   r[   r   r%  r   r&  r   r   r%   r   rM  )rN  r   r=   r)  rJ   r5   r5   r6   test_moments_weighted_spacing  sD    





rP  c               	   C   sX   t ttdd j} ttjtjddgtjdddgdd	d
dgddddgg}t| | d S )Nr  r   !%su?Smvlc6r?,>AkS*]?NCyicd?\}$bg7"h ;i\q?A׸R)r   rM   rN   moments_weighted_normalizedr,   r   nanr   )wnur   r5   r5   r6    test_moments_weighted_normalized  s    


ra  c               	   C   s
  d} t tt| dd j}ttjtjddgtjdddgd	d
ddgddddg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   rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r   r   r&   r{   r   r   r[   r   r%  r   r&  r   )r   rM   rN   r^  r,   r   r_  r   )r=   r`  r5   r5   r6   (test_moments_weighted_normalized_spacing  s,    

rb  c                  C   s@   t td } tddg}t t|dd }t| j|j|  d S )Nr   i   i   )offset)r   rM   r,   r   r   r   )r(  rc  Zprops_offsetr5   r5   r6   test_offset_features#  s    rd  c                  C   sP   t jdtd} d| d d d d f< t| }t|dks:t|d jdksLtd S )Nr   r   r   r   r   )r,   emptyra   r   r5  r]   r   apsr5   r5   r6   test_label_sequence+  s
    ri  c                  C   s*   t jdtd} t| }t|dks&td S )Nr   r   r   )r,   r`   ra   r   r5  r]   rf  r5   r5   r6   test_pure_background3  s    rj  c               	      s4   t t  fdd} tt |   W 5 Q R X d S )Nc                      s    d j  d S rL   )image_intensityr5   rh  r5   r6   get_intensity_image<  s    z)test_invalid.<locals>.get_intensity_image)r   rM   rb   rc   AttributeError)rm  r5   rl  r6   test_invalid9  s    ro  c               	   C   s6   t dgdgg} tt tt|  W 5 Q R X d S Nr   )r,   r   rb   rc   r   r   rM   )Zwrong_intensity_sampler5   r5   r6   test_invalid_sizeC  s    rq  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regionsr1r2Zr3r5   r5   r6   test_equalsI  s    rx  c                     sX   t td   fdd D } t ttdd   fdd D }t| t|k sTtd S )Nr   c                    s   i | ]}| | qS r5   r5   r!  r/   rS   r5   r6   
<dictcomp>[  s      z*test_iterate_all_props.<locals>.<dictcomp>r  c                    s   i | ]}| | qS r5   r5   ry  rz  r5   r6   r{  ^  s      )r   rM   rN   r5  r]   )p0p1r5   rz  r6   test_iterate_all_propsY  s
    r~  c                  C   sZ   t  } t| d }|j}d|jd d< |j}t|| d|_|j}t||ksVt	d S )Nr   r   r   F)
rM   r   r   r   Z_label_imager   Z_cache_activer,   anyr]   )r   rS   Zf0f1r5   r5   r6   
test_cachec  s    
r  c                  C   s   dd } t | j}ttd }t }dd t|D }t|}t|}|rt|| |d }d|kshtt|	dd	kstn
t|d d S )
Nc                   S   s   dS )fooNr5   r5   r5   r5   r6   r  u  s    z&test_docstrings_and_props.<locals>.foor   c                 S   s   g | ]}| d s|qS )_)
startswith)r!  r  r5   r5   r6   r"  }  s     
 z-test_docstrings_and_props.<locals>.<listcomp>r^  	iteration
r   )
rf   __doc__r   rM   r   dirr5  r   r]   split)r  Zhas_docstringsrS   docsr(  Znr_docs_parsedZnr_propsZdsr5   r5   r6   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sPt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std S Nr   r   r   ri   )r   zbbox-0zbbox-1zbbox-2zbbox-3r   r|   r   +r2  	separatorrZ   )r   r|   bbox+0bbox+1bbox+2bbox+3)r   rM   r   r,   r   r]   )ru  outr5   r5   r6   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sHt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std S r  )r   rM   r,   r   r]   r  r5   r5   r6   test_regionprops_table  s     
 

 

 

 
r  c                  C   s,   t tdd} |  D ]}|dstqd S )N)local_centroidr2  r  )r   rM   keysr  r]   )r  keyr5   r5   r6   1test_regionprops_table_deprecated_vector_property  s    r  c                  C   s&   t tdd} t|  dgks"td S )N)r   r  r   )r   rM   listr  r]   r  r5   r5   r6   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
ks`|tjk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   rM   INTENSITY_FLOAT_SAMPLEr   r   r  items	enumerater,   Zisscalarr   Zobject_r   
isinstanceZndarrayr:   r5  Zndindexjoinmapstrr   )ru  Z	out_tablerT   r   iregrpr:   indZmodified_proplocr5   r5   r6   (test_regionprops_table_equal_to_original  s$    

r  c                  C   s   t tjdtdddd} t| dks(tt| d dks<tt| d	 dksPtt| d
 dksdtt| d dksxtt| d dkstt| d dkstd S )Nr   r   r  r  r  r%   r   r   r|   r  r  r  r  )r   r,   r`   ra   r5  r]   r  r5   r5   r6   !test_regionprops_table_no_regions  s    r  c                   C   s&   t t tt t ks"td S r*   )setr   r  unionr   r   valuesr]   r5   r5   r5   r6   test_column_dtypes_complete  s    r  c               
   C   s   d} t ttdd }tD ]}|| }|tkr>t| tkstqtt	|d }t
|tjrt| tkst| d| d|  dt|  qt
|tjrt| tkst| d| d|  dt|  qdst| d| d|  dt|  qd S )Nzmismatch with expected type,r  r   z dtype  F)r   rM   rN   r   r   objectr]   typer,   ZravelZ
issubdtypeZfloatingrd   integerra   )msgrS   colrB   tr5   r5   r6   test_column_dtypes_correct  s&    r  c                 C   s
   t | S )z"a short test for an extra propertyr+   )
regionmaskr5   r5   r6   
pixelcount  s    r  c                 C   s   t ||  S r*   )r,   median)r  rk  r5   r5   r6   intensity_median  s    r  c                 C   s   dS rp  r5   )r  rk  Zsuperfluousr5   r5   r6   too_many_args  s    r  c                   C   s   dS rp  r5   r5   r5   r5   r6   too_few_args  s    r  c                  C   s.   t ttfdd } | jttdkks*td S )Nextra_propertiesr   r   )r   rM   r  r,   r-   r]   rz  r5   r5   r6   test_extra_properties  s    r  c                  C   s4   t tttfdd } | jtttdk ks0td S N)r   r  r   r   )r   rM   rN   r  r,   r  r]   rz  r5   r5   r6   test_extra_properties_intensity  s    r  intensity_propc              	   C   sN   t td }tt}t||  W 5 Q R X d|  d}|t|jksJtd S )Nr   zAttribute 'z<' unavailable when `intensity_image` has not been specified.)	r   rM   rb   rc   rn  rO   r  valuer]   )r  rS   eZexpected_errorr5   r5   r6   test_intensity_image_required  s    
r  c               	   C   s2   t t tttfdd } | j}W 5 Q R X d S Nr  r   )rb   rc   rn  r   rM   r  rS   r  r5   r5   r6   +test_extra_properties_no_intensity_provided  s    r  c               	   C   s`   t t tttfdd } | j}W 5 Q R X t t tttfdd } | j}W 5 Q R X d S r  )rb   rc   rn  r   rM   r  r  r  r5   r5   r6   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s2t| jttdkksJtd S r  )	r   rM   rN   r  r  r,   r  r]   r-   rz  r5   r5   r6   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   r2  r  r  r#   r;  r  r   r   )	r   SAMPLE_MULTIPLEINTENSITY_SAMPLE_MULTIPLEr  r  r   r,   r   r   r  r5   r5   r6   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_idxrS   Zregion_multirT   r/   Zp_multir5   r5   r6   test_multichannel<  s0    r  c            	      C   s   d} t j|  t}tj|dddgdd}tjddd	gd
d}t	||j
}t|d }|j}t|}tdd | D dd}t||D ] \}}t|| d| k stqt|j|d  dk stt|j|d  dk stdS )zuVerify that estimated axis lengths are correct.

    Uses an ellipsoid at an arbitrary position and orientation.
    )rl   r   rs  )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   r5   )r!  hr5   r5   r6   r"  q  s     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   r   )	Zhalf_lengthsr  Rr  ZevsZaxis_lengthsZexpected_lengthsZax_len_expectedZax_lenr5   r5   r6   test_3d_ellipsoid_axis_lengthsY  s    r  )r&   )rA   )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   rM   r   rN   r,  re   r  Znewaxisr3  r  Zint32r  r  r`   rs   rV   rW   r@   rE   rK   rU   rY   r^   rg   rh   rw   rx   rz   markZ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  r  r  r  r   r*  r.  r/  r1  r7  r:  r<  r=  rO  rP  ra  rb  rd  ri  rj  ro  rq  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  r5   r5   r5   r6   <module>   sV  8&&&&&&&&&&



  



 


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