
    -iA              	          S SK rS SKrS SKJrJr  S SKJr  S SKJ	r	  S SK
JrJrJrJr  S SKJr  S SKJr  S SKJr  S S	KJrJrJr  \R2                  " S
S5      rS\-  S-   r\R8                  " \\/5      r\R<                  R?                  S5      r \RB                  " \ RE                  \#" \5      SS95      r$\\$SS24==   S\ RK                  \#" \$5      S5      S-  -   -  ss'   \SS2S 4   SS2\RL                  4   r\SS2S4   rS r'S r(S r)S r*S r+S r,S r-S r.S r/S r0S r1S r2\Rf                  Ri                  S \\-   \-   5      S! 5       r5S" r6S# r7S$ r8S% r9S& r:S' r;S( r<S) r=S* r>g)+    N)assert_array_almost_equalassert_array_equal)make_regression)ConvergenceWarning)LinearRegressionOrthogonalMatchingPursuitRANSACRegressorRidge)_dynamic_max_trials)check_random_state)assert_allclose)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSi8   皙?     size2      
      c                     [        5       n [        U SSSS9nUR                  [        [        5        [
        R                  " UR                  5      R                  [
        R                  5      nSU[        '   [        UR                  U5        g 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      Y/var/www/html/venv/lib/python3.13/site-packages/sklearn/linear_model/tests/test_ransac.pytest_ransac_inliers_outliersr1       sq     "I&qQQ
 A ll#3#@#@AHHRO %OH'44oF    c                  H   S n [         R                  R                  S5      nUR                  SS5      nUR                  SS5      n[	        5       n[        USSU SS9n[        R                  " [        5         UR                  X#5        S S S 5        g ! , (       d  f       g = f)Nc                 X    U R                   S   S:X  d   eUR                   S   S:X  d   egNr   r   Fshaper$   r%   s     r0   is_data_valid0test_ransac_is_data_valid.<locals>.is_data_valid1   -    wwqzQwwqzQr2   r   r   r   r   r   )r   r    r9   r!   )
r&   randomRandomStaterandr   r	   pytestraises
ValueErrorr#   )r9   rngr$   r%   r-   r.   s         r0   test_ransac_is_data_validrC   0   s    
 ))


"CQAQA "I&# 
z	"Q" 
#	"	"s   8B
B!c                      S n [        5       n[        USSU SS9n[        R                  " [        5         UR                  [        [        5        S S S 5        g ! , (       d  f       g = f)Nc                 X    UR                   S   S:X  d   eUR                   S   S:X  d   egr5   r6   r-   r$   r%   s      r0   is_model_valid2test_ransac_is_model_valid.<locals>.is_model_validG   r;   r2   r   r   r   )r   r    rG   r!   )r   r	   r?   r@   rA   r#   r$   r%   )rG   r-   r.   s      r0   test_ransac_is_model_validrI   F   sU    
 !"I&% 
z	"Q" 
#	"	"s   A
A'c                     [        5       n [        U SSSSS9n[        R                  " [        5         UR                  [        [        5        S S S 5        [        [        [        5      [        [        5      -
  [        R                  S   SS5      n[        U SS9n[        S5       HB  nUR                  SUS9  UR                  [        [        5        UR                  US	-   :  a  MB   e   g ! , (       d  f       N= f)
Nr   r   r   )r   r    
max_trialsr!   gv?r   r   r   r!   r   )r   r	   r?   r@   rA   r#   r$   r%   r   lenr+   r7   range
set_params	n_trials_)r-   r.   rK   is       r0   test_ransac_max_trialsrS   X   s     "I& 
z	"Q" 
# %SVc(m%;QWWQZHUJ&ya@2Y###BQ"))JN:::  
#	"s   C--
C;c                      [        5       n [        U SSSSS9nUR                  [        [        5        UR
                  S:X  d   eg )Nr   r   r   )r   r    stop_n_inliersr!   r   r   r	   r#   r$   r%   rQ   r-   r.   s     r0   test_ransac_stop_n_inliersrX   p   sJ     "I& A%%***r2   c                      [        5       n [        U SSSSS9nUR                  [        [        5        UR
                  S:X  d   eg )Nr   r   r   )r   r    
stop_scorer!   r   rV   rW   s     r0   test_ransac_stop_scorer[   ~   sJ     "I& A%%***r2   c                  D   [         R                  " S5      S S 2S 4   n [         R                  " S5      nSUS'   SUS'   [        5       n[	        USSSS9nUR                  X5        UR                  U SS  USS  5      S:X  d   eUR                  U S S US S 5      S:  d   eg Nd   r^   r   r   r   g      ?r   )r&   arangezerosr   r	   r#   scorer$   r%   r-   r.   s       r0   test_ransac_scorerd      s    
		#q$wA
AAaDAaD "I&qSq !!!AB%12/1444!!!BQ%2A/!333r2   c                  *   [         R                  " S5      S S 2S 4   n [         R                  " S5      nSUS'   SUS'   [        5       n[	        USSSS9nUR                  X5        [        UR                  U 5      [         R                  " S5      5        g r]   )r&   r`   ra   r   r	   r#   r   predictrc   s       r0   test_ransac_predictrg      s    
		#q$wA
AAaDAaD "I&qSq '//2BHHSMBr2   c                  <   S n [        5       n[        XSS9nSn[        R                  " [        US9   UR                  [        [        5        S S S 5        UR                  S:X  d   eUR                  S:X  d   eUR                  S:X  d   eg ! , (       d  f       NE= f)Nc                     gNF r8   s     r0   r9   0test_ransac_no_valid_data.<locals>.is_data_valid       r2   r   )r9   rK   +RANSAC could not find a valid consensus setmatchr   r   r	   r?   r@   rA   r#   r$   r%   n_skips_no_inliers_n_skips_invalid_data_n_skips_invalid_model_r9   r-   r.   msgs       r0   test_ransac_no_valid_datarw      s     !"I&1 8C	z	-Q" 
.//144411Q66622a777	 
.	-   B
Bc                  <   S n [        5       n[        XSS9nSn[        R                  " [        US9   UR                  [        [        5        S S S 5        UR                  S:X  d   eUR                  S:X  d   eUR                  S:X  d   eg ! , (       d  f       NE= f)Nc                     grj   rk   rF   s      r0   rG   2test_ransac_no_valid_model.<locals>.is_model_valid   rm   r2   r   )rG   rK   rn   ro   r   rq   )rG   r-   r.   rv   s       r0   test_ransac_no_valid_modelr|      s     !"I&Q 8C	z	-Q" 
.//144411Q66622a777	 
.	-rx   c                  >   S n [        5       n[        XSSS9nSn[        R                  " [        US9   UR                  [        [        5        S S S 5        UR                  S:X  d   eUR                  S:X  d   eUR                  S:X  d   eg ! , (       d  f       NE= f)	Nc                     grj   rk   r8   s     r0   r9   3test_ransac_exceed_max_skips.<locals>.is_data_valid   rm   r2   r      )r9   rK   	max_skipsz/RANSAC skipped more iterations than `max_skips`ro   r      rq   ru   s       r0   test_ransac_exceed_max_skipsr      s     !"I&1 <C	z	-Q" 
.//144411Q66622a777	 
.	-s   B
Bc                  B   Sq S n [        5       n[        XSSS9nSn[        R                  " [
        US9   UR                  [        [        5        S S S 5        UR                  S:X  d   eUR                  S	:X  d   eUR                  S:X  d   eg ! , (       d  f       NE= f)
NFc                      [         (       d  Sq gg)NTF)
cause_skipr8   s     r0   r9   8test_ransac_warn_exceed_max_skips.<locals>.is_data_valid   s    zJr2   r   r   )r9   r   rK   zRANSAC found a valid consensus set but exited early due to skipping more iterations than `max_skips`. See estimator attributes for diagnostics.ro   r   r   )r   r   r	   r?   warnsr   r#   r$   r%   rr   rs   rt   )r9   r-   r.   warning_messages       r0   !test_ransac_warn_exceed_max_skipsr      s    J !"I&!	  
(	@Q" 
A//144411Q66622a777	 
A	@s   B
Bsparse_containerc                 ,   U " [         5      n[        5       n[        USSSS9nUR                  U[        5        [
        R                  " UR                  5      R                  [
        R                  5      nSU[        '   [        UR                  U5        g r   )r$   r   r	   r#   r%   r&   r'   r(   r)   r*   r+   r   )r   X_sparser-   r.   r/   s        r0   test_ransac_sparser      s{      "H "I&qQQ 1%ll#3#@#@AHHRO %OH'44oFr2   c                     [        5       n [        U SSSS9n[        S SSSS9nUR                  [        [        5        UR                  [        [        5        [        UR                  [        5      UR                  [        5      5        g )Nr   r   r   r   )r   r	   r#   r$   r%   r   rf   )r-   r.   ransac_none_estimators      r0   test_ransac_none_estimatorr     sz     "I&qQQ ,! Aa#  #%:%B%B1%Er2   c                  <   [        5       n [        U SSSS9n[        U S[        R                  S   -  SSS9n[        U SSSS9n[        U SSS9n[        U [        R                  S   S-   SSS9n[        [	        5       S SSS9nUR                  [        [        5        UR                  [        [        5        UR                  [        [        5        UR                  [        [        5        [        UR                  [        5      UR                  [        5      5        [        UR                  [        5      UR                  [        5      5        [        UR                  [        5      UR                  [        5      5        [        R                  " [        5         UR                  [        [        5        S S S 5        Sn[        R                  " [        US	9   UR                  [        [        5        S S S 5        g ! , (       d  f       NM= f! , (       d  f       g = f)
Nr   r   r   r   g       @)r    r!   r   z(`min_samples` needs to be explicitly setro   )r   r	   r$   r7   r
   r#   r%   r   rf   r?   r@   rA   )r-   ransac_estimator1ransac_estimator2ransac_estimator5ransac_estimator6ransac_estimator7ransac_estimator8err_msgs           r0   test_ransac_min_n_samplesr     s    "I'qQQ (!''!*$	 (qQQ (	aVWX'qwwqzA~!RS (Taa !Q!Q!Q!Q!!!$&7&?&?&B !!!$&7&?&?&B !!!$&7&?&?&B 
z	"a# 
# 9G	z	1a# 
2	1	 
#	" 
2	1s   G<H<
H

Hc                  ^   [        5       n [        U SSSS9n[        R                  " [        [        [        /5      nUR                  [        U5        [        R                  " UR                  5      R                  [        R                  5      nSU[        '   [        UR                  U5        g r   )r   r	   r&   column_stackr%   r#   r$   r'   r(   r)   r*   r+   r   )r-   r.   yyyr/   s       r0   %test_ransac_multi_dimensional_targetsr   M  s     "I&qQQ
 //1a)
$C C  ll#3#@#@AHHRO %OH'44oFr2   c                     S n S nS n[         R                  " [        [        [        /5      n[        5       n[	        USSSS9n[	        USSSU S9n[	        USSSUS9nUR                  [        U5        UR                  [        U5        UR                  [        U5        [        UR                  [        5      UR                  [        5      5        [        UR                  [        5      UR                  [        5      5        UR                  [        [        5        X'l	        UR                  [        [        5        [        UR                  [        5      UR                  [        5      5        [	        USSSS	S9nUR                  [        [        5        [        UR                  [        5      UR                  [        5      5        g )
Nc                 X    [         R                  " [         R                  " X-
  5      SS9$ )Nr   axis)r&   sumabsy_truey_preds     r0   loss_multi1.test_ransac_residual_loss.<locals>.loss_multi1a  s    vvbffV_-A66r2   c                 6    [         R                  " X-
  S-  SS9$ )Nr   r   r   )r&   r   r   s     r0   loss_multi2.test_ransac_residual_loss.<locals>.loss_multi2d  s    vvv1,155r2   c                 2    [         R                  " X-
  5      $ )N)r&   r   r   s     r0   	loss_mono,test_ransac_residual_loss.<locals>.loss_monog  s    vvfo&&r2   r   r   r   r   )r   r    r!   losssquared_error)
r&   r   r%   r   r	   r#   r$   r   rf   r   )	r   r   r   r   r-   ransac_estimator0r   r   ransac_estimator3s	            r0   test_ransac_residual_lossr   `  s   76' //1a)
$C "I'qQQ ( ( !S!!S!!S!!!!$&7&?&?&B !!!$&7&?&?&B
 !Q&!Q!!!$&7&?&?&B ( !Q!!!$&7&?&?&Br2   c                     [        5       n [        U SSS9nUR                  [        [        5        [
        R                  " UR                  5      R                  [
        R                  5      nSU[        '   [        UR                  U5        g )Nr   r   rM   Fr"   r,   s      r0   &test_ransac_default_residual_thresholdr     sl     "I&yaaP A ll#3#@#@AHHRO %OH'44oFr2   c                     [        SSSS5      S:X  d   e[        SSSS5      S:X  d   e[        SSSS5      S:X  d   e[        SSSS5      S	:X  d   e[        S
SSS5      S:X  d   e[        SSSS5      S:X  d   e[        SSSS5      S:X  d   e[        SSSS5      S:X  d   e[        S
SSS5      S:X  d   e[        SSSS5      S:X  d   e[        SSSS5      [        S5      :X  d   eg )Nr^   r   gGz?r   _   Z   r   F      r         r   	   N   i  r   r   inf)r   floatrk   r2   r0   test_ransac_dynamic_max_trialsr     s!    sCD1Q666 r340A555r340A555r340A555r340B666 r340A555r340A555r340B666r340D888 q#r1-222q#r1-u===r2   c                     [        SS9n [        R                  S   n[        R                  " U5      nU R                  [        [        US9  U R                  R                  S   U:X  d   e[        R                  " U R                  5      R                  [        R                  5      nSU[        '   [        U R                  U5        [        S5      nUR                  SSSS/5      n[        R                  R!                  SU-  S	-   5      nUR                  SSS5      nUR                  SS
SS/5      nUR                  SSS5      n	UR                  SSS5      n
[        R"                  " [        R$                  " XWSS9[        R$                  " XSS9SS9n[        R                  R!                  [        R"                  " [        R$                  " XgSS9[        R$                  " XSS9SS95      nU R                  X5        U R&                  R(                  n[        R"                  " Xy5      n[        R"                  " XXSS9n[        R"                  " Xj5      nU R                  XVUS9  [+        U R&                  R(                  U5        [-        5       n[        USS9n UR.                  R0                   S3n[2        R4                  " [6        US9   U R                  [        [        US9  S S S 5        g ! , (       d  f       g = f)Nr   r!   sample_weightFr   r   r   r   r   r   ir   rL   z  does not support sample_weight.ro   )r	   r%   r7   r&   onesr#   r$   r(   r'   r)   r*   r+   r   r   randintndarrayflattenappendrepeat
estimator_coef_r   r   	__class____name__r?   r@   rA   )r.   	n_samplesweightsr/   r!   X_y_r   	outlier_Xoutlier_weight	outlier_yX_flaty_flat	ref_coef_r-   r   s                   r0   test_ransac_fit_sample_weightr     st   &A6
Iggi GAW5((..q1Y>>>ll#3#@#@AHHRO %OH'44oF &a(L			ar1g	.B			C"HqL	)B ((B3M$$Qq!f5I!))!R3N$$UAq1IYY
		"!,
		)!4F
 ZZ
		IIba0IIia8	
F ( ++11IIIm<M	2q	)B	2	!B}=$//55yA *+I&ybA$$--..NOG	z	1Q9 
2	1	1s   K00
K>c                  p   [        SSS9u  p[        S5      nUR                  SSUR                  S   S9nX3R	                  5       -  n[        SS	9nUR                  XUS
9  [        5       nUR                  nUR                  X   X   X6   S
9  [        UR                  R                  UR                  SS9  g )Nr   r   )r   r!   *   r   r   r   r   r   r   g-q=)atol)r   r   r   r7   r   r	   r#   r   r(   r   r   r   )r$   r%   rB   r   ransacfinal_modelmask_sampless          r0   )test_ransac_final_model_fit_sample_weightr     s    T;DA
R
 CKK11771:K6M!$5$5$77M!,F
JJq=J1"$K&&LOO	8S   F%%++[->->UKr2   c                  4   [         R                  " S5      SS2S4   n [         R                  " S5      n[        5       n[	        USS9nUR                  X5        [        UR                  R                  S5        [        UR                  R                  S5        g)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
r^   Nr_   r   r   g        )
r&   r`   ra   r   r	   r#   r   r   r   
intercept_rc   s       r0   test_perfect_horizontal_liner     sy    
 			#q$wA
A "I&yqA$//55s;$//::C@r2   )?numpyr&   r?   numpy.testingr   r   sklearn.datasetsr   sklearn.exceptionsr   sklearn.linear_modelr   r   r	   r
   sklearn.linear_model._ransacr   sklearn.utilsr   sklearn.utils._testingr   sklearn.utils.fixesr   r   r   r`   r$   r%   r   datar<   r=   rB   uniquer   rN   r+   r>   newaxisr1   rC   rI   rS   rX   r[   rd   rg   rw   r|   r   r   markparametrizer   r   r   r   r   r   r   r   r   r   rk   r2   r0   <module>r      s     G , 1  = , 2 N N IIdC!GbL	1v 	iiD!99S[[Qc[23 Xq[ R#((3x=!4r99 9 AJq"**}AJG #,#$;0++4 C8"8"8"8: 7.HGG$+$\G&;|G>@4:nL"Ar2   