
    _nd?F              	          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	 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 d dlmZ  ej        dd          Zdez  dz   Z ej        eeg          Zej                            d          Z ej        e                      e!e          d                    Z"ee"ddfxx         de#                     e!e"          d          dz  z   z  cc<   eddd f         ddej$        f         Zedddf         Zd Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d  Z/d! Z0d" Z1d# Z2d$ Z3d% Z4d& Z5d' Z6d( Z7d) Z8d* Z9d+ Z:d, Z;d- Z<d. Z=dS )/    N)sparse)assert_array_almost_equal)assert_array_equal)check_random_state)assert_allclose)make_regression)LinearRegressionRANSACRegressorRidge)OrthogonalMatchingPursuit)_dynamic_max_trials)ConvergenceWarningi8   皙?     size2      
      c                  2   t                      } t          | ddd          }|                    t          t                     t          j        |j                                      t
          j	                  }d|t          <   t          |j        |           d S Nr      r   min_samplesresidual_thresholdrandom_stateFr	   r
   fitXynp	ones_likeinlier_mask_astypebool_outliersr   	estimatorransac_estimatorref_inlier_masks      Flib/python3.11/site-packages/sklearn/linear_model/tests/test_ransac.pytest_ransac_inliers_outliersr/      s     ""I&qQQ  
 A l#3#@AAHHRRO %OH'4oFFFFF    c                  v   d } t           j                            d          }|                    dd          }|                    dd          }t	                      }t          |dd| d          }t          j        t                    5  |	                    ||           d d d            d S # 1 swxY w Y   d S )Nc                 R    | j         d         dk    sJ |j         d         dk    sJ dS Nr   r   Fshaper"   r#   s     r.   is_data_validz0test_ransac_is_data_valid.<locals>.is_data_valid1   -    wqzQwqzQur0   r   r   r   r   r   )r   r   r7   r   )
r$   randomRandomStaterandr	   r
   pytestraises
ValueErrorr!   )r7   rngr"   r#   r+   r,   s         r.   test_ransac_is_data_validr@   0   s     
 )


"
"CQAQA ""I&#   
z	"	" # #Q"""# # # # # # # # # # # # # # # # # #s   
B..B25B2c                      d } t                      }t          |dd| d          }t          j        t                    5  |                    t          t                     d d d            d S # 1 swxY w Y   d S )Nc                 R    |j         d         dk    sJ |j         d         dk    sJ dS r3   r4   r+   r"   r#   s      r.   is_model_validz2test_ransac_is_model_valid.<locals>.is_model_validG   r8   r0   r   r   r   )r   r   rD   r   )r	   r
   r<   r=   r>   r!   r"   r#   )rD   r+   r,   s      r.   test_ransac_is_model_validrE   F   s      
 !""I&%   
z	"	" # #Q"""# # # # # # # # # # # # # # # # # #s   !A--A14A1c                  R   t                      } t          | dddd          }t          j        t                    5  |                    t          t                     d d d            n# 1 swxY w Y   t          t          t                    t          t                    z
  t          j        d         dd          }t          | d          }t          d          D ]I}|                    d|           |                    t          t                     |j        |d	z   k     sJ Jd S )
Nr   r   r   )r   r   
max_trialsr   gv?r   r   r   r   r   )r	   r
   r<   r=   r>   r!   r"   r#   r   lenr)   r5   range
set_params	n_trials_)r+   r,   rG   is       r.   test_ransac_max_trialsrO   X   sV    ""I&   
z	"	" # #Q"""# # # # # # # # # # # # # # # %SVVc(mm%;QWQZHUUJ&ya@@@2YY ; ;###BBBQ""")JN:::::; ;s   !A))A-0A-c                      t                      } t          | dddd          }|                    t          t                     |j        dk    sJ d S )Nr   r   r   )r   r   stop_n_inliersr   r   r	   r
   r!   r"   r#   rM   r+   r,   s     r.   test_ransac_stop_n_inliersrT   p   sc     ""I&   A%******r0   c                      t                      } t          | dddd          }|                    t          t                     |j        dk    sJ d S )Nr   r   r   )r   r   
stop_scorer   r   rR   rS   s     r.   test_ransac_stop_scorerW   ~   sc     ""I&   A%******r0   c                     t          j        d          d d d f         } t          j        d          }d|d<   d|d<   t                      }t	          |ddd          }|                    | |           |                    | dd          |dd                    dk    sJ |                    | d d         |d d                   dk     sJ d S Nd   rZ   r   r   r   g      ?r   )r$   arangezerosr	   r
   r!   scorer"   r#   r+   r,   s       r.   test_ransac_scorer`      s    
	#qqq$wA
