a
    
dx.                     @   s  d dl Z d dlZd dlZd dlmZ d dlmZ d dl	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 d4d	d
Zejdg ddd Zejdg ddd Zdd Z ejdej!ej"ej#gdd Z$dd Z%dd Z&ejdddgdd Z'dd Z(ejdej)ej*ej"ej#gejd g d!ejd"g d#d$d% Z+d&d' Z,d(d) Z-ejdej!ej"ej#gd*d+ Z.ejdej!ej"ej#gd,d- Z/ejdej!ej"ej#gd.d/ Z0d0d1 Z1d2d3 Z2dS )5    N)ndimage)draw)testing)assert_allcloseassert_almost_equalassert_equal)_supported_float_type)	centroidinertia_tensorinertia_tensor_eigvalsmomentsmoments_centralmoments_coordsmoments_coords_central
moments_humoments_normalized:0yE>c           	      C   s  |   } |  }tt|  d }tt| d }t|t|ksTJ t||ksfJ d| t| < d|t|< t| | dk  }t	j
t| jd f| j  D ]T}t|| jd d krd| |< d||< qt| | ||  }|| }||k sJ qdS )a  Compare two moments arrays.

    Compares only values in the upper-left triangle of m1, m2 since
    values below the diagonal exceed the specified order and are not computed
    when the analytical computation is used.

    Also, there the first-order central moments will be exactly zero with the
    analytical calculation, but will not be zero due to limited floating point
    precision when using a numerical computation. Here we just specify the
    tolerance as a fraction of the maximum absolute value in the moments array.
    r      N)copynpwhereisnanZravellenallabsmax	itertoolsproductrangeshapendimsum)	m1m2threshZnan_idx1Znan_idx2Zmax_valZordersZabs_diffZrel_diff r%   k/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/skimage/measure/tests/test_moments.pycompare_moments   s"     r'   anisotropic)FTNc                 C   s   t jdt jd}d|d< d|d< d|d< d|d< | r:d	}nd
}| d u rPt|}nt||d}t|d d t|d |d  d|d   t|d |d  d|d   d S )N   r*   dtyper      r.      r0         ?r.   r0   r0   r.   )gffffff?   r   r   spacingr   r      )r   r         -@r   r   r   )r   zerosfloat64r   r   r   )r(   imager7   mr%   r%   r&   test_moments5   s    
r@   c                 C   s  t jdt jd}d|d< d|d< d|d< d|d< | r:d	}nd
}| d u rZt|d}t|}n.t|d|d  d|d  f|d}t||d}t||dd t jdt jd}d|d< d|d< d|d< d|d< | d u rt|d}n"t|d|d  d|d  f|d}t||dd d S )Nr)   r+   r   r-   r/   r1   r2   r3   )r4   r   r5   r:   r:   r:   r   r6   g+=r$   )   rC   )   rD   )rC   rD   )rD   rC   )     0@rE   rE   )r   r<   r=   r   r'   double)r(   r>   r7   muZmu_calc_centroidimage2mu2r%   r%   r&   test_moments_centralI   s:    

rJ   c                  C   sb   t jdt jd} d| ddddf< t| }t jdd tddD t jd}t|}t|| d S )Nr)   r+   r      rD   c                 S   s$   g | ]}t d dD ]}||gqqS rK   rD   r   .0rcr%   r%   r&   
<listcomp>w   s   z'test_moments_coords.<locals>.<listcomp>)r   r<   r=   r   arrayr   r   r   )r>   mu_imagecoords	mu_coordsr%   r%   r&   test_moments_coordsr   s    rW   r,   c                 C   s   t jd| d}d|ddddf< t| }t|}|j|ks@J t jdd tddD | d}t|}|j|kstJ t|| d S )Nr)   r+   r   rK   rD   c                 S   s$   g | ]}t d dD ]}||gqqS rL   rM   rN   r%   r%   r&   rR      s   z-test_moments_coords_dtype.<locals>.<listcomp>)	r   r<   r   r   r,   rS   r   r   r   )r,   r>   expected_dtyperT   rU   rV   r%   r%   r&   test_moments_coords_dtype}   s    rY   c                  C   s   t jdt jd} d| ddddf< t| d}t jdd tddD t jd}t|d}t|| t|}t|| t jdt jd} d| d	d
d	d
f< t| d}t jdd td	d
D t jd}t|d}t|| d S )Nr)   r+   r   rK   rD   rA   c                 S   s$   g | ]}t d dD ]}||gqqS rL   rM   rN   r%   r%   r&   rR      s   z/test_moments_central_coords.<locals>.<listcomp>rC   r*   c                 S   s$   g | ]}t d dD ]}||gqqS )rC   r*   rM   rN   r%   r%   r&   rR      s   )r   r<   r=   r   rS   r   r   r   )r>   rT   rU   rV   Zmu_coords_calc_centroidr%   r%   r&   test_moments_central_coords   s$    





rZ   c                  C   s~   t jdt jd} d| ddddf< t| d}t|}t jdt jd}d|ddddf< t|d	}t|}t||dd
 d S )Nr)   r+   r   rK   rD   rA   gffffff?   )      '@r\   decimal)r   r<   r=   r   r   r   )r>   rG   nurH   rI   nu2r%   r%   r&   test_moments_normalized   s    

