U
    ½mœd?F  ã                   @   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=dS )Hé    N)Úsparse)Úassert_array_almost_equal)Úassert_array_equal)Úcheck_random_state)Úassert_allclose)Úmake_regression)ÚLinearRegressionÚRANSACRegressorÚRidge)ÚOrthogonalMatchingPursuit)Ú_dynamic_max_trials)ÚConvergenceWarningi8ÿÿÿéÈ   çš™™™™™É?é   éè  ©Úsizeé2   é   é
   é   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/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/linear_model/tests/test_ransac.pyÚtest_ransac_inliers_outliers   s       ÿr.   c               	   C   sj   dd„ } t j d¡}| dd¡}| dd¡}tƒ }t|dd| dd�}t t¡� | 	||¡ W 5 Q R X d S )	Nc                 S   s(   | j d dkst‚|j d dks$t‚dS ©Nr   r   F©ÚshapeÚAssertionError©r    r!   r,   r,   r-   Úis_data_valid1   s    z0test_ransac_is_data_valid.<locals>.is_data_validr   r   r   r   r   )r   r   r4   r   )
r"   ÚrandomÚRandomStateÚrandr   r	   ÚpytestÚraisesÚ
ValueErrorr   )r4   Úrngr    r!   r)   r*   r,   r,   r-   Útest_ransac_is_data_valid0   s    ûr<   c               	   C   sF   dd„ } t ƒ }t|dd| dd�}t t¡� | tt¡ W 5 Q R X d S )Nc                 S   s(   |j d dkst‚|j d dks$t‚dS r/   r0   ©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	   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 5 Q R X 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 snt‚qnd S )
Nr   r   r   )r   r   Ú
max_trialsr   g¡�vÿÿÿï?©r   r   ©r   r   r   )r   r	   r8   r9   r:   r   r    r!   r   Úlenr'   r1   ÚrangeZ
set_paramsÚ	n_trials_r2   )r)   r*   r@   Úir,   r,   r-   Útest_ransac_max_trialsX   s     û rG   c                  C   s6   t ƒ } t| ddddd�}| tt¡ |jdks2t‚d S )Nr   r   r   )r   r   Zstop_n_inliersr   r   ©r   r	   r   r    r!   rE   r2   ©r)   r*   r,   r,   r-   Útest_ransac_stop_n_inliersp   s    ûrJ   c                  C   s6   t ƒ } t| ddddd�}| tt¡ |jdks2t‚d S )Nr   r   r   )r   r   Z
stop_scorer   r   rH   rI   r,   r,   r-   Útest_ransac_stop_score~   s    ûrK   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svt‚| | d d… |d d… ¡dk sšt‚d S ©Néd   ©rM   r   r   r   g      à?r   )r"   ÚarangeÚzerosr   r	   r   Zscorer2   ©r    r!   r)   r*   r,   r,   r-   Útest_ransac_scoreŒ   s    
   ÿ$rR   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 rL   )r"   rO   rP   r   r	   r   r   ÚpredictrQ   r,   r,   r-   Útest_ransac_predictœ   s    
   ÿrT   c               	   C   st   dd„ } t ƒ }t|| dd�}d}tjt|d�� | tt¡ W 5 Q R X |jdksTt	‚|j