AAaDAaD ""I&qSq   A!!!ABB%122//14444!!!BQB%2A2//!333333r0   c                  V   t          j        d          d d d f         } t          j        d          }d|d<   d|d<   t                      }t	          |ddd          }|                    | |           t          |                    |           t          j        d                     d S rY   )r$   r\   r]   r	   r
   r!   r   predictr_   s       r.   test_ransac_predictrc      s    
	#qqq$wA
AAaDAaD ""I&qSq   A'//22BHSMMBBBBBr0   c                  D   d } t                      }t          || d          }d}t          j        t          |          5  |                    t          t                     d d d            n# 1 swxY w Y   |j        dk    sJ |j	        dk    sJ |j
        dk    sJ d S )Nc                     dS NF r6   s     r.   r7   z0test_ransac_no_valid_data.<locals>.is_data_valid       ur0   r   )r7   rG   +RANSAC could not find a valid consensus setmatchr   r	   r
   r<   r=   r>   r!   r"   r#   n_skips_no_inliers_n_skips_invalid_data_n_skips_invalid_model_r7   r+   r,   msgs       r.   test_ransac_no_valid_datarr      s      !""I&1   8C	z	-	-	- # #Q"""# # # # # # # # # # # # # # #/144441Q66662a777777   !A..A25A2c                  D   d } t                      }t          || d          }d}t          j        t          |          5  |                    t          t                     d d d            n# 1 swxY w Y   |j        dk    sJ |j	        dk    sJ |j
        dk    sJ d S )Nc                     dS rf   rg   rC   s      r.   rD   z2test_ransac_no_valid_model.<locals>.is_model_valid   rh   r0   r   )rD   rG   ri   rj   r   rl   )rD   r+   r,   rq   s       r.   test_ransac_no_valid_modelrv      s      !""I&.Q   8C	z	-	-	- # #Q"""# # # # # # # # # # # # # # #/144441Q66662a777777rs   c                  F   d } t                      }t          || dd          }d}t          j        t          |          5  |                    t          t                     d d d            n# 1 swxY w Y   |j        dk    sJ |j	        dk    sJ |j
        dk    sJ d S )	Nc                     dS rf   rg   r6   s     r.   r7   z3test_ransac_exceed_max_skips.<locals>.is_data_valid   rh   r0   r      )r7   rG   	max_skipsz/RANSAC skipped more iterations than `max_skips`rj   r      rl   rp   s       r.   test_ransac_exceed_max_skipsr|      s      !""I&1   <C	z	-	-	- # #Q"""# # # # # # # # # # # # # # #/144441Q66662a777777s   !A//A36A3c                  J   da d } t                      }t          || dd          }d}t          j        t
          |          5  |                    t          t                     d d d            n# 1 swxY w Y   |j	        dk    sJ |j
        d	k    sJ |j        dk    sJ d S )
NFc                     t           sda dS dS )NTF)
cause_skipr6   s     r.   r7   z8test_ransac_warn_exceed_max_skips.<locals>.is_data_valid   s     	J45r0   ry   r   )r7   rz   rG   zRANSAC found a valid consensus set but exited early due to skipping more iterations than `max_skips`. See estimator attributes for diagnostics.rj   r   r{   )r   r	   r
   r<   warnsr   r!   r"   r#   rm   rn   ro   )r7   r+   r,   warning_messages       r.   !test_ransac_warn_exceed_max_skipsr      s   J   !""I&!  	  
(	@	@	@ # #Q"""# # # # # # # # # # # # # # #/144441Q66662a777777s   !A11A58A5c                  Z   t          j        t                    } t                      }t	          |ddd          }|                    | t                     t          j        |j	                  
                    t          j                  }d|t          <   t          |j	        |           d S r   )r   
coo_matrixr"   r	   r
   r!   r#   r$   r%   r&   r'   r(   r)   r   X_sparser+   r,   r-   s       r.   test_ransac_sparse_coor           ##H ""I&qQQ   1%%%l#3#@AAHHRRO %OH'4oFFFFFr0   c                  Z   t          j        t                    } t                      }t	          |ddd          }|                    | t                     t          j        |j	                  
                    t          j                  }d|t          <   t          |j	        |           d S r   )r   
csr_matrixr"   r	   r
   r!   r#   r$   r%   r&   r'   r(   r)   r   r   s       r.   test_ransac_sparse_csrr   
  r   r0   c                  Z   t          j        t                    } t                      }t	          |ddd          }|                    | t                     t          j        |j	                  
                    t          j                  }d|t          <   t          |j	        |           d S r   )r   
