
    {KgA              	          d dl Zd dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZmZ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  ej2                  d
d      Zdez  dz   Z ej8                  eeg      Zej<                  j?                  d      Z  ejB                  e jE                   e#e      d            Z$ee$ddfxx   de jK                   e#e$      d      dz  z   z  cc<   eddd f   ddejL                  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 Z0d Z1d Z2ejf                  ji                  d eez   ez         d!        Z5d" Z6d# Z7d$ Z8d% Z9d& Z:d' Z;d( Z<d) Z=d* Z>y)+    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                      t               } t        | ddd      }|j                  t        t               t        j                  |j                        j                  t
        j                        }d|t        <   t        |j                  |       y 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      j/home/alanp/www/video.onchill/myenv/lib/python3.12/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                  D   d } t         j                  j                  d      }|j                  dd      }|j                  dd      }t	               }t        |dd| d      }t        j                  t              5  |j                  ||       d d d        y # 1 sw Y   y xY w)Nc                 T    | j                   d   dk(  sJ |j                   d   dk(  sJ yNr   r   Fshaper$   r%   s     r0   is_data_validz0test_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_validrB   0   s    
 ))


"CQAQA "I&# 
z	"Q" 
#	"	"s   :BBc                      d } t               }t        |dd| d      }t        j                  t              5  |j                  t        t               d d d        y # 1 sw Y   y xY w)Nc                 T    |j                   d   dk(  sJ |j                   d   dk(  sJ yr5   r6   r-   r$   r%   s      r0   is_model_validz2test_ransac_is_model_valid.<locals>.is_model_validG   r:   r2   r   r   r   )r   r    rF   r!   )r   r	   r>   r?   r@   r#   r$   r%   )rF   r-   r.   s      r0   test_ransac_is_model_validrG   F   sU    
 !"I&% 
z	"Q" 
#	"	"s   AA$c                     t               } t        | dddd      }t        j                  t              5  |j                  t        t               d d d        t        t        t              t        t              z
  t        j                  d   dd      }t        | d      }t        d      D ]C  }|j                  d|       |j                  t        t               |j                  |d	z   k  rCJ  y # 1 sw Y   xY w)
Nr   r   r   )r   r    
max_trialsr!   gv?r   r   r   r!   r   )r   r	   r>   r?   r@   r#   r$   r%   r   lenr+   r7   range
set_params	n_trials_)r-   r.   rI   is       r0   test_ransac_max_trialsrQ   X   s     "I& 
z	"Q" 
# %SVc(m%;QWWQZHUJ&ya@2Y###BQ"))JN:::  
#	"s   C22C;c                      t               } t        | dddd      }|j                  t        t               |j
                  dk(  sJ y )Nr   r   r   )r   r    stop_n_inliersr!   r   r   r	   r#   r$   r%   rO   r-   r.   s     r0   test_ransac_stop_n_inliersrV   p   sJ     "I& A%%***r2   c                      t               } t        | dddd      }|j                  t        t               |j
                  dk(  sJ y )Nr   r   r   )r   r    
stop_scorer!   r   rT   rU   s     r0   test_ransac_stop_scorerY   ~   sJ     "I& A%%***r2   c                  D   t        j                  d      d d d f   } t        j                  d      }d|d<   d|d<   t               }t	        |ddd      }|j                  | |       |j                  | dd  |dd        dk(  sJ |j                  | d d |d d       dk  sJ y Nd   r\   r   r   r   g      ?r   )r&   arangezerosr   r	   r#   scorer$   r%   r-   r.   s       r0   test_ransac_scorerb      s    
		#q$wA
AAaDAaD "I&qSq A!!!AB%12/1444!!!BQ%2A/!333r2   c                  ,   t        j                  d      d d d f   } t        j                  d      }d|d<   d|d<   t               }t	        |ddd      }|j                  | |       t        |j                  |       t        j                  d             y r[   )r&   r^   r_   r   r	   r#   r   predictra   s       r0   test_ransac_predictre      s    
		#q$wA
AAaDAaD "I&qSq A'//2BHHSMBr2   c                  8   d } t               }t        || d      }d}t        j                  t        |      5  |j                  t        t               d d d        |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ y # 1 sw Y   =xY w)Nc                      yNF r8   s     r0   r9   z0test_ransac_no_valid_data.<locals>.is_data_valid       r2   r   )r9   rI   +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_r9   r-   r.   msgs       r0   test_ransac_no_valid_datart      s     !"I&1 8C	z	-Q" 
.//144411Q66622a777	 
.	-   BBc                  8   d } t               }t        || d      }d}t        j                  t        |      5  |j                  t        t               d d d        |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ y # 1 sw Y   =xY w)Nc                      yrh   ri   rE   s      r0   rF   z2test_ransac_no_valid_model.<locals>.is_model_valid   rj   r2   r   )rF   rI   rk   rl   r   rn   )rF   r-   r.   rs   s       r0   test_ransac_no_valid_modelrx      s     !"I&.Q 8C	z	-Q" 
.//144411Q66622a777	 
.	-ru   c                  :   d } t               }t        || dd      }d}t        j                  t        |      5  |j                  t        t               d d d        |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ y # 1 sw Y   =xY w)	Nc                      yrh   ri   r8   s     r0   r9   z3test_ransac_exceed_max_skips.<locals>.is_data_valid   rj   r2   r      )r9   rI   	max_skipsz/RANSAC skipped more iterations than `max_skips`rl   r      rn   rr   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                  >   da d } t               }t        || dd      }d}t        j                  t
        |      5  |j                  t        t               d d d        |j                  dk(  sJ |j                  d	k(  sJ |j                  dk(  sJ y # 1 sw Y   =xY w)
NFc                     t         sda yy)NTF)
cause_skipr8   s     r0   r9   z8test_ransac_warn_exceed_max_skips.<locals>.is_data_valid   s    Jr2   r{   r   )r9   r|   rI   zRANSAC found a valid consensus set but exited early due to skipping more iterations than `max_skips`. See estimator attributes for diagnostics.rl   r   r}   )r   r   r	   r>   warnsr   r#   r$   r%   ro   rp   rq   )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                 0    | t               }t               }t        |ddd      }|j                  |t               t        j                  |j                        j                  t
        j                        }d|t        <   t        |j                  |       y 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                      t               } t        | ddd      }t        d ddd      }|j                  t        t               |j                  t        t               t        |j                  t              |j                  t                     y )Nr   r   r   r   )r   r	   r#   r$   r%   r   rd   )r-   r.   ransac_none_estimators      r0   test_ransac_none_estimatorr     sz     "I&qQQ ,! Aa#  #%:%B%B1%Er2   c                  N   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      }|j                  t        t               |j                  t        t               |j                  t        t               |j                  t        t               t        |j                  t              |j                  t                     t        |j                  t              |j                  t                     t        |j                  t              |j                  t                     t        j                  t              5  |j                  t        t               d d d        d}t        j                  t        |	      5  |j                  t        t               d d d        y # 1 sw Y   JxY w# 1 sw Y   y xY w)
