
    0PhA              	          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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 Z0d Z1d Z2ej3        4                    d eez   ez             d!             Z5d" Z6d# Z7d$ Z8d% Z9d& Z:d' Z;d( Z<d) Z=d* Z>dS )+    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                  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      f/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/linear_model/tests/test_ransac.pytest_ransac_inliers_outliersr1       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     r0   is_data_validz0test_ransac_is_data_valid.<locals>.is_data_valid1   -    wqzQwqzQur2   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..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 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   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+   r7   range
set_params	n_trials_)r-   r.   rI   is       r0   test_ransac_max_trialsrQ   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%   rO   r-   r.   s     r0   test_ransac_stop_n_inliersrV   p   sc     ""I&   A%******r2   c                      t                      } t          | dddd          }|                    t          t                     |j        dk    sJ d S )Nr   r   r   )r   r    
stop_scorer!   r   rT   rU   s     r0   test_ransac_stop_scorerY   ~   sc     ""I&   A%******r2   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   r\   r   r   r   g      ?r   )r&   arangezerosr   r	   r#   scorer$   r%   r-   r.   s       r0   test_ransac_scorerb      s    
	#qqq$wA
AAaDAaD ""I&qSq   A!!!ABB%122//14444!!!BQB%2A2//!333333r2   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 r[   )r&   r^   r_   r   r	   r#   r   predictra   s       r0   test_ransac_predictre      s    
	#qqq$wA
AAaDAaD ""I&qSq   A'//22BHSMMBBBBBr2   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 r8   s     r0   r9   z0test_ransac_no_valid_data.<locals>.is_data_valid       ur2   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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 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41Q66662a777777ru   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 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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_skipr8   s     r0   r9   z8test_ransac_warn_exceed_max_skips.<locals>.is_data_valid   s     	J45r2   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"""# # # # # # # # # # # # # # #/144441Q66662a777777s   !A11A58A5sparse_containerc                 H    | t                     }t                      }t          |ddd          }|                    |t                     t          j        |j                                      t
          j	                  }d|t          <   t          |j        |           d S 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%%%l#3#@AAHHRRO %OH'4oFFFFFr2   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   rd   )r-   r.   ransac_none_estimators      r0   test_ransac_none_estimatorr     s     ""I&qQQ   ,!   Aa###  ##%:%B%B1%E%E    r2   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 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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       r0   %test_ransac_multi_dimensional_targetsr   M  s     ""I&qQQ  
 /1a)
$
$C C    l#3#@AAHHRRO %OH'4oFFFFFr2   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     r0   loss_multi1z.test_ransac_residual_loss.<locals>.loss_multi1a  s%    vbfVf_--A66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     vv1,15555r2   c                 0    t          j        | |z
            S )N)r&   r   r   s     r0   	loss_monoz,test_ransac_residual_loss.<locals>.loss_monog  s    vfvo&&&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   `  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    r2   c                  0   t                      } t          | dd          }|                    t          t                     t          j        |j                                      t
          j	                  }d|t          <   t          |j        |           d S )Nr   r   rK   Fr"   r,   s      r0   &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Fr2   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 )Nr\   r   gGz?r   _   Z   r{   F      r         r   	   N   i  r   r   inf)r   floatri   r2   r0   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======r2   c            
      V   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!   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66
Igi  GAW555(.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999: : : : : : : : : : : : : : : : : :s   .#LL"%L"c                     t          dd          \  } }t          d          }|                    dd|j        d                   }||                                z  }t          d	          }|                    | ||
           t                      }|j        }|                    | |         ||         ||         
           t          |j
        j        |j        d           d S )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1171:K66M!M$5$5$7$77M!,,,F
JJq!=J111"$$K&LOO	,<l8S     F%+[->UKKKKKKr2   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
    r\   Nr]   r   r   g        )
r&   r^   r_   r   r	   r#   r   r   r   
intercept_ra   s       r0   test_perfect_horizontal_liner     s    
 		#qqq$wA
A ""I&yqAAAA$/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      ss        G G G G G G G G , , , , , , 1 1 1 1 1 1            = < < < < < , , , , , , 2 2 2 2 2 2 N N N N N N N N N N 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: 7.H G G G  $+$ +$ +$\G G G&; ; ;|G G G> > >@4: 4: 4:nL L L"A A A A Ar2   