csc_matrixr"   r	   r
   r!   r#   r$   r%   r&   r'   r(   r)   r   r   s       r.   test_ransac_sparse_cscr     r   r0   c                  n   t                      } t          | ddd          }t          d ddd          }|                    t          t                     |                    t          t                     t          |                    t                    |                    t                               d S )Nr   r   r   r   )r	   r
   r!   r"   r#   r   rb   )r+   r,   ransac_none_estimators      r.   test_ransac_none_estimatorr   (  s     ""I&qQQ   ,!   Aa###  ##%:%B%B1%E%E    r0   c                  6   t                      } t          | ddd          }t          | dt          j        d         z  dd          }t          | ddd          }t          | dd          }t          | t          j        d         dz   dd          }t          t	                      d dd          }|                    t          t                     |                    t          t                     |                    t          t                     |                    t          t                     t          |                    t                    |                    t                               t          |                    t                    |                    t                               t          |                    t                    |                    t                               t          j
        t                    5  |                    t          t                     d d d            n# 1 swxY w Y   d}t          j
        t          |	          5  |                    t          t                     d d d            d S # 1 swxY w Y   d S )
Nr   r   r   r   g       @)r   r   r   z(`min_samples` needs to be explicitly setrj   )r	   r
   r"   r5   r   r!   r#   r   rb   r<   r=   r>   )r+   ransac_estimator1ransac_estimator2ransac_estimator5ransac_estimator6ransac_estimator7ransac_estimator8err_msgs           r.   test_ransac_min_n_samplesr   ;  s    ""I'qQQ   (!'!*$	   (qQQ   (	aVWXXX'qwqzA~!RS   (Taa   !Q!Q!Q!Q!!!$$&7&?&?&B&B   !!!$$&7&?&?&B&B   !!!$$&7&?&?&B&B   
z	"	" $ $a###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 9G	z	1	1	1 $ $a###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s$   !H88H<?H< !JJJc                  t   t                      } t          | ddd          }t          j        t          t          t          g          }|                    t          |           t          j        |j                  	                    t          j
                  }d|t          <   t          |j        |           d S r   )r	   r
   r$   column_stackr#   r!   r"   r%   r&   r'   r(   r)   r   )r+   r,   yyyr-   s       r.   %test_ransac_multi_dimensional_targetsr   i  s     ""I&qQQ  
 /1a)
$
$C C    l#3#@AAHHRRO %OH'4oFFFFFr0   c                     d } d }d }t          j        t          t          t          g          }t                      }t	          |ddd          }t	          |ddd|           }t	          |ddd|          }|                    t          |           |                    t          |           |                    t          |           t          |                    t                    |                    t                               t          |                    t                    |                    t                               |                    t          t                     ||_	        |                    t          t                     t          |                    t                    |                    t                               t	          |dddd	          }|                    t          t                     t          |                    t                    |                    t                               d S )
Nc                 X    t          j        t          j        | |z
            d          S )Nr   axis)r$   sumabsy_truey_preds     r.   loss_multi1z.test_ransac_residual_loss.<locals>.loss_multi1~  s%    vbfVf_--A6666r0   c                 :    t          j        | |z
  dz  d          S )Nr   r   r   )r$   r   r   s     r.   loss_multi2z.test_ransac_residual_loss.<locals>.loss_multi2  s     vv1,15555r0   c                 0    t          j        | |z
            S )N)r$   r   r   s     r.   	loss_monoz,test_ransac_residual_loss.<locals>.loss_mono  s    vfvo&&&r0   r   r   r   r   )r   r   r   losssquared_error)
r$   r   r#   r	   r
   r!   r"   r   rb   r   )	r   r   r   r   r+   ransac_estimator0r   r   ransac_estimator3s	            r.   test_ransac_residual_lossr   }  sP   7 7 76 6 6' ' ' /1a)
$
$C ""I'qQQ   (   (   !S!!!!S!!!!S!!!!!!$$&7&?&?&B&B   !!!$$&7&?&?&B&B  
 !Q&!Q!!!$$&7&?&?&B&B   (   !Q!!!$$&7&?&?&B&B    r0   c                  0   t                      } t          | dd          }|                    t          t                     t          j        |j                                      t
          j	                  }d|t          <   t          |j        |           d S )Nr   r   rI   Fr    r*   s      r.   &test_ransac_default_residual_thresholdr     s     ""I&yaaPPP A l#3#@AAHHRRO %OH'4oFFFFFr0   c                  0   t          dddd          dk    sJ t          dddd          dk    sJ t          dddd          dk    sJ t          dddd          d	k    sJ t          d
ddd          dk    sJ t          dddd          dk    sJ t          dddd          dk    sJ t          dddd          dk    sJ t          d
ddd          dk    sJ t          dddd          dk    sJ t          dddd          t          d          k    sJ d S )NrZ   r   gGz?r   _   Z   ry   F      r         r   	   N   i  r   r   inf)r   floatrg   r0   r.   test_ransac_dynamic_max_trialsr     sk    sCD11Q6666 r3400A5555r3400A5555r3400A5555r3400B6666 r3400A5555r3400A5555r3400B6666r3400D8888 q#r1--2222q#r1--u======r0   c            
      P   t          d          } t          j        d         }t          j        |          }|                     t          t          |           | j        j        d         |k    sJ t          j        | j                  	                    t          j
                  }d|t          <   t          | j        |           t          d          }|                    ddddg          }t          j                            d|z  dz             }|                    ddd          }|                    dd	ddg          }|                    ddd          }	|                    d