Nr   r   r   r   g       @)r    r!   r   z(`min_samples` needs to be explicitly setrl   )r   r	   r$   r7   r
   r#   r%   r   rd   r>   r?   r@   )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   +H+HHH$c                  `   t               } t        | ddd      }t        j                  t        t        t        g      }|j                  t        |       t        j                  |j                        j                  t        j                        }d|t        <   t        |j                  |       y 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                     d } d }d }t        j                  t        t        t        g      }t               }t	        |ddd      }t	        |ddd|       }t	        |ddd|      }|j                  t        |       |j                  t        |       |j                  t        |       t        |j                  t              |j                  t                     t        |j                  t              |j                  t                     |j                  t        t               ||_	        |j                  t        t               t        |j                  t              |j                  t                     t	        |dddd	      }|j                  t        t               t        |j                  t              |j                  t                     y )
Nc                 \    t        j                  t        j                  | |z
        d      S )Nr   axis)r&   sumabsy_truey_preds     r0   loss_multi1z.test_ransac_residual_loss.<locals>.loss_multi1a  s     vvbffVf_-A66r2   c                 <    t        j                  | |z
  dz  d      S )Nr   r   r   )r&   r   r   s     r0   loss_multi2z.test_ransac_residual_loss.<locals>.loss_multi2d  s    vvv1,155r2   c                 2    t        j                  | |z
        S )N)r&   r   r   s     r0   	loss_monoz,test_ransac_residual_loss.<locals>.loss_monog  s    vvfvo&&r2   r   r   r   r   )r   r    r!   losssquared_error)
r&   r   r%   r   r	   r#   r$   r   rd   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                     t               } t        | dd      }|j                  t        t               t        j                  |j                        j                  t
        j                        }d|t        <   t        |j                  |       y )Nr   r   rK   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                     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 y )Nr\   r   gGz?r   _   Z   r{   F      r         r   	   N   i  r   r   inf)r   floatri   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            
      >   t        d      } t        j                  d   }t        j                  |      }| j                  t        t        |       | j                  j                  d   |k(  sJ t        j                  | j                        j                  t        j                        }d|t        <   t        | j                  |       t        d      }|j                  ddddg      }t        j                  j!                  d|z  d	z         }|j                  ddd      }|j                  dd
ddg      }|j                  ddd      }	|j                  ddd      }
t        j"                  t        j$                  ||d      t        j$                  ||	d      d      }t        j                  j!                  t        j"                  t        j$                  ||d      t        j$                  |
|	d      d            }| j                  ||       | j&                  j(                  }t        j"                  ||	      }t        j"                  ||d      }t        j"                  ||
      }| j                  |||       t+        | j&                  j(                  |       t-               }t        |d      } |j.                  j0                   d}t3        j4                  t6        |      5  | j                  t        t        |       d d d        y # 1 sw Y   y xY w)Nr   r!   sample_weightFr   r   r   r   r   r   ir   rJ   z  does not support sample_weight.rl   )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?   r@   )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     s   &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
		"m!,
		)^!4F
 ZZ
		IIb-a0IIia8	
F ( ++11IIIm^<M	2yq	)B	2y	!BR}=$//55yA *+I&ybA$$--..NOG	z	1Q9 
2	1	1s   -LLc                     t        dd      \  } }t        d      }|j                  dd|j                  d         }||j	                         z  }t        d	      }|j                  | ||
       t               }|j                  }|j                  | |   ||   ||   
       t        |j                  j                  |j                  d       y )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%   rA   r   ransacfinal_modelmask_sampless          r0   )test_ransac_final_model_fit_sample_weightr     s    T;DAq
R
 CKK11771:K6M!M$5$5$77M!,F
JJq!=J1"$K&&LOO	,<l8S   F%%++[->->UKr2   c                  8   t        j                  d      dddf   } t        j                  d      }t               }t	        |d      }|j                  | |       t        |j                  j                  d       t        |j                  j                  d       y)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^   r_   r   r	   r#   r   r   r   
intercept_ra   s       r0   test_perfect_horizontal_liner     s{    
 			#q$wA
A "I&yqA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<   rA   uniquer   rL   r+   r=   newaxisr1   rB   rG   rQ   rV   rY   rb   re   rt   rx   r~   r   markparametrizer   r   r   r   r   r   r   r   r   r   ri   r2   r0   <module>r      s     G , 1  = , 2 N N BIIdC!GbLr1v 	iiD!299S[[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   