
    a6dA                     4   d dl Zd dlm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mZ d dlmZ d dlmZ d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z# eed          d             Z$d Z%d Z&d Z'd Z(d Z)d Z*d  Z+d! Z,d" Z-d# Z.dS )$    N)testing)expected_warnings)arch32assert_almost_equalassert_array_lessassert_equalxfail)LineModelNDCircleModelEllipseModelransac)_dynamic_max_trials)AffineTransformc                      t                      } d| _        t          j        dd          }|                     |          }t          ||                     |                     d S )N))r   r   )   r   
   )r
   paramsnparange	predict_yr   	predict_xmodelxys      >lib/python3.11/site-packages/skimage/measure/tests/test_fit.pytest_line_model_predictr      sV    MME#EL
	#rAA5??1--.....    c                     t          j        t                    5  t                                          t          j        d                     d d d            n# 1 swxY w Y   t          j        t                    5  t                                          t          j        d                     d d d            n# 1 swxY w Y   t          j        t                    5  t                                          t          j        d          t          j        d                     d d d            n# 1 swxY w Y   t          j        t                    5  t                                          t          j        d                     d d d            n# 1 swxY w Y   t          j        t                    5  t                                          t          j        d          t          j        d                     d d d            n# 1 swxY w Y   t                                          t          j	        d                    rJ t                                          t          j	        d                    rJ t          j        t                    5  t                      
                    t          j	        d                     d d d            d S # 1 swxY w Y   d S )Nr   )r      )r      )r   raises
ValueErrorr
   r   r   zerosr   estimateempty	residuals r   r    test_line_model_nd_invalid_inputr*      s   	
	#	# - -,,,- - - - - - - - - - - - - - - 

	#	# - -,,,- - - - - - - - - - - - - - - 

	#	# : :RXa[[999: : : : : : : : : : : : : : : 

	#	# - -,,,- - - - - - - - - - - - - - - 

	#	# : :RXa[[999: : : : : : : : : : : : : : : }}%%bhv&6&677777}}%%bhv&6&677777	
	#	# 2 2 0 01112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2sm   4AA!A>4B>>CC"AD55D9<D94FF F=AHHH4KK#&K#c                     t                      } t          j        ddg          t          j        ddg          f| _        t          j        dd          }|                     |          }t          ||                     |                     d S )Nr   g?g?r   r   )r
   r   arrayr   r   r   r   r   r   s      r   test_line_model_nd_predictr-   *   sw    MMEHaV$$bhSz&:&:;EL
	#rAA5??1--.....r   c            	         t                      } t          j        g dd          t          j        g dd          t          j        d          z  f| _        | j        d         dt          j        dd	          d
t          j        f         z  | j        d         z  z   }t          j                            d          }||	                    |j
                  z   }t                      }|                    |           t          t          j                            t          j        | j        d         |j        d                             dd           |j        d         | j        d         z
  }t          j                            |          dk    r"|t          j                            |          z  }t          t          j                            t          j        | j        d         |                    dd           d S )Nr   r   r   floatdtype)r   r   r   r!   r   r   d   .r     size)r
   r   r,   sqrtr   r   newaxisrandomdefault_rngnormalshaper&   r   linalgnormcross)model0data0random_statedata	model_estas         r   test_line_model_nd_estimaterG   2   s   ]]FXiiiw777Xiiiw777

BDFM ]1")D#&&sBJ77&-:JJKE 9((..L<&&EK&888D It 	rxa0@090@0C(E (E F FGH!M M M 	fmA..A	y~~a1	RY^^A	rxa0@!'D'DEEq!LLLLLr   c            
         t                      } t          j        g d          t          j        g d          f| _        t	          t          |                     t          j        g dg                              d           t	          t          |                     t          j        g dg                              d           t	          t          |                     t          j        g dg                              d           t          j        g dg          }t          j        g d          t          j        g d          f}t	          t          |                     ||                    d           d S )	Nr/   r   r   r   r   )r   r   r   r   )r"   r   r   )r      )r
   r   r,   r   r   absr(   )r   rD   r   s      r   test_line_model_nd_residualsrL   R   s8   MMEHYYY''))))<)<=ELU__RXyyyk%:%:;;<<a@@@U__RXyyyk%:%:;;<<a@@@U__RXzzzl%;%;<<==rBBB8ZZZL!!Dhyyy!!28III#6#67FU__T&_99::B?????r   c                      t          j        t                    5  t                                          t          j        d                     d d d            d S # 1 swxY w Y   d S N)   r!   )r   r#   r$   r   r&   r   r'   r)   r   r   test_circle_model_invalid_inputrP   `   s    	
	#	# 1 1rx//0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1   4AA"Ac                     t                      } d}dd|f| _        t          j        ddt          j        z  t          j        dz            }t          j        d          }t          ||                     |                     d S )NrO   r   r"   )rO   r   )r   rO   r   )r   rU   )r   r   r   r   pir,   r   
