U
    }h&                  	   @   st  d Z ddlZddlZddlZddlmZ ddlZddl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 ddlmZmZ dd	lmZmZmZ dd
lmZ edd Zd8d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'ej()d$d%d&ie*e+d'fd%d(ie*e+d)fgd*d+ Z,d,d- Z-d.d/ Z.d0d1 Z/d2d3 Z0d4d5 Z1d6d7 Z2dS )9z?
Testing for Theil-Sen module (sklearn.linear_model.theil_sen)
    N)contextmanager)assert_array_almost_equalassert_array_equalassert_array_lessnorm)	fmin_bfgs)ConvergenceWarning)LinearRegressionTheilSenRegressor)_breakdown_point_modified_weiszfeld_step_spatial_median)assert_almost_equalc               	   c   sN   t j} t j}ttjd,}|t _|t _d V  |  | t _|t _W 5 Q R X d S )Nw)sysstdoutstderropenosdevnullflush)Z
old_stdoutZ
old_stderrr    r   M/tmp/pip-unpacked-wheel-ig1s1lm8/sklearn/linear_model/tests/test_theil_sen.pyno_stdout_stderr    s    r   Tc                 C   s  t jd}d}| rd}d}nd}d}|j|d}d|j|d }|| | | }| rd\|d	< |d	< d
\|d< |d< d\|d< |d< d\|d< |d< nPd\|d	< |d	< d
\|d< |d< d\|d< |d< d\|d< |d< d\|d< |d< |d d t jf |||fS )Nr         @       @2   皙?d   size)   *   )g         +   )      @   !   )g @   1   5   <   )g?iH   )nprandomRandomStatenormalZnewaxis)	interceptrandom_stater   c	n_samplesxnoiseyr   r   r   gen_toy_problem_1d-   s*    r:   c            	      C   s   t jd} d}| j|dfd}t ddg}d}d| j|d }t ||| | }|d	 }| jd||d}d
| j|d ||< ||||fS )Nr   r   r*   r          @      $@      ?r   
   r   r/   r0   r1   r2   arraydotrandint	r4   r6   Xr   r5   r8   r9   Z
n_outliersixr   r   r   gen_toy_problem_2dI   s    rF   c            	      C   s   t jd} d}| j|dfd}t ddddg}d	}d
| j|d }t ||| | }|d }| jd||d}d| j|d ||< ||||fS )Nr   i'  r#   r    r;   r<   g      E@g      @r=   r   r>   r   r?   rC   r   r   r   gen_toy_problem_4dY   s    rG   c                  C   s   t dddgdd} d}t| |}t|| d}t| |}t|| t|| d}t| |}t|| t|| t dddgdd} | d }t| |}t|| d S )Nr=   r   r      r(   r'   r   )r/   r@   reshaper   r   r   r   )rD   mediannew_yr9   r   r   r   test_modweiszfeld_step_1di   s     








rL   c                  C   s   t ddddddgdd} t ddg}t| |}t|t ddg t| |}t|t dd	g t d
dg}t| |}t|| d S )N        r=   rH   r*         ?gUUUUUU?gUUUUUU?g=^?gP	u?gI?gj\jJ<?)r/   r@   rI   r   r   )rD   r9   rK   r   r   r   test_modweiszfeld_step_2d   s    


rO   c                  C   st   t dddgdd} d}t| \}}t|| t jd}|jddd	} t | 	 }t| \}}t
|| d S )
Nr=   r   r   rH   r(   r   r   )i  r(   r    )r/   r@   rI   r   r   r0   r1   rB   rJ   Zravelr   )rD   Ztrue_median_rJ   r4   r   r   r   test_spatial_median_1d   s    
rQ   c               	      s   t ddddddgdd t ddd\} } fdd	}t||d
d}t|| d}tjt|d t ddd W 5 Q R X d S )NrM   r=   rH   r*   r   ư>)Zmax_iterZtolc                    s"   t  fddD }t |S )Nc                    s   g | ]}t |  qS r   r   ).0r7   r9   r   r   
<listcomp>   s     z=test_spatial_median_2d.<locals>.cost_func.<locals>.<listcomp>)r/   r@   sum)r9   distsrD   rT   r   	cost_func   s    z)test_spatial_median_2d.<locals>.cost_funcF)Zdispz:Maximum number of iterations 30 reached in spatial median.match   )	r/   r@   rI   r   r   r   pytestZwarnsr	   )rP   rJ   rY   Zfermat_weberZwarning_messager   rX   r   test_spatial_median_2d   s    
r^   c                  C   sf   t  \} }}}t | |}t|j| dks4ttdd| |}t|j|d t|j	|d d S )Ng?r   )r4   r(   )
r:   r
   fitr/   abscoef_AssertionErrorr   r   