dd          }
t          j        t          j        ||d          t          j        ||	d          d          }t          j                            t          j        t          j        ||d          t          j        |
|	d          d                    }|                     ||           | j        j        }t          j        ||	          }t          j        ||d          }t          j        ||
          }|                     |||           t+          | j        j        |           t-                      }t          |d          } |j        j         d}t3          j        t6          |          5  |                     t          t          |           d d d            d S # 1 swxY w Y   d S )Nr   r   Fr   r   r   r   r   r   ir   rH   z  does not support sample_weight.rj   )r
   r#   r5   r$   onesr!   r"   r&   r%   r'   r(   r)   r   r   randintndarrayflattenappendrepeat
estimator_coef_r   r   	__class____name__r<   r=   r>   )r,   	n_samplesweightsr-   r   X_y_sample_weight	outlier_Xoutlier_weight	outlier_yX_flaty_flat	ref_coef_r+   r   s                   r.   test_ransac_fit_sample_weightr     s1   &A666
Igi  GAw'''(.q1Y>>>>l#3#@AAHHRRO %OH'4oFFF &a((L			ar1g	.	.B			C"HqL	)	)B ((B33M$$Qq!f55I!))!R33N$$UAq11IY
	"m!,,,
	)^!444  F
 Z
	Ib-a000Iia888	
 	
 	
 F ((( +1IIm^<<M	2yq	)	)	)B	2y	!	!BR///$/5yAAA *++I&ybAAA$-OOOG	z	1	1	1 , ,Q7+++, , , , , , , , , , , , , , , , , ,s   ,"LL"Lc                     t          dd          \  } }t          d          }|                    dd|j        d                   }||                                z  }t          t                      d	          }|                    | ||
           t                      }|j        }|                    | |         ||         ||         
           t          |j
        j        |j        d           d S )Nr   r   )r   r   *   r   r{   r   r   )r+   r   )r   g-q=)atol)r   r   r   r5   r   r
   r	   r!   r&   r   r   r   )r"   r#   r?   r   ransacfinal_modelmask_sampless          r.   )test_ransac_final_model_fit_sample_weightr      s    T;;;DAq
R
 
 CKK1171:K66M!M$5$5$7$77M'7'9'9JJJF
JJq!=J111"$$K&LOO	,<l8S     F%+[->UKKKKKKr0   c                  <   t          j        d          dddf         } t          j        d          }t                      }t	          |d          }|                    | |           t          |j        j        d           t          |j        j	        d           dS )zCheck that we can fit a line where all samples are inliers.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/19497
    rZ   Nr[   r   r   g        )
r$   r\   r]   r	   r
   r!   r   r   r   
intercept_r_   s       r.   test_perfect_horizontal_liner   1  s    
 		#qqq$wA
A ""I&yqAAAA$/5s;;;$/:C@@@@@r0   c                      t          t                      ddd          } d}t          j        t          |          5  |                     t          t                     d d d            d S # 1 swxY w Y   d S )Nr   r   r   )base_estimatorr   r   r   zV`base_estimator` was renamed to `estimator` in version 1.1 and will be removed in 1.3.rj   )r
   r	   r<   r   FutureWarningr!   r"   r#   )r,   r   s     r.   test_base_estimator_deprecatedr   A  s    &'))	  	"  
m7	3	3	3 # #Q"""# # # # # # # # # # # # # # # # # #s   !A++A/2A/)>numpyr$   r<   scipyr   numpy.testingr   r   sklearn.utilsr   sklearn.utils._testingr   sklearn.datasetsr   sklearn.linear_modelr	   r
   r   r   sklearn.linear_model._ransacr   sklearn.exceptionsr   r\   r"   r#   r   datar9   r:   r?   uniquer   rJ   r)   r;   newaxisr/   r@   rE   rO   rT   rW   r`   rc   rr   rv   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rg   r0   r.   <module>r      sf              3 3 3 3 3 3 , , , , , , , , , , , , 2 2 2 2 2 2 , , , , , , I I I I I I I I I I : : : : : : < < < < < < 1 1 1 1 1 1 BIdC!GbLr1v 	iD!!29S[[Qc[2233 Xqqq[   R#((33x==!44r99 9   AJqqq"*}AJG G G"# # #,# # #$; ; ;0+ + ++ + +4 4 4 C C C8 8 8"8 8 8"8 8 8"8 8 8:G G GG G GG G G  &+$ +$ +$\G G G(; ; ;|G G G> > >@4, 4, 4,nL L L"A A A # # # # #r0   