a
    hA                     @   s  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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' Z0d(d) Z1d*d+ Z2ej34d,ee e d-d. Z5d/d0 Z6d1d2 Z7d3d4 Z8d5d6 Z9d7d8 Z:d9d: Z;d;d< Z<d=d> Z=d?d@ Z>dS )A    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                  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.   b/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/linear_model/tests/test_ransac.pytest_ransac_inliers_outliers    s    r0   c                  C   s~   dd } t jd}|dd}|dd}t }t|dd| dd}tt |	|| W d    n1 sp0    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   s    z0test_ransac_is_data_valid.<locals>.is_data_validr   r   r   r   r   )r   r   r5   r   )
r$   randomRandomStaterandr   r   pytestraises
ValueErrorr!   )r5   rngr"   r#   r+   r,   r.   r.   r/   test_ransac_is_data_valid0   s    r=   c                  C   sZ   dd } t  }t|dd| dd}tt |tt W d    n1 sL0    Y  d S )Nc                 S   s(   |j d dksJ |j d dks$J dS r1   r2   r+   r"   r#   r.   r.   r/   is_model_validG   s    z2test_ransac_is_model_valid.<locals>.is_model_validr   r   r   )r   r   r?   r   )r   r   r9   r:   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 sD0    Y  tt	tt	t
 tjd dd}t| dd}tdD ]0}|jd|d |tt |j|d	 k sJ qd S )
Nr   r   r   )r   r   
max_trialsr   gv?r   r   r   r   r   )r   r   r9   r:   r;   r!   r"   r#   r
   lenr)   r3   rangeZ