ra   FTc                 C   sx   t jdt jd}d|ddddf< | s2d}d}nd}d	}t||d
}t||d
}t||d
}t||d
}t|| d S )Nr)   r+   r   rK   rD   r5   r9   r9   )r   r4   )r4      r6   )r   r<   rF   r   r   r'   )r(   r>   Zspacing1Zspacing2rG   r_   rI   r`   r%   r%   r&   test_moments_normalized_spacing   s    rd   c                  C   sd   t ddd} t| }t|}|d |d ks2J t|d |d  t| }t|}t|| d S )Nr   
   )r   r   r4   )r   r4   r   )r4   r   r   )r   	ellipsoidr   r   r   r   r   r   )r>   rT   r_   rU   rV   r%   r%   r&   test_moments_normalized_3d   s    
rg   order)r   r4   r9   rc   r    )r4   r9   rc   c           	      C   s   |dkrd}n|dkrd}nd| }t jd}t | jdv rT|jdd	|| d
}n|j|| d
}t|d |d}t|t||d}|jt j	krdnd}t
|||d d S )Nr4   )   ri   r9   )@   rj   rj   )rC   i  iur   ri   r+   )centerrh   g-C6?g&.>rB   )r   randomZdefault_rngr,   kindZintegersZstandard_normalr   r	   float32r'   )	r,   rh   r    r   rngxr"   r#   r$   r%   r%   r&   #test_analytical_moments_calculation   s    rr   c                   C   sx   t t  ttdd W d    n1 s00    Y  t t  ttdd W d    n1 sj0    Y  d S )Nrb   r9   rc   )r   Zraises
ValueErrorr   r   r<   r%   r%   r%   r&   test_moments_normalized_invalid   s    .rt   c                  C   s   t jdt jd} d| ddddf< t| d}t|}t|}t jdt jd}d|dddf< |j}t|d	}t|}t|}t||dd
 d S )Nr)   r+   r   rK   r0   rD   g      +@r:   r[   )r\   r[   r]   )r   r<   r=   r   r   r   Tr   )r>   rG   r_   hurH   rI   r`   Zhu2r%   r%   r&   test_moments_hu   s    

rx   c                 C   sr   t jd| d}d|ddddf< t| }t|d}|j|ksBJ t|}|j|ksXJ t|}|j|ksnJ d S )Nr)   r+   r   rK   r0   rD   ru   )r   r<   r   r   r,   r   r   )r,   r>   rX   rG   r_   rw   r%   r%   r&   test_moments_dtype  s    
ry   c                 C   sl   t jd| d}d|dddf< d|dddf< t|}| t jkrFd}n| t jkrVd	}nd
}t|d|d d S )Nr)   r+   r   r.   rC   gUUUUUU?r0   MbP?gh㈵>gHz>)g     ,@r:   )rtol)r   r<   r	   float16ro   r   )r,   r>   Zimage_centroidr{   r%   r%   r&   test_centroid  s    

r}   c                 C   s   t jd| d}d|ddddf< t|j}t|}|j|ksBJ |d |d	 ksVJ t j|d
 d t||d\}}|j|ksJ |j|ksJ t jjt || dddd d S )N)(   r~   r+   r   r0         #   r8   r5   r;   r   )rv   r9   {Gz?g?)r{   atol)	r   r<   r   r,   r
   r   r   r   sqrt)r,   r>   rX   rv   v0Zv1r%   r%   r&   test_inertia_tensor_2d'  s    
r   c                  C   s:  t ddd} t| }tj|\}}|d d t|f }t|g dsbt| g dsbJ tj	| 
tdddd}t|}tj|\}}|d d t|f }	tjtjtj  }
}}t||
d	 ||
d	  d
g||
d	 ||
d	 d
gg dg}|| }tj|	|ddds6tj|	 |ddds6J d S )Nre   r   r9   )r   r   r      r;   r   )Zaxesrh      r   )r   r   r   rz   r   )r   r{   )r   rf   r
   r   ZlinalgZeigZargminZallclosendirotateZastypefloatpicossinrS   )r>   ZT0Zeig0ZV0r   ZimrotZTrZeigrZVrZvrr   r   r   RZexpected_vrr%   r%   r&   test_inertia_tensor_3d8  s$    &r   c                  C   s:   t g dg dg dg} t| d}t|dks6J 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   rS   r   min)r>   Zeigvalsr%   r%   r&   test_inertia_tensor_eigvalsP  s    

r   )r   )3r   numpyr   ZpytestZscipyr   r   Zskimager   Zskimage._sharedr   Zskimage._shared.testingr   r   r   Zskimage._shared.utilsr   Zskimage.measurer	   r
   r   r   r   r   r   r   r   r'   markZparametrizer@   rJ   rW   r|   ro   r=   rY   rZ   ra   rd   rg   Zuint8int32rr   rt   rx   ry   r}   r   r   r   r%   r%   r%   r&   <module>   sF   ,
#

(




