o
    tBhM                     @   s"  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ddZde d ZeeegZejdZeej e!eddZ"ee"ddf  de#e!e"dd  7  < eddd f ddej$f Zedddf Zdd Z%dd Z&dd Z'dd Z(dd Z)d d! Z*d"d# Z+d$d% Z,d&d' Z-d(d) Z.d*d+ Z/d,d- Z0d.d/ Z1d0d1 Z2d2d3 Z3d4d5 Z4d6d7 Z5d8d9 Z6d:d; Z7d<d= Z8d>d? Z9d@dA Z:dBdC Z;dDdE Z<dFdG Z=ej>?dHdIdJgdKdL Z@dMdN ZAdS )O    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                  C   sN   t  } t| dddd}|tt t|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_mask r,   }/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/linear_model/tests/test_ransac.pytest_ransac_inliers_outliers   s   r.   c                  C   s   dd } t jd}|dd}|dd}t }t|dd| dd}tt |	|| W d    d S 1 s9w   Y  d S )	Nc                 S   s(   | j d dks	J |j d dksJ dS Nr   r   Fshaper    r!   r,   r,   r-   is_data_valid1      z0test_ransac_is_data_valid.<locals>.is_data_validr   r   r   r   r   )r   r   r3   r   )
r"   randomRandomStaterandr   r	   pytestraises
ValueErrorr   )r3   rngr    r!   r)   r*   r,   r,   r-   test_ransac_is_data_valid0   s   "r<   c                  C   s\   dd } t  }t|dd| dd}tt |tt W d    d S 1 s'w   Y  d S )Nc                 S   s(   |j d dks	J |j d dksJ dS r/   r0   r)   r    r!   r,   r,   r-   is_model_validG   r4   z2test_ransac_is_model_valid.<locals>.is_model_validr   r   r   )r   r   r>   r   )r   r	   r8   r9   r:   r   r    r!   )r>   r)   r*   r,   r,   r-   test_ransac_is_model_validF   s   "r?   c                  C   s   t  } t| ddddd}tt |tt W d    n1 s"w   Y  tt	tt	t
 tjd dd}t| dd}tdD ]}|jd|d |tt |j|d	 k sYJ qAd S )