set_params	n_trials_)r+   r,   rA   ir.   r.   r/   test_ransac_max_trialsX   s     * rH   c                  C   s6   t  } t| ddddd}|tt |jdks2J d S )Nr   r   r   )r   r   Zstop_n_inliersr   r   r   r   r!   r"   r#   rF   r+   r,   r.   r.   r/   test_ransac_stop_n_inliersp   s    rK   c                  C   s6   t  } t| ddddd}|tt |jdks2J d S )Nr   r   r   )r   r   Z
stop_scorer   r   rI   rJ   r.   r.   r/   test_ransac_stop_score~   s    rL   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svJ || d d |d d dk sJ d S Nd   rN   r   r   r   g      ?r   )r$   arangezerosr   r   r!   Zscorer"   r#   r+   r,   r.   r.   r/   test_ransac_score   s    
$rS   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 rM   )r$   rP   rQ   r   r   r!   r   predictrR   r.   r.   r/   test_ransac_predict   s    
rU   c                  C   s   dd } t  }t|| dd}d}tjt|d |tt W d    n1 sP0    Y  |jdkshJ |j	dksvJ |j
dksJ d S )Nc                 S   s   dS NFr.   r4   r.   r.   r/   r5      s    z0test_ransac_no_valid_data.<locals>.is_data_validr   )r5   rA   +RANSAC could not find a valid consensus setmatchr   r   r   r9   r:   r;   r!   r"   r#   n_skips_no_inliers_n_skips_invalid_data_n_skips_invalid_model_r5   r+   r,   msgr.   r.   r/   test_ransac_no_valid_data   s    *r`   c                  C   s   dd } t  }t|| dd}d}tjt|d |tt W d    n1 sP0    Y  |jdkshJ |j	dksvJ |j
dksJ d S )Nc                 S   s   dS rV   r.   r>   r.   r.   r/   r?      s    z2test_ransac_no_valid_model.<locals>.is_model_validr   )r?   rA   rW   rX   r   rZ   )r?   r+   r,   r_   r.   r.   r/   test_ransac_no_valid_model   s    *ra   c                  C   s   dd } t  }t|| ddd}d}tjt|d |tt W d    n1 sR0    Y  |jdksjJ |j	d	ksxJ |j
dksJ d S )
Nc                 S   s   dS rV   r.   r4   r.   r.   r/   r5      s    z3test_ransac_exceed_max_skips.<locals>.is_data_validr      )r5   rA   	max_skipsz/RANSAC skipped more iterations than `max_skips`rX   r      rZ   r^   r.   r.   r/   test_ransac_exceed_max_skips   s    *re   c                  C   s   da dd } t }t|| ddd}d}tjt|d |tt W d    n1 sV0    Y  |j	d	ksnJ |j
d
ks|J |jd	ksJ d S )NFc                 S   s   t sda dS dS d S )NTF)
cause_skipr4   r.   r.   r/   r5      s    z8test_ransac_warn_exceed_max_skips.<locals>.is_data_validrb   r   )r5   rc   rA   zRANSAC found a valid consensus set but exited early due to skipping more iterations than `max_skips`. See estimator attributes for diagnostics.rX   r   rd   )rf   r   r   r9   Zwarnsr   r!   r"   r#   r[   r\   r]   )r5   r+   r,   Zwarning_messager.   r.   r/   !test_ransac_warn_exceed_max_skips   s    *rg   sparse_containerc                 C   sV   | t }t }t|dddd}||t t|jtj	}d|t
< t|j| d S r   )r"   r   r   r!   r#   r$   r%   r&   r'   r(   r)   r   )rh   ZX_sparser+   r,   r-   r.   r.   r/   test_ransac_sparse   s    ri   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   rT   )r+   r,   Zransac_none_estimatorr.   r.   r/   test_ransac_none_estimator  s    rj   c                  C   sh  t  } t| dddd}t| dtj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 s0    Y  d}t	j
t|d	 |tt W d    n1 sZ0    Y  d S )
Nr   r   r   r   g       @)r   r   r   z(`min_samples` needs to be explicitly setrX   )r   r   r"   r3   r	   r!   r#   r   rT   r9   r:   r;   )r+   ransac_estimator1ransac_estimator2Zransac_estimator5Zransac_estimator6Zransac_estimator7Zransac_estimator8err_msgr.   r.   r/   test_ransac_min_n_samples  sL    
,rn   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_targetsM  s    rq   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   Zaxis)r$   sumabsZy_trueZy_predr.   r.   r/   loss_multi1a  s    z.test_ransac_residual_loss.<locals>.loss_multi1c                 S   s   t j| | d ddS )Nr   r   rr   )r$   rs   ru   r.   r.   r/   loss_multi2d  s    z.test_ransac_residual_loss.<locals>.loss_multi2c                 S   s   t | | S )N)r$   rt   ru   r.   r.   r/   	loss_monog  s    z,test_ransac_residual_loss.<locals>.loss_monor   r   r   r   )r   r   r   lossZsquared_error)
r$   ro   r#   r   r   r!   r"   r   rT   ry   )	rv   rw   rx   rp   r+   Zransac_estimator0rk   rl   Zransac_estimator3r.   r.   r/   test_ransac_residual_loss`  s`    	rz   c                  C   sL   t  } t| ddd}|tt t|jtj	}d|t
< t|j| d S )Nr   r   rC   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sBJ t ddddd	ksXJ t d
ddddksnJ t dddddksJ t dddddksJ t dddddksJ t d
ddddksJ t dddddksJ t ddddtdksJ d S )NrN   r   gGz?r   _   Z   rb   F      r         r   	   N   i  r   r   inf)r
   floatr.   r.   r.   r/   test_ransac_dynamic_max_trials  s    r   c               	   C   s  t dd} tjd }t|}| jtt|d | jjd |ksBJ 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||
}| j|||d t| jj| t }t |dd} |jj d}tjt|d  | jtt|d W d    n1 s0    Y  d S )Nr   r   sample_weightFr   r   r   r   r   r   irr   rB   z  does not support sample_weight.rX   )r   r#   r3   r$   Zonesr!   r"   r&   r%   r'   r(   r)   r   r   randintZndarrayflattenappendrepeat
estimator_coef_r   r   	__class____name__r9   r:   r;   )r,   	n_samplesweightsr-   r   ZX_Zy_r   Z	outlier_XZoutlier_weightZ	outlier_yZX_flatZy_flatZ	ref_coef_r+   rm   r.   r.   r/   test_ransac_fit_sample_weight  sN    


r   c                  C   s   t ddd\} }td}|jdd|jd d}||  }tdd	}|j| ||d
 t }|j}|j| | || || d
 t	|j
j|jdd d S )Nr   r   )r   r   *   r   rd   r   r   r   r   g-q=)Zatol)r   r   r   r3   rs   r   r!   r   r&   r   r   r   )r"   r#   r<   r   ZransacZfinal_modelZmask_samplesr.   r.   r/   )test_ransac_final_model_fit_sample_weight  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
    rN   NrO   r   r   g        )
r$   rP   rQ   r   r   r!   r   r   r   Z
intercept_rR   r.   r.   r/   test_perfect_horizontal_line  s    
r   )?numpyr$   r9   Znumpy.testingr   r   Zsklearn.datasetsr   Zsklearn.exceptionsr   Zsklearn.linear_modelr   r   r   r	   Zsklearn.linear_model._ransacr
   Zsklearn.utilsr   Zsklearn.utils._testingr   Zsklearn.utils.fixesr   r   r   rP   r"   r#   ro   datar6   r7   r<   uniquer   rD   r)   r8   Znewaxisr0   r=   r@   rH   rK   rL   rS   rU   r`   ra   re   rg   markZparametrizeri   rj   rn   rq   rz   r{   r   r   r   r   r.   r.   r.   r/   <module>   sT   ,
.> 7