dksbt	‚|jdkspt	‚d S )Nc                 S   s   dS ©NFr,   r3   r,   r,   r-   r4   ¬   s    z0test_ransac_no_valid_data.<locals>.is_data_validr   )r4   r@   ú+RANSAC could not find a valid consensus set©Úmatchr   ©r   r	   r8   r9   r:   r   r    r!   Ún_skips_no_inliers_r2   Ún_skips_invalid_data_Ún_skips_invalid_model_©r4   r)   r*   Úmsgr,   r,   r-   Útest_ransac_no_valid_data«   s      ÿr_   c               	   C   st   dd„ } t ƒ }t|| dd�}d}tjt|d�� | tt¡ W 5 Q R X |jdksTt	‚|j
dksbt	‚|jdkspt	‚d S )Nc                 S   s   dS rU   r,   r=   r,   r,   r-   r>   ½   s    z2test_ransac_no_valid_model.<locals>.is_model_validr   )r>   r@   rV   rW   r   rY   )r>   r)   r*   r^   r,   r,   r-   Útest_ransac_no_valid_model¼   s      ÿr`   c               	   C   sv   dd„ } t ƒ }t|| ddd�}d}tjt|d�� | tt¡ W 5 Q R X |jdksVt	‚|j
d	ksdt	‚|jdksrt	‚d S )
Nc                 S   s   dS rU   r,   r3   r,   r,   r-   r4   Î   s    z3test_ransac_exceed_max_skips.<locals>.is_data_validr   é   )r4   r@   Ú	max_skipsz/RANSAC skipped more iterations than `max_skips`rW   r   é   rY   r]   r,   r,   r-   Útest_ransac_exceed_max_skipsÍ   s       ÿrd   c               	   C   sz   da dd„ } tƒ }t|| ddd�}d}tjt|d�� | tt¡ W 5 Q R X |j	d	ksZt
‚|jd
ksht
‚|jd	ksvt
‚d S )NFc                 S   s   t sda dS dS d S )NTF)Ú
cause_skipr3   r,   r,   r-   r4   â   s    z8test_ransac_warn_exceed_max_skips.<locals>.is_data_validra   r   )r4   rb   r@   z�RANSAC found a valid consensus set but exited early due to skipping more iterations than `max_skips`. See estimator attributes for diagnostics.rW   r   rc   )re   r   r	   r8   Úwarnsr   r   r    r!   rZ   r2   r[   r\   )r4   r)   r*   Zwarning_messager,   r,   r-   Ú!test_ransac_warn_exceed_max_skipsÞ   s        ÿÿrg   c                  C   sX   t  t¡} tƒ }t|dddd�}| | t¡ t |j	¡ 
tj¡}d|t< t|j	|ƒ d S r   )r   Z
coo_matrixr    r   r	   r   r!   r"   r#   r$   r%   r&   r'   r   ©ZX_sparser)   r*   r+   r,   r,   r-   Útest_ransac_sparse_cooû   s    
   ÿri   c                  C   sX   t  t¡} tƒ }t|dddd�}| | t¡ t |j	¡ 
tj¡}d|t< t|j	|ƒ d S r   )r   Z
csr_matrixr    r   r	   r   r!   r"   r#   r$   r%   r&   r'   r   rh   r,   r,   r-   Útest_ransac_sparse_csr
  s    
   ÿrj   c                  C   sX   t  t¡} tƒ }t|dddd�}| | t¡ t |j	¡ 
tj¡}d|t< t|j	|ƒ d S r   )r   Z
csc_matrixr    r   r	   r   r!   r"   r#   r$   r%   r&   r'   r   rh   r,   r,   r-   Útest_ransac_sparse_csc  s    
   ÿrk   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   rS   )r)   r*   Zransac_none_estimatorr,   r,   r-   Útest_ransac_none_estimator(  s&       ÿ   ÿ ÿrl   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�}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 5 Q R X d}t	j
t|d	�� | tt¡ W 5 Q R X d S )
Nr   r   r   r   g       @)r   r   r   z(`min_samples` needs to be explicitly setrW   )r   r	   r    r1   r
   r   r!   r   rS   r8   r9   r:   )r)   Úransac_estimator1Úransac_estimator2Zransac_estimator5Zransac_estimator6Zransac_estimator7Zransac_estimator8Úerr_msgr,   r,   r-   Útest_ransac_min_n_samples;  sj       ÿü   ÿ   ÿ   ÿ ÿ ÿ ÿrp   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_targetsi  s       ÿrs   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_multi1~  s    z.test_ransac_residual_loss.<locals>.loss_multi1c                 S   s   t j| | d dd�S )Nr   r   rt   )r"   ru   rw   r,   r,   r-   Úloss_multi2�  s    z.test_ransac_residual_loss.<locals>.loss_multi2c                 S   s   t  | | ¡S )N)r"   rv   rw   r,   r,   r-   Ú	loss_mono„  s    z,test_ransac_residual_loss.<locals>.loss_monor   r   r   r   )r   r   r   ÚlossZsquared_error)
r"   rq   r!   r   r	   r   r    r   rS   r{   )	rx   ry   rz   rr   r)   Zransac_estimator0rm   rn   Zransac_estimator3r,   r,   r-   Útest_ransac_residual_loss}  sn       ÿûû	 ÿ ÿ ÿû ÿ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t‚t ddddƒdks,t‚t ddddƒdksBt‚t ddddƒd	ksXt‚t d
dddƒdksnt‚t ddddƒdks„t‚t ddddƒdksšt‚t ddddƒdks°t‚t d
dddƒdksÆt‚t ddddƒdksÜt‚t ddddƒtdƒksöt‚d S )NrM   r   g®Gáz®ï?r   é_   éZ   ra   éF   é   r   é   é   r   é	   éN   i™  r   r   Úinf)r   r2   Úfloatr,   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@t‚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 5 Q R X d S )Nr   ©r   Fr   r   r   r   r   r   iüÿÿrt   rA   z  does not support sample_weight.rW   )r	   r!   r1   r"   Zonesr   r    r$   r2   r#   r%   r&   r'   r   r   ÚrandintZndarrayÚflattenÚappendÚrepeatÚ
estimator_Úcoef_r   r   Ú	__class__Ú__name__r8   r9   r:   )r*   Ú	n_samplesÚweightsr+   r   ZX_Zy_Úsample_weightZ	outlier_XZoutlier_weightZ	outlier_yZX_flatZy_flatZ	ref_coef_r)   ro   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tƒ dd	�}|j| ||d
� tƒ }|j}|j| | || || d
� t	|j
j|jdd� d S )Nr   r   )r’   r   é*   r   rc   r   r   )r)   r   )r”   gê-�™—q=)Zatol)r   r   rŠ   r1   ru   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 )z›Check that we can fit a line where all samples are inliers.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/19497
    rM   NrN   r   r‰   g        )
r"   rO   rP   r   r	   r   r   rŽ   r�   Z
intercept_rQ   r,   r,   r-   Útest_perfect_horizontal_line1  s    
r˜   c               	   C   s@   t tƒ dddd�} d}tjt|d�� |  tt¡ W 5 Q R X d S )Nr   r   r   )Zbase_estimatorr   r   r   zV`base_estimator` was renamed to `estimator` in version 1.1 and will be removed in 1.3.rW   )r	   r   r8   rf   ÚFutureWarningr   r    r!   )r*   ro   r,   r,   r-   Útest_base_estimator_deprecatedA  s    üÿrš   )>Únumpyr"   r8   Zscipyr   Znumpy.testingr   r   Zsklearn.utilsr   Zsklearn.utils._testingr   Zsklearn.datasetsr   Zsklearn.linear_modelr   r	   r
   r   Zsklearn.linear_model._ransacr   Zsklearn.exceptionsr   rO   r    r!   rq   Údatar5   r6   r;   ÚuniquerŠ   rC   r'   r7   Znewaxisr.   r<   r?   rG   rJ   rK   rR   rT   r_   r`   rd   rg   ri   rj   rk   rl   rp   rs   r|   r}   rˆ   r•   r—   r˜   rš   r,   r,   r,   r-   Ú<module>   sX   ,.> 7