Nr   r   r   )r   r   
max_trialsr   gv?r   r   r   r   r   )r   r	   r8   r9   r:   r   r    r!   r   lenr'   r1   range
set_params	n_trials_)r)   r*   r@   ir,   r,   r-   test_ransac_max_trialsX   s$    rH   c                  C   s6   t  } t| d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!   rF   r)   r*   r,   r,   r-   test_ransac_stop_n_inliersp      rL   c                  C   s6   t  } t| ddddd}|tt |jdksJ d S )Nr   r   r   )r   r   
stop_scorer   r   rJ   rK   r,   r,   r-   test_ransac_stop_score~   rM   rO   c                  C   s   t dd d d f } t d}d|d< d|d< t }t|dddd}|| | || dd  |dd  dks;J || d d |d d dk sMJ d S Nd   rQ   r   r   r   g      ?r   )r"   arangezerosr   r	   r   scorer    r!   r)   r*   r,   r,   r-   test_ransac_score   s   
$(rW   c                  C   sl   t dd d d f } t d}d|d< d|d< t }t|dddd}|| | t|| t d d S rP   )r"   rS   rT   r   r	   r   r   predictrV   r,   r,   r-   test_ransac_predict   s   
rY   c                  C   s   t  } t| dtdddd}d}tjt|d |tt W d    n1 s(w   Y  |j	dks4J |j
dks;J |jdksBJ d S )Nr   nanr   r   )r   r   r   r@   +RANSAC could not find a valid consensus setmatch)r   r	   floatr8   r9   r:   r   r    r!   n_skips_no_inliers_n_skips_invalid_data_n_skips_invalid_model_)r)   r*   msgr,   r,   r-   *test_ransac_residuals_threshold_no_inliers   s   rc   c                  C   s   dd } t  }t|| dd}d}tjt|d |tt W d    n1 s(w   Y  |jdks4J |j	dks;J |j
dksBJ d S )Nc                 S      dS NFr,   r2   r,   r,   r-   r3         z0test_ransac_no_valid_data.<locals>.is_data_validr   )r3   r@   r[   r\   r   r   r	   r8   r9   r:   r   r    r!   r_   r`   ra   r3   r)   r*   rb   r,   r,   r-   test_ransac_no_valid_data      ri   c                  C   s   dd } t  }t|| dd}d}tjt|d |tt W d    n1 s(w   Y  |jdks4J |j	dks;J |j
dksBJ d S )Nc                 S   rd   re   r,   r=   r,   r,   r-   r>      rf   z2test_ransac_no_valid_model.<locals>.is_model_validr   )r>   r@   r[   r\   r   rg   )r>   r)   r*   rb   r,   r,   r-   test_ransac_no_valid_model   rj   rk   c                  C   s   dd } t  }t|| ddd}d}tjt|d |tt W d    n1 s)w   Y  |jdks5J |j	d	ks<J |j
dksCJ d S )
Nc                 S   rd   re   r,   r2   r,   r,   r-   r3      rf   z3test_ransac_exceed_max_skips.<locals>.is_data_validr      )r3   r@   	max_skipsz/RANSAC skipped more iterations than `max_skips`r\   r      rg   rh   r,   r,   r-   test_ransac_exceed_max_skips   s   ro   c                  C   s   da dd } t }t|| ddd}d}tjt|d |tt W d    n1 s+w   Y  |j	d	ks7J |j
d
ks>J |jd	ksEJ d S )NFc                 S   s   t sda dS dS )NTF)
cause_skipr2   r,   r,   r-   r3      s   z8test_ransac_warn_exceed_max_skips.<locals>.is_data_validrl   r   )r3   rm   r@   zRANSAC found a valid consensus set but exited early due to skipping more iterations than `max_skips`. See estimator attributes for diagnostics.r\   r   rn   )rp   r   r	   r8   warnsr   r   r    r!   r_   r`   ra   )r3   r)   r*   warning_messager,   r,   r-   !test_ransac_warn_exceed_max_skips   s   rs   c                  C   X   t t} t }t|dddd}|| t t|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+   r,   r,   r-   test_ransac_sparse_coo     
rx   c                  C   rt   r   )r   
csr_matrixr    r   r	   r   r!   r"   r#   r$   r%   r&   r'   r   rv   r,   r,   r-   test_ransac_sparse_csr  ry   r{   c                  C   rt   r   )r   
csc_matrixr    r   r	   r   r!   r"   r#   r$   r%   r&   r'   r   rv   r,   r,   r-   test_ransac_sparse_csc-  ry   r}   c                  C   sX   t  } t| dddd}td dddd}|tt |tt t|t|t d S )Nr   r   r   r   )r   r	   r   r    r!   r   rX   )r)   r*   ransac_none_estimatorr,   r,   r-   test_ransac_none_estimator<  s   r   c            
      C   s  t  } t| dddd}t| dtjd  ddd}t| dddd}t| dddd}t| dddd}t| ddd}t| tjd d	 ddd}tt d ddd}|tt |tt |tt |tt t|t|t t|t|t t|t|t t	
t |tt W d    n1 sw   Y  t	
t |tt W d    n1 sw   Y  t	
t |tt W d    n1 sw   Y  d
}	t	jt|	d |tt W d    d S 1 sw   Y  d S )Nr   r   r   r   g       @g@)r   r   r   z:From version 1.2, `min_samples` needs to be explicitly setr\   )r   r	   r    r1   r
   r   r!   r   rX   r8   r9   r:   rq   FutureWarning)
r)   ransac_estimator1ransac_estimator2ransac_estimator3ransac_estimator4ransac_estimator5ransac_estimator6ransac_estimator7ransac_estimator8err_msgr,   r,   r-   test_ransac_min_n_samplesO  sh   
"r   c                  C   s^   t  } t| dddd}ttttg}|t| t|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+   r,   r,   r-   %test_ransac_multi_dimensional_targets  s   r   c            	      C   s  dd } dd }dd }t tttg}t }t|ddd	d
}t|ddd	| d}t|ddd	|d}|t| |t| |t| t|t|t t|t|t |tt ||_	|tt t|t|t t|ddd	dd}|tt t|t|t d S )Nc                 S   s   t jt | | ddS )Nr   axis)r"   sumabsy_truey_predr,   r,   r-   loss_multi1  s   z.test_ransac_residual_loss.<locals>.loss_multi1c                 S   s   t j| | d ddS )Nr   r   r   )r"   r   r   r,   r,   r-   loss_multi2  s   z.test_ransac_residual_loss.<locals>.loss_multi2c                 S   s   t | | S )N)r"   r   r   r,   r,   r-   	loss_mono  s   z,test_ransac_residual_loss.<locals>.loss_monor   r   r   r   )r   r   r   losssquared_error)
r"   r   r!   r   r	   r   r    r   rX   r   )	r   r   r   r   r)   ransac_estimator0r   r   r   r,   r,   r-   test_ransac_residual_loss  s`   	r   c                  C   sL   t  } t| ddd}|tt t|jtj	}d|t
< t|j| d S )Nr   r   rB   Fr   r(   r,   r,   r-   &test_ransac_default_residual_threshold  s   r   c                  C   s  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s7J t dddddksBJ t dddddksMJ t dddddksXJ t d
ddddkscJ t dddddksnJ t ddddtdks{J t } t| ddd}tt |tt	 W d    n1 sw   Y  t| ddd}tt |tt	 W d    d S 1 sw   Y  d S )NrQ   r   gGz?r   _   Z   rl   F      r         r   	   N   i  r   r   infg)r   stop_probabilityg?)
r   r^   r   r	   r8   r9   r:   r   r    r!   rK   r,   r,   r-   test_ransac_dynamic_max_trials  s(   "r   c               	   C   s  t dd} tjd }t|}| tt| | jjd |ks J t| j	tj
}d|t< t| j| td}|ddddg}tjd| d }|ddd}|dd	ddg}|ddd}	|d
dd}
tjtj||ddtj||	dddd}tjtjtj||ddtj|
|	dddd}| || | jj}t||	}tj||dd}t||
}| ||| t| jj| t }t |dd} |jj d}tjt|d | tt| W d    d S 1 sw   Y  d S )Nr   r   Fr   r   r   r   r   r   ir   rA   z  does not support sample_weight.r\   )r	   r!   r1   r"   onesr   r    r$   r#   r%   r&   r'   r   r   randintndarrayflattenappendrepeat
estimator_coef_r   r   	__class____name__r8   r9   r:   )r*   	n_samplesweightsr+   r   X_y_sample_weight	outlier_Xoutlier_weight	outlier_yX_flaty_flat	ref_coef_r)   r   r,   r,   r-   test_ransac_fit_sample_weight  sP   


"r   c                  C   s   t ddd\} }td}|jdd|jd d}||  }tt dd	}|j| ||d
 t }|j}|j| | || || d
 t	|j
j|jdd d S )Nr   r   )r   r   *   r   rn   r   r   )r)   r   )r   g-q=)atol)r   r   r   r1   r   r	   r   r   r$   r   r   r   )r    r!   r;   r   ransacfinal_modelmask_samplesr,   r,   r-   )test_ransac_final_model_fit_sample_weightJ  s   r   c                  C   s^   t ddddf } t d}t }t|d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
    rQ   NrR   r   r   g        )
r"   rS   rT   r   r	   r   r   r   r   
intercept_rV   r,   r,   r-   test_perfect_horizontal_line[  s   
r   zold_loss, new_loss)absolute_lossr   )squared_lossabsolute_errorc                 C   s   t | dd}tjtd|  dd |tt W d    n1 s"w   Y  t |dd}|tt t|t|t d S )Nr   )r   r   z
The loss 'z' was deprecatedr\   )	r	   r8   rq   r   r   r    r!   r   rX   )old_lossnew_lossest1est2r,   r,   r-   test_loss_deprecatedl  s   r   c                  C   sV   t t dddd} d}tjt|d | tt W d    d S 1 s$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.r\   )r	   r   r8   rq   r   r   r    r!   )r*   r   r,   r,   r-   test_base_estimator_deprecated~  s   "r   )Bnumpyr"   r8   scipyr   numpy.testingr   r   sklearn.utilsr   sklearn.utils._testingr   sklearn.datasetsr   sklearn.linear_modelr   r	   r
   r   sklearn.linear_model._ransacr   sklearn.exceptionsr   rS   r    r!   r   datar5   r6   r;   uniquer   rC   r'   r7   newaxisr.   r<   r?   rH   rL   rO   rW   rY   rc   ri   rk   ro   rs   rx   r{   r}   r   r   r   r   r   r   r   r   r   markparametrizer   r   r,   r,   r,   r-   <module>   sj    ,:>*7