intercept_rD   r9   r   r5   lstq	theil_senr   r   r   test_theil_sen_1d   s    rg   c                  C   s   t dd\} }}}tdd| |}t|j| | dks@ttddd| |}t|j|| d t	|j
d || | d S )	NF)r3   fit_interceptrN   r   ri   r4   r(   rM   )r:   r
   r_   r/   r`   ra   rb   r   r   r   rc   Zscorerd   r   r   r   test_theil_sen_1d_no_intercept   s    rk   c                  C   sf   t  \} }}}t | |}t|j| dks2ttddd| |}t|j|d t|j|d d S )Nr=   g     @@r   max_subpopulationr4   r(   	rF   r
   r_   r   ra   rb   r   r   rc   rd   r   r   r   test_theil_sen_2d   s    ro   c                  C   s2   t dd} t| d dtd  dk s.td S )Ng    _Br*   r(   rR   )r   r/   r`   sqrtrb   )Zbpr   r   r   test_calc_breakdown_point   s    
rq   zparam, ExceptionCls, matchn_subsamplesr(   z;Invalid parameter since n_features+1 > n_subsamples (2 > 1)e   z;Invalid parameter since n_subsamples > n_samples (101 > 50)c              	   C   sJ   t  \}}}}tf | ddi}tj||d ||| W 5 Q R X d S )Nr4   r   rZ   )r:   r   r]   raisesr_   )paramZExceptionClsr[   rD   r9   r   r5   rf   r   r   r   !test_checksubparams_invalid_input   s    rv   c               	   C   sb   t jd} d\}}| j||fd}| j|d}tddd}tt ||| W 5 Q R X d S )Nr   r>      r    	   rr   r4   )	r/   r0   r1   r2   r   r]   rt   
ValueErrorr_   )r4   r6   
n_featuresrD   r9   rf   r   r   r   >test_checksubparams_n_subsamples_if_less_samples_than_features   s    r}   c                  C   sB   t  \} }}}tddd| |}t|j|d t|j|d d S )N   r   rl   r(   )rG   r   r_   r   ra   rc   )rD   r9   r   r5   rf   r   r   r   test_subpopulation   s    r   c                  C   sJ   t  \} }}}t| jd dd| |}t | |}t|j|jd d S )Nr   rz   ry   )rG   r   shaper_   r
   r   ra   )rD   r9   r   r5   rf   re   r   r   r   test_subsamples   s    r   c               	   C   sN   t  \} }}}t 0 tddd| | tdddd| | W 5 Q R X d S )NTr   )verboser4   r>   )r   rm   r4   )r:   r   r   r_   )rD   r9   r   r5   r   r   r   test_verbosity  s    r   c                  C   sh   t  \} }}}t | |}t|j| dks2ttdddd| |}t|j|d t|j|d d S )Nr=   r*   r   g     @@)Zn_jobsr4   rm   r(   rn   rd   r   r   r   test_theil_sen_parallel  s     r   c                  C   s   t jd} d\}}| j||fd}| j|d}tddd||}tdd||}t|j|jd tddd||}|	|}t||d d S )	Nr   rw   r    Frj   rh      T)
r/   r0   r1   r2   r   r_   r
   r   ra   Zpredict)r4   r6   r|   rD   r9   rf   re   Zy_predr   r   r   test_less_samples_than_features  s    
r   )T)3__doc__r   rer   
contextlibr   Znumpyr/   r]   Znumpy.testingr   r   r   Zscipy.linalgr   Zscipy.optimizer   Zsklearn.exceptionsr	   Zsklearn.linear_modelr
   r   Zsklearn.linear_model._theil_senr   r   r   Zsklearn.utils._testingr   r   r:   rF   rG   rL   rO   rQ   r^   rg   rk   ro   rq   markZparametrizer{   escaperv   r}   r   r   r   r   r   r   r   r   r   <module>   sZ   



