U
    _»{jnD  ã                   @   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 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 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-„ Z1d.d/„ Z2d0d1„ Z3d2d3„ Z4d4d5„ Z5d6d7„ Z6d8d9„ Z7d:d;„ Z8d<d=„ Z9d>d?„ Z:d@dA„ Z;dBdC„ Z<dS )Dé    N)Úassert_array_almost_equalÚassert_array_equal)Úsparse)Úmake_regression)ÚConvergenceWarning)ÚLinearRegressionÚOrthogonalMatchingPursuitÚRANSACRegressorÚRidge)Ú_dynamic_max_trials)Úcheck_random_state)Úassert_allclosei8ÿÿÿéÈ   çš™™™™™É?é   éè  ©Ú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,   úe/var/www/html/bwave/python/venv/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   Zwarnsr   r   r    r!   rZ   r2   r[   r\   )r4   r)   r*   Zwarning_messager,   r,   r-   Ú!test_ransac_warn_exceed_max_skipsÞ   s        ÿÿrf   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    
   ÿrh   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   rg   r,   r,   r-   Útest_ransac_sparse_csr
  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
csc_matrixr    r   r	   r   r!   r"   r#   r$   r%   r&   r'   r   rg   r,   r,   r-   Útest_ransac_sparse_csc  s    
   ÿrj   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&       ÿ   ÿ ÿrk   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       ÿü   ÿ   ÿ   ÿ ÿ ÿ ÿro   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_targetsh  s       ÿrr   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   rs   )r"   rt   rv   r,   r,   r-   Úloss_multi2  s    z.test_ransac_residual_loss.<locals>.loss_multi2c                 S   s   t  | | ¡S )N)r"   ru   rv   r,   r,   r-   Ú	loss_mono‚  s    z,test_ransac_residual_loss.<locals>.loss_monor   r   r   r   )r   r   r   ÚlossZsquared_error)
r"   rp   r!   r   r	   r   r    r   rS   rz   )	rw   rx   ry   rq   r)   Zransac_estimator0rl   rm   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üÿÿrs   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)   rn   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   rt   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_line/  s    
r—   )=Únumpyr"   r8   Znumpy.testingr   r   Zscipyr   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   rO   r    r!   rp   Údatar5   r6   r;   Úuniquer‰   rC   r'   r7   Znewaxisr.   r<   r?   rG   rJ   rK   rR   rT   r_   r`   rd   rf   rh   ri   rj   rk   ro   rr   r{   r|   r‡   r”   r–   r—   r,   r,   r,   r-   Ú<module>   sR   ,.> 7