o
    iA                     @   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.   `/home/kim/smarthome/.venv/lib/python3.10/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    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   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   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 r1   r2   r+   r"   r#   r.   r.   r/   is_model_validG   r6   z2test_ransac_is_model_valid.<locals>.is_model_validr   r   r   )r   r   r@   r   )r   r   r:   r;   r<   r!   r"   r#   )r@   r+   r,   r.   r.   r/   test_ransac_is_model_validF   s   "rA   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   r:   r;   r<   r!   r"   r#   r
   lenr)   r3   rangeZ
set_params	n_trials_)r+   r,   rB   ir.   r.   r/   test_ransac_max_trialsX   s$    rI   c                  C   s6   t  } t| ddddd}|tt |jdksJ d S )Nr   r   r   )r   r   Zstop_n_inliersr   r   r   r   r!   r"   r#   rG   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   Z
stop_scorer   r   rJ   rK   r.   r.   r/   test_ransac_stop_score~   rM   rN   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   rP   r   r   r   g      ?r   )r$   arangezerosr   r   r!   Zscorer"   r#   r+   r,   r.   r.   r/   test_ransac_score   s   
$(rU   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 rO   )r$   rR   rS   r   r   r!   r   predictrT   r.   r.   r/   test_ransac_predict   s   
rW   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.   r4   r.   r.   r/   r5         z0test_ransac_no_valid_data.<locals>.is_data_validr   )r5   rB   +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_r5   r+   r,   msgr.   r.   r/   test_ransac_no_valid_data      rd   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   rX   rY   r.   r?   r.   r.   r/   r@      rZ   z2test_ransac_no_valid_model.<locals>.is_model_validr   )r@   rB   r[   r\   r   r^   )r@   r+   r,   rc   r.   r.   r/   test_ransac_no_valid_model   re   rf   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   rX   rY   r.   r4   r.   r.   r/   r5      rZ   z3test_ransac_exceed_max_skips.<locals>.is_data_validr      )r5   rB   	max_skipsz/RANSAC skipped more iterations than `max_skips`r\   r      r^   rb   r.   r.   r/   test_ransac_exceed_max_skips   s   rj   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_skipr4   r.   r.   r/   r5      s   z8test_ransac_warn_exceed_max_skips.<locals>.is_data_validrg   r   )r5   rh   rB   zRANSAC found a valid consensus set but exited early due to skipping more iterations than `max_skips`. See estimator attributes for diagnostics.r\   r   ri   )rk   r   r   r:   Zwarnsr   r!   r"   r#   r_   r`   ra   )r5   r+   r,   Zwarning_messager.   r.   r/   !test_ransac_warn_exceed_max_skips   s   rl   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   )rm   ZX_sparser+   r,   r-   r.   r.   r/   test_ransac_sparse   s   rn   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   rV   )r+   r,   Zransac_none_estimatorr.   r.   r/   test_ransac_none_estimator  s   ro   c                  C   sf  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 sw   Y  d}t	j
t|d	 |tt W d    d S 1 sw   Y  d S )
Nr   r   r   r   g       @)r   r   r   z(`min_samples` needs to be explicitly setr\   )r   r   r"   r3   r	   r!   r#   r   rV   r:   r;   r<   )r+   ransac_estimator1ransac_estimator2Zransac_estimator5Zransac_estimator6Zransac_estimator7Zransac_estimator8err_msgr.   r.   r/   test_ransac_min_n_samples  sP   
"rs   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   rv   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   rw   )r$   rx   rz   r.   r.   r/   loss_multi2d  s   z.test_ransac_residual_loss.<locals>.loss_multi2c                 S   s   t | | S )N)r$   ry   rz   r.   r.   r/   	loss_monog  s   z,test_ransac_residual_loss.<locals>.loss_monor   r   r   r   )r   r   r   lossZsquared_error)
r$   rt   r#   r   r   r!   r"   r   rV   r~   )	r{   r|   r}   ru   r+   Zransac_estimator0rp   rq   Zransac_estimator3r.   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   rD   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 d S )NrP   r   gGz?r   _   Z   rg   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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||
}| j|||d t| jj| t }t |dd} |jj d}tjt|d | jtt|d W d    d S 1 sw   Y  d S )Nr   r   sample_weightFr   r   r   r   r   r   irw   rC   z  does not support sample_weight.r\   )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__r:   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+   rr   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dd	}|j| ||d
 t }|j}|j| | || || d
 t	|j
j|jdd d S )Nr   r   )r   r   *   r   ri   r   r   r   r   g-q=)Zatol)r   r   r   r3   rx   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
    rP   NrQ   r   r   g        )
r$   rR   rS   r   r   r!   r   r   r   Z
intercept_rT   r.   r.   r/   test_perfect_horizontal_line  s   
r   )?numpyr$   r:   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   rR   r"   r#   rt   datar7   r8   r=   uniquer   rE   r)   r9   Znewaxisr0   r>   rA   rI   rL   rN   rU   rW   rd   rf   rj   rl   markZparametrizern   ro   rs   rv   r   r   r   r   r   r   r.   r.   r.   r/   <module>   sV    ,
.> 7