predict_xy)r   rtxys       r   test_circle_model_predictr[   e   sp    MME	Aq!9EL
	!QY	**A	4	5	5BE,,Q//00000r   c                     t                      } d| _        t          j        ddt          j        z  d          }|                     |          }t          j                            d          }||                    |j	                  z   }t                      }|
                    |           t          | j        |j        d           d S )Nr      r!   r   r"     r5   r6   )r   r   r   linspacerV   rW   r:   r;   r<   r=   r&   r   )rA   rY   rB   rC   rD   rE   s         r   test_circle_model_estimatera   o   s    ]]FFM
Aq25y$''Aa  E 9((..L<&&EK&888D It y'7;;;;;r   c                      t          j        ddgddgddgddggt           j                  } | dz  } t                      }|                    |            t          |j        g d           d S )Nr   r   r1     )rd   rd   r   )r   r,   int32r   r&   r   r   )rZ   r   s     r   test_circle_model_int_overflowrf      sq    	Aq6Aq6B7QG4BH	E	E	EB#IBMME	NN2mmm44444r   c            
         t                      } d| _        t          t          |                     t          j        ddgg                              d           t          t          |                     t          j        ddgg                              t          j        d          dz
             t          t          |                     t          j        ddgg                              d           d S )N)r   r   rO   rO   r      H   r   )r   r   r   rK   r(   r   r,   r8   r   s    r   test_circle_model_residualsrk      s    MMEELEOOBHq!fX,>,>??@@!DDDEOOBHq!fX,>,>??@@))A-/ / /EOOBHr1gY,?,?@@AA1EEEEEr   c            	         t                      } dg}t          |          5  |                     t          j        ddgddgg                     d d d            n# 1 swxY w Y   t          |          5  |                     t          j        d                     d d d            n# 1 swxY w Y   t          |          5  |                     t          j        ddgddgddgg                     d d d            d S # 1 swxY w Y   d S )Nz6Input does not contain enough significant data points.r   r"   r!      )rh   r"   r   )r   r   r&   r   r,   ones)r   warning_messages     r   #test_circle_model_insufficient_datarp      s   MMEOPO	?	+	+ 3 3rx!Q!Q 0112223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 
?	+	+ ( (rwv'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 
?	+	+ ; ;rx!Q!Q!Q 899:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s5   .AA"A5(B))B-0B-1DDDc                      t          j        t                    5  t                                          t          j        d                     d d d            d S # 1 swxY w Y   d S rN   )r   r#   r$   r   r&   r   r'   r)   r   r    test_ellipse_model_invalid_inputrr      s    	
	#	# 2 2 0 01112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2rQ   c                      t                      } d| _        t          j        ddt          j        z  t          j        dz            }t          j        d          }t          ||                     |                     d S )N)r   r   rO   r   r   r   r"   )rS   )r   r   rT   )r   r   )r   r   r   r   rV   r,   r   rW   )r   rY   rZ   s      r   test_ellipse_model_predictrt      se    NNE#EL
	!QY	**A	6	7	7BE,,Q//00000r   c                     t          ddd          D ]0} t          j        |           }t                      }dddd|f|_        t          j        ddt          j        z  d          }|                    |          }t          j        	                    d	          }||
                    |j        
          z   }t                      }|                    |           t          |j        d d         |j        d d         d           |                    |          }t          |t          j        |j                             2d S )Nr         r         r"   r4   r5   r6   )ranger   deg2radr   r   r`   rV   rW   r:   r;   r<   r=   r&   r   r(   r   rn   )	angleradrA   rY   rB   rC   rD   rE   ress	            r   test_ellipse_model_estimater      s-   q#r"" 3 3jRR-K1ru9c**!!!$$ y,,T22|***<<< !NN	4    	FM"1"-y/?/CQGGG!!%((#rwsy112222'3 3r   c                     t          j        g ddgddgddgddgd	d
gddgddgddgddgddgddgddgddgddgddgddgddgddgd d!gd"dgd#d$gd%d&gd'd!gd'd&gd(d&gd)d*gd+dgd,dgd-dgd.d/gd0dgd0dgd1d2gd1d3gd4d5gd4d6gd7d8gd9dgd:d;gd<d=gd>d?gd@d
gdAdBgdCdDgdEdFgdGdHgdIdJgdIdKgdLdMgdLdNgdOdPgdQdRgdSdTgdUdVgdUdMgdWdXgdWdYgdZdMgd[d\gdZdHgdZd]gd[dgd^d_gd`dagdbdcgdddegdddfgdbdggdbdgdddgd`dhgdid]gdjdkgdldmgdldgdndogdpdqgdrdsgdtdugdndJgdrdgdvd
gdwdqgdxdHgdydzgdwd{gd|d}gdxd~gddgddgddKgdd5gddsgdd$gddgddgddgddgddgddegddgddgddgddgddgddgddgddgddgddgddcgddgddgddgddgddgddsgddggddgddgddegddgddgddgddgddXgddNgddgddgddgddgddgddgddgddgddgt           j                  } t                      }|                    |            t          |j        d d         t          j        dd                     t          t          j        d          t          j	        |j        d d                              d S )Ni  iV  i	  ik  i  i_  i  iY  i  i  i  i  i1  i  iD  i  iO  i  iP  iY  i  ib  i  ic  i  il  i  im  i  iw  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  iW  i  iL  iu  i  iM  ii  i  is  i!  ij  i  i`  i)  ia  i*  i9  iC  i3  i5  i:  i  i=  i
  i<  i/  i>  i$  i?  i  i  i  i  iF  iC  i  iG  i%  iJ  i  iH  i8  iI  i  iE  i  iK  iR  iQ  iN  i{  i  iT  i  i  i[  i  i\  i  i]  i^  i  ie  i"  i  ig  i  ii  io  i  ip  i  iq  i  iy  i  i  i  i  iz  i  i{  i  i  i}  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i)  i  i  i  i  i  i  i+  i  i  i  i  i  io  r1   rm   r_   )
r   r,   re   r   r&   r   r   fullr%   rK   )rD   r   s     r   %test_ellipse_model_estimate_from_datar      s$   8 8	c
8#J8!$c
8-0#J89<c
8EH#J8	c
8#J8!$c
8-0#J89<c
8EH#J8 
c
8 #J8 "%c
8 .1#J8 :=c
8 FI#J8 
c
	8 #J	8 "%c
	8 .1#J	8 :=c
	8 FI#J	8
 
c
8
 #J8
 "%c
8
 .1#J8
 :=c
8
 FI#J8 
c
8 #J8 "%c
8 .1#J8 :=c
8 FI#J8 
c
8 #J8 "%c
8 .1#J8 :=c
8 FI#J8 
c
8 #J8 "%c
8 .1#J8 :=c
8 FI#J8 
c
8 #J8 "%c
8 .1#J8 :=c
8 FI#J8 
c
8 #J8 "%c
8 .1#J8 :=c
8 FI#J8 
c
8 #J8 "%c
8 .1#J8 :=c
8 FI#J8 
c
8 #J8 "%c
8 .1#J8 :=c
8 FI#J8 
c
8 #J8 "%c
8 .1#J8 :=c
8 FI#J8 
c
8 #J8 "%c
8 .1#J8 :=c
8 FI#J8 
c
8 #J8 "%c
8 .1#J8 :=c
8 FI#J8  
c
!8  #J!8  "%c
!8  .1#J!8  :=c
!8  FI#J!8" 
c
#8" #J#8" "%c
#8" .1#J#8" :=c
#8" FI#J#8$ 
c
%8$ #J%8$ "%c
%8$ .1#J%8$ :=c
%8$ FI#J%8& 
d'8& 3Z'8& #&s'8& /23Z'8& ;>s'8& GJ3Z'8( 
c
)8( #J)8( "%c
)8( .1#J)8( :=c
)8( FI#J)8* 
c
+8* #J+8* "%c
+8* .1#J+8* :=c
+8* FI#J+8, 
c
-8, #J-8, "%c
-8, .1#J-8, :=c
-8, FI#J-8. 
c
/8. #J/8. "%c
/8. .1#J/8. @Bx/I I ID4 NNE	NN4 el2A2&4(8(8999 bhqkk26%,rr*:#;#;<<<<<r   zKnown test failure on 32-bit platforms. See links for details: https://github.com/scikit-image/scikit-image/issues/3091 https://github.com/scikit-image/scikit-image/issues/2670)	conditionreasonc                      t                      } |                     t          j        d                    rJ |                     t          j        ddgddgddgg                    rJ d S )N)rO   r"   2   P   3   Q   4   )r   r&   r   rn   r,   rj   s    r   #test_ellipse_model_estimate_failersr      sh     NNE~~bgfoo.....~~bhR2r(RH'EFFGGGGGGGr   c            
         t                      } d| _        t          t          |                     t          j        ddgg                              d           t          t          |                     t          j        ddgg                              d           t          t          |                     t          j        ddgg                              d           d S )N)r   r   r   rO   r   r   r   rO   )r   r   r   rK   r(   r   r,   rj   s    r   test_ellipse_model_residualsr      s    NNE#ELEOOBHr1gY,?,?@@AA1EEEEOOBHq!fX,>,>??@@!DDDEOOBHq"gY,?,?@@AA1EEEEEr   c                     t                      } d| _        t          j        ddt          j        z  d          }|                     |          }d}d||d         d d f<   d||d         d d f<   d	||d         d d f<   t          |t           d
dd          \  }}t          | j        |j                   |D ]}||vsJ 	d S )Nr]   r   r"   r_   )r   rJ      )r_   r_   )ir   r   )r3   r   r!   rO   rC   )r   r   r   r`   rV   rW   r   r   )rA   rY   rB   outliersrE   inliersoutliers          r   test_ransac_shaper     s    ]]FFM
Aq25y$''Aa  E H(E(1+qqq.%E(1+qqq.'E(1+qqq.  {AqqIIIIw y'7888 & &g%%%%%& &r   c                     t           j                            d          } d|                     d          z  }t          ddd          } ||          }d}d	||d
         <   d||d         <   d||d         <   t	          ||ft          dd|           \  }}t          |j        |j                   t          j        t          j        |dk              d
         |k              sJ d S )Ni̼ r4   )r   r"   )      ?333333?r   )r   rx   )scalerotationtranslation)r   rO   rx   )'  r   r   )r3   r4   )r   r   r"   rx   r   F)	r   r:   r;   r   r   r   r   allnonzero)rC   srcrA   dstr   rE   r   s          r   test_ransac_geometricr     s    9((22L ##G,,
,C:)13 3 3F
&++C H%C"CC  c
OQ-9; ; ;Iw y'78886"*W-..q1X=>>>>>>>r   c            	         d } t          dg          5  t          t          j        d          t          dt          j        | d          \  }}d d d            n# 1 swxY w Y   t          |d            t          |d            d S )Nc                 $    | j         d         dk    S )Nr   r"   )r=   )rD   s    r   is_data_validz0test_ransac_is_data_valid.<locals>.is_data_valid1  s    z!}q  r   No inliers foundr   r"   r"   r   )r   rC   r   r   r   r'   r
   infr   )r   r   r   s      r   test_ransac_is_data_validr   0  s    ! ! !	./	0	0 M M 1 1;26.;!M M MwM M M M M M M M M M M M M M M $   :AA!Ac            	         d } t          dg          5  t          t          j        d          t          dt          j        | d          \  }}d d d            n# 1 swxY w Y   t          |d            t          |d            d S )Nc                     dS )NFr)   )r   rD   s     r   is_model_validz2test_ransac_is_model_valid.<locals>.is_model_valid;  s    ur   r   r   r"   r   )r   rC   r   )r   r   r   s      r   test_ransac_is_model_validr   :  s      	./	0	0 O O 1 1;26/=AO O OwO O O O O O O O O O O O O O O $r   c                     t          t          dddd          d           t          t          dddd          d           t          t          dddd          d           t          t          dddd          d           t          t          dddd          d           t          t          dddd          d	           t          t          d
ddd          d           t          t          d
ddd          d           t          t          dddd          d           t          t          dddd          d           t          t          dddd          d           t          t          dddd          d           t          t          dddd          d           t          t          dddd          d           t          t          d
ddd          d           t          t          d
ddd          d           t          t          dddd          d           t          t          dddd          d           t          t          dddd          d           t          t          dddd          d           d S )Nr4   r"   gGz?r   _      Z   r!      F      6   r      ~      rO   "   	   A   N   i`  i  i#  r   l   aWO)r   r   r)   r   r   test_ransac_dynamic_max_trialsr   D  s|    $S#q$77;;;$S#q!44a888 $Ra66:::$Ra33R888$Ra66:::$Ra33R888$Ra66:::$Ra33R888$Ra66;;;$Ra33S999 $Ra66:::$Ra33R888$Ra66:::$Ra33R888$Ra66;;;$Ra33S999$Ra66===$Ra33T::: $QQ22A666$QQ22LAAAAAr   c                     t          j        t                    5  t          t	          j        d          d 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 d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d          d d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 d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d          d 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 d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d          d dd           d d d            d S # 1 swxY w Y   d S )Nr   r"   g      )min_samplesresidual_thresholdr   rc   r   r   
max_trials)r   r   stop_probabilityg)\(?r   )r   r#   r$   r   r   r%   r)   r   r   test_ransac_invalid_inputr   m  s   	
	#	# ( (rx  $A"&	( 	( 	( 	(( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 

	#	# 4 4rx  $A"#	4 	4 	4 	44 4 4 4 4 4 4 4 4 4 4 4 4 4 4 

	#	# : :rx  $A"#b	: 	: 	: 	:: : : : : : : : : : : : : : : 

	#	# < <rx  $A"#d	< 	< 	< 	<< < < < < < < < < < < < < < < 

	#	# % %rx  $A"#	% 	% 	% 	%% % % % % % % % % % % % % % % 

	#	# % %rx  $B"#	% 	% 	% 	%% % % % % % % % % % % % % % % 

	#	# % %rx  $B"#	% 	% 	% 	%% % % % % % % % % % % % % % % % % %s}   &AAA0'B##B'*B''C::C>C>'EEE5&F''F+.F+&G==HH!&IIIc                       G d d          } t          j        d          }t          dg          5  t          || ddd           d d d            d S # 1 swxY w Y   d S )	Nc                       e Zd ZdZd Zd ZdS )1test_ransac_sample_duplicates.<locals>.DummyModelz$Dummy model to check for duplicates.c                 ^    t          t          j        |          j        |j                   dS )NT)r   r   uniquer7   selfrD   s     r   r&   z:test_ransac_sample_duplicates.<locals>.DummyModel.estimate  s$    4-ty9994r   c                 \    t          j        t          |          t           j                  S )Nr1   )r   rn   lenfloat64r   s     r   r(   z;test_ransac_sample_duplicates.<locals>.DummyModel.residuals  s    73t99BJ7777r   N)__name__
__module____qualname____doc__r&   r(   r)   r   r   
DummyModelr     s8        22	 	 	
	8 	8 	8 	8 	8r   r   rm   r   r!   g        r   r   )r   r   r   r   )r   rD   s     r   test_ransac_sample_duplicatesr     s    
8 
8 
8 
8 
8 
8 
8 
8 9Q<<D	./	0	0  tZQ3	 	 	 	                 s   AAAc                      t           j                            dd          } t          dg          5  t	          | t
          ddd          \  }}d d d            n# 1 swxY w Y   |J |J d S )NrO   r"   z"No inliers found. Model not fittedr!   r   i> )model_classr   r   rC   )r   r:   randr   r   r
   )rD   r   r   s      r   !test_ransac_with_no_final_inliersr     s    9>>!QD	@A	B	B L L+1347L L LwL L L L L L L L L L L L L L L ???=====s   AA!Ac            
      J   dt           fd} t          j                            d          }t          j        g dg dd          |                    dd          z   dz
  }t          d	g          5  t          |t          d
ddd|            ddd           dS # 1 swxY w Y   dS )zExample from GH issue #5572returnc           	          t          t          j        t          j        | j        d         g d                              }|dt          j        z  k    S )zIAllow models with a maximum of 10 degree tilt from the vertical

        r   rI   gqq?)rK   r   arccosdotr   rV   )r   random_datatilts      r   r   z8test_ransac_non_valid_best_model.<locals>.is_model_valid  sC     29RVELOYYY??@@AA25())r   r   r/   )r   r   r   r_   r!   r   zEstimated model is not validr"   r   r   r   )r   r   r   rC   r   N)	boolr   r:   RandomStater`   r   r   r   r
   )r   rndrD   s      r    test_ransac_non_valid_best_modelr     s   *t * * * * )


"
"C;yyy+++t44sxxa7H7HH3ND	:;	<	< . .t[a"%"1,	. 	. 	. 	.. . . . . . . . . . . . . . . . . .s   /BBB)/numpyr   skimage._sharedr   skimage._shared._warningsr   skimage._shared.testingr   r   r   r   r	   skimage.measurer
   r   r   r   skimage.measure.fitr   skimage.transformr   r   r*   r-   rG   rL   rP   r[   ra   rf   rk   rp   rr   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r)   r   r   <module>r      s       # # # # # # 7 7 7 7 7 7M M M M M M M M M M M M M M J J J J J J J J J J J J 3 3 3 3 3 3 - - - - - -/ / /2 2 2./ / /M M M@	@ 	@ 	@1 1 1
1 1 1< < <&5 5 5F F F
; 
; 
;2 2 2
1 1 13 3 3.#= #= #=L JL L L
H HL L
HF F F& & &,? ? ?0          &B &B &BR% % %>  *  . . . . .r   