
    0-Ph-                     ^   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 d#d	Zej                            d
g d          d             Zej                            d
g d          d             Zd Z ej                            dej!        ej"        ej#        g          d             Z$d Z%d Z&ej                            d
ddg          d             Z'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                                     Z+d Z,d Z-ej                            dej!        ej"        ej#        g          d             Z.ej                            dej!        ej"        ej#        g          d             Z/ej                            dej!        ej"        ej#        g          d              Z0d! Z1d" Z2dS )$    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                    |                                  } |                                 }t          j        t          j        |                                                     d         }t          j        t          j        |                                                    d         }t          |          t          |          k    sJ t          j        ||k              sJ d| t          j        |           <   d|t          j        |          <   t          j        | | dk                                                       }t          j
        t          | j        d                   f| j        z   D ]Y}t          |          | j        d         dz
  k    rd| |<   d||<   .t          | |         ||         z
            }||z  }||k     sJ Zd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isnanravellenallabsmax	itertoolsproductrangeshapendimsum)	m1m2threshnan_idx1nan_idx2max_valordersabs_diffrel_diffs	            b/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/skimage/measure/tests/test_moments.pycompare_momentsr/      s    
B	B x,,--a0Hx,,--a0Hx==CMM))))6(h&'''''Brx||Brx||fRa[!!%%''G#uRXa['9'9&;bg&EG ! !v;;!q((BvJBvJr&zBvJ.//g%&     ! !    anisotropic)FTNc                    t          j        dt           j                  }d|d<   d|d<   d|d<   d|d<   | rd	}nd
}| t          |          }nt          ||          }t	          |d         d           t          |d         |d         z  d|d         z             t          |d         |d         z  d|d         z             d S )N   r4   dtyper      r8      r:         ?r8   r:   r:   r8   )gffffff?   r   r   spacingr   r      )r   r         -@r   r   r   )r   zerosfloat64r   r   r   )r1   imagerA   ms       r.   test_momentsrJ   ;   s    HXRZ000EE&ME&ME&ME&M ENNE7+++4!$!D')4'!*+<===$!D')4'!*+<=====r0   c                 P   t          j        dt           j                  }d|d<   d|d<   d|d<   d|d<   | rd	}nd
}|  t          |d          }t          |          }n7t          |d|d         z  d|d         z  f|          }t          ||          }t	          ||d           t          j        dt           j                  }d|d<   d|d<   d|d<   d|d<   | t          |d          }n&t          |d|d         z  d|d         z  f|          }t	          ||d           d S )Nr3   r5   r   r7   r9   r;   r<   r=   )r>   r   r?   rD   rD   rD   r   r@   g+=r'   )   rN   )   rO   )rN   rO   )rO   rN   )     0@rP   rP   )r   rF   rG   r   r/   double)r1   rH   rA   mumu_calc_centroidimage2mu2s          r.   test_moments_centralrV   O   sw   HXRZ000EE&ME&ME&ME&M UL11*511D71:%tgaj'897
 
 
 +5'BBBB(7777 Xhbi000FF6NF6NF6NF6Nf&:;;h'!*,x71:.EFPW
 
 
 BE******r0   c                  (   t          j        dt           j                  } d| ddddf<   t          |           }t          j        d t          dd          D             t           j                  }t          |          }t          ||           d S )Nr3   r5   r      rO   c                 <    g | ]}t          d d          D ]}||gS rX   rO   r!   .0rcs      r.   
<listcomp>z'test_moments_coords.<locals>.<listcomp>}   1    >>>Ab">>1!Q>>>>r0   )r   rF   rG   r   arrayr!   r   r   )rH   mu_imagecoords	mu_coordss       r.   test_moments_coordsrf   w   s    HXRZ000EE"R%B,u~~HX>>r2>>>bj  F v&&I	8,,,,,r0   r6   c                 R   t          j        d|           }d|ddddf<   t          |           }t          |          }|j        |k    sJ t          j        d t          dd          D             |           }t          |          }|j        |k    sJ t          ||           d S )Nr3   r5   r   rX   rO   c                 <    g | ]}t          d d          D ]}||gS rZ   r[   r\   s      r.   r`   z-test_moments_coords_dtype.<locals>.<listcomp>   ra   r0   )	r   rF   r	   r   r6   rb   r!   r   r   )r6   rH   expected_dtyperc   rd   re   s         r.   test_moments_coords_dtyperj      s    HXU+++EE"R%B,*511Nu~~H>^++++X>>r2>>>e  F v&&I?n,,,,	8,,,,,r0   c                     t          j        dt           j                  } d| ddddf<   t          | d          }t          j        d t          dd          D             t           j                  }t          |d          }t          ||           t          |          }t          ||           t          j        dt           j                  } d| dd	dd	f<   t          | d          }t          j        d
 t          dd	          D             t           j                  }t          |d          }t          ||           d S )Nr3   r5   r   rX   rO   rL   c                 <    g | ]}t          d d          D ]}||gS rZ   r[   r\   s      r.   r`   z/test_moments_central_coords.<locals>.<listcomp>   ra   r0   rN   r4   c                 <    g | ]}t          d d          D ]}||gS )rN   r4   r[   r\   s      r.   r`   z/test_moments_central_coords.<locals>.<listcomp>   ra   r0   )r   rF   rG   r   rb   r!   r   r   )rH   rc   rd   re   mu_coords_calc_centroids        r.   test_moments_central_coordsro      sI   HXRZ000EE"R%B,ul33HX>>r2>>>bj  F 'v|<<I	8,,, 5V<</;;; HXRZ000EE"R%B,ul33HX>>r2>>>bj  F 'v|<<I	8,,,,,r0   c                  R   t          j        dt           j                  } d| ddddf<   t          | d          }t	          |          }t          j        dt           j                  }d|ddddf<   t          |d	          }t	          |          }t          ||d
           d S )Nr3   r5   r   rX   rO   rL   gffffff?   )      '@rr   decimal)r   rF   rG   r   r   r   )rH   rR   nurT   rU   nu2s         r.   test_moments_normalizedrw      s    HXRZ000EE"R%B,		-	-B	B		BXhbj111FF2b5"R%<
&,
/
/C
S
!
!CC++++++r0   FTc                    t          j        dt           j                  }d|ddddf<   | sd}d}nd}d	}t          ||
          }t	          ||
          }t          ||
          }t	          ||
          }t          ||           d S )Nr3   r5   r   rX   rO   r?   rC   rC   )r   r>   )r>      r@   )r   rF   rQ   r   r   r/   )r1   rH   spacing1spacing2rR   ru   rU   rv   s           r.   test_moments_normalized_spacingr}      s    HXRY///EE"R%B, 		1	1	1B	B	1	1	1B
%
2
2
2C
S(
3
3
3C Br0   c                  4   t          j        ddd          } t          |           }t          |          }|d         |d         k    sJ t	          |d         |d                    t          j        |           }t          |          }t	          ||           d S )Nr   
   )r   r   r>   )r   r>   r   )r>   r   r   )r   	ellipsoidr   r   r   r   r   r   )rH   rc   ru   rd   re   s        r.   test_moments_normalized_3dr      s    N1a$$Eu%%H	H	%	%Bg;G$$$$7R[111Xe__F&v..I),,,,,r0   order)r   r>   rC   rz   r#   )r>   rC   rz   c                    |dk    rd}n|dk    rd}nd|z  }t           j                            d          }t          j        |           j        dv r|                    dd	|| 
          }n|                    || 
          }t          |d |          }t          |t          |          |          }|j        t           j	        k    rdnd}t          |||           d S )Nr>   )   r   rC   )@   r   r   )rN   i  iur   r   r5   )centerr   ga2U0*#?g&.>rM   )r   randomdefault_rngr6   kindintegersstandard_normalr   r
   float32r/   )	r6   r   r#   r"   rngxr%   r&   r'   s	            r.   #test_analytical_moments_calculationr      s     qyy	
)


%
%C	xt##LLCeL44U33	4u	5	5	5B	8A;;e	<	<	<B w"*,,VV$FB6******r0   c                  T   t          j        t                    5  t          t	          j        d          d           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d          d           d d d            d S # 1 swxY w Y   d S )Nry   rC   rz   )r   raises
ValueErrorr   r   rF    r0   r.   test_moments_normalized_invalidr      s   	
	#	# 0 028F++Q///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0	
	#	# 0 028F++Q///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s#   #A		AA-#BB!$B!c                     t          j        dt           j                  } d| ddddf<   t          | d          }t	          |          }t          |          }t          j        dt           j                  }d|dddf<   |j        }t          |d	          }t	          |          }t          |          }t          ||d
           d S )Nr3   r5   r   rX   r:   rO   g      +@rD   rq   )rr   rq   rs   )r   rF   rG   r   r   r   Tr   )rH   rR   ru   hurT   rU   rv   hu2s           r.   test_moments_hur     s    HXRZ000EE"R%B,		-	-B	B		B	BBXhbj111FF2r"u9XF
&*
-
-C
S
!
!C
S//CC++++++r0   c                    t          j        d|           }d|ddddf<   t          |           }t          |d          }|j        |k    sJ t          |          }|j        |k    sJ t          |          }|j        |k    sJ d S )Nr3   r5   r   rX   r:   rO   r   )r   rF   r	   r   r6   r   r   )r6   rH   ri   rR   ru   r   s         r.   test_moments_dtyper     s    HXU+++EE"R%B,*511N		-	-B8~%%%%	B		B8~%%%%	BB8~%%%%%%r0   c                     t          j        d|           }d|dddf<   d|dddf<   t          |          }| t           j        k    rd}n| t           j        k    rd	}nd
}t          |d|           d S )Nr3   r5   r   r8   rN   gUUUUUU?r:   MbP?gh㈵>gHz>)g     ,@rD   )rtol)r   rF   r
   float16r   r   )r6   rH   image_centroidr   s       r.   test_centroidr   "  s    HXU+++EE"be)E"be)e__N
	"*		NM======r0   c                    t          j        d|           }d|ddddf<   t          |j                  }t	          |          }|j        |k    sJ |d         |d	         k    sJ t           j                            |d
         d           t          ||          \  }}|j        |k    sJ |j        |k    sJ t           j                            t          j        ||z            ddd           d S )N)(   r   r5   r   r:         #   rB   r?   rE   r   )r   rC   {Gz?g?)r   atol)	r   rF   r	   r6   r   r   r   r   sqrt)r6   rH   ri   r   v0v1s         r.   test_inertia_tensor_2dr   1  s    HXU+++EE"R%2+*5;77NuA7n$$$$T7QtWJqw***#EQ///FB8~%%%%8~%%%%JrwrBw//DIIIIIr0   c                     t          j        ddd          } t          |           }t          j                            |          \  }}|d d t          j        |          f         }t          j        |g d          st          j        | g d          sJ t          j	        | 
                    t                    ddd          }t          |          }t          j                            |          \  }}|d d t          j        |          f         }	t          j        t          j        t          j        }}}
t          j         ||
d	z             ||
d	z             d
g ||
d	z             ||
d	z            d
gg dg          }||z  }t          j        |	|dd          st          j        |	 |dd          sJ d S d S )Nr   r   rC   )r   r   r      rE   r   )axesr      r   )r   r   r   r   r   )r   r   )r   r   r   r   linalgeigargminallclosendirotateastypefloatpicossinrb   )rH   T0eig0V0r   imrotTreigrVrvrr   r   r   Rexpected_vrs                  r.   test_inertia_tensor_3dr   B  s   N2q!$$E			By}}R  HD"	AAAry	B;r999%%DbS))))D)DDDDJu||E**BV1EEEE			By}}R  HD"	AAAry	B 5"&"&SB

#b1f++BF|Q	'##b1f++ss26{{A)F			R	 	A b&K;r;T=== 	[t$B B B       r0   c                      t          j        g dg dg dg          } t          |           }t          |          dk    sJ 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   )rH   r   )r   rb   r   min)rH   eigvalss     r.   test_inertia_tensor_eigvalsr   [  sd     H999999999	
 E %5111Gw<<1r0   )r   )3r   numpyr   pytestscipyr   r   skimager   skimage._sharedr   skimage._shared.testingr   r   r   skimage._shared.utilsr	   skimage.measurer
   r   r   r   r   r   r   r   r   r/   markparametrizerJ   rV   rf   r   r   rG   rj   ro   rw   r}   r   uint8int32r   r   r   r   r   r   r   r   r   r0   r.   <module>r      s                              # # # # # # V V V V V V V V V V 7 7 7 7 7 7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 !  !  !  !F (;(;(;<<> > =<>& (;(;(;<<$+ $+ =<$+N	- 	- 	- 2:rz2:"FGG- - HG-"- - -6, , , 66  76*	- 	- 	- 28RXrz2:"NOO,,,//+++ + ,+ 0/ PO+,0 0 0, , ," 2:rz2:"FGG& & HG& 2:rz2:"FGG> > HG> 2:rz2:"FGGJ J HGJ   2    r0   