o
    i'                  	   @   s|  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d: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'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 Z2d8d9 Z3dS );z?
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   sf    t j} t j}ttjd}|t _|t _d V  |  | t _|t _W d    d S 1 s,w   Y  d S )Nw)sysstdoutstderropenosdevnullflush)Z
old_stdoutZ
old_stderrr    r   c/home/kim/smarthome/.venv/lib/python3.10/site-packages/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 }|| | | }| rLd\|d	< |d	< d
\|d< |d< d\|d< |d< d\|d< |d< n(d\|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_outliersZixr   r   r   gen_toy_problem_2dJ      rE   c            	      C   s   t jd} d}| j|dfd}t g d}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_4dZ   rF   rG   c                  C   s   t g ddd} d}t| |}t|| d}t| |}t|| t|| d}t| |}t|| t|| t g ddd} | d }t| |}t|| d S )Nr=   r   r      r(   r   r'   r   r   )r/   r@   reshaper   r   r   r   )rD   mediannew_yr9   r   r   r   test_modweiszfeld_step_1dj   s    








rM   c                  C   s   t g d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        rO   r=   r=   rO   r=   rI   r*         ?gUUUUUU?gUUUUUU?g=^?gP	u?gI?gj\jJ<?)r/   r@   rJ   r   r   )rD   r9   rL   r   r   r   test_modweiszfeld_step_2d   s   


rQ   c                  C   sr   t g ddd} d}t| \}}t|| t jd}|jddd} t | 	 }t| \}}t
|| d S )	NrH   rI   r(   r   r   r   )i  r(   r    )r/   r@   rJ   r   r   r0   r1   rB   rK   Zravelr   )rD   Ztrue_median_rK   r4   r   r   r   test_spatial_median_1d   s   
rS   c                     s   t g ddd t ddd\} } fdd}t||d	d
}t|| d}tjt|d t ddd W d    d S 1 sBw   Y  d S )NrN   rI   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   rV   r   	cost_func   s   
z)test_spatial_median_2d.<locals>.cost_funcF)Zdispz:Maximum number of iterations 30 reached in spatial median.match   rO   )	r/   r@   rJ   r   r   r   pytestwarnsr	   )rR   rK   r[   Zfermat_weberZwarning_messager   rZ   r   test_spatial_median_2d   s   
"ra   c                  C   sf   t  \} }}}t | |}t|j| dksJ tdd| |}t|j|d t|j|d d S )Ng?r   )r4   r(   )	r:   r
   fitr/   abscoef_r   r   
intercept_rD   r9   r   r5   lstq	theil_senr   r   r   test_theil_sen_1d   s   ri   c                  C   s   t dd\} }}}tdd| |}t|j| | dks J tddd| |}t|j|| d t|j	d |
| | d S )	NF)r3   fit_interceptrP   r   rk   r4   r(   rO   )r:   r
   rb   r/   rc   rd   r   r   r   re   Zscorerf   r   r   r   test_theil_sen_1d_no_intercept   s   rm   c                  C   sf   t  \} }}}t | |}t|j| dksJ tddd| |}t|j|d t|j|d d S )Nr=   g     @@r   max_subpopulationr4   r(   rE   r
   rb   r   rd   r   r   re   rf   r   r   r   test_theil_sen_2d   s   rq   c                  C   s2   t dd} t| d dtd  dk sJ d S )Ng    _Br*   r(   rT   )r   r/   rc   sqrt)bpr   r   r   test_calc_breakdown_point   s   
(rt   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   sd   t  \}}}}tdi | ddi}tj||d ||| W d    d S 1 s+w   Y  d S )Nr4   r   r\   r   )r:   r   r_   raisesrb   )paramZExceptionClsr]   rD   r9   r   r5   rh   r   r   r   !test_checksubparams_invalid_input   s
   "ry   c                  C   sx   t jd} d\}}| j||fd}| j|d}tddd}tt ||| W d    d S 1 s5w   Y  d S )Nr   r>      r    	   ru   r4   )	r/   r0   r1   r2   r   r_   rw   
ValueErrorrb   )r4   r6   
n_featuresrD   r9   rh   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   rn   r(   )rG   r   rb   r   rd   re   )rD   r9   r   r5   rh   r   r   r   test_subpopulation   s   r   c                  C   sJ   t  \} }}}t| jd dd| |}t | |}t|j|jd d S )Nr   r}   r|   )rG   r   shaperb   r
   r   rd   )rD   r9   r   r5   rh   rg   r   r   r   test_subsamples   s   r   c                  C   sd   t  \} }}}t  tddd| | tdddd| | W d    d S 1 s+w   Y  d S )NTr   )verboser4   r>   )r   ro   r4   )r:   r   r   rb   )rD   r9   r   r5   r   r   r   test_verbosity  s
   "r   c                  C   sh   t  \} }}}t | |}t|j| dksJ tdddd| |}t|j|d t|j|d d S )Nr=   r*   r   g     @@)Zn_jobsr4   ro   r(   rp   rf   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   rz   r    Frl   rj      T)
r/   r0   r1   r2   r   rb   r
   r   rd   Zpredict)r4   r6   r   rD   r9   rh   rg   Zy_predr   r   r   test_less_samples_than_features  s   
r   c                  C   sZ   t  \} }}}tddd}tjtdd || | W d    d S 1 s&w   Y  d S )NTr   )Zcopy_Xr4   z`copy_X` was deprecatedr\   )r:   r   r_   r`   FutureWarningrb   )rD   r9   rR   rh   r   r   r   test_copy_X_deprecated+  s
   "r   )T)4__doc__r   rer   
contextlibr   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:   rE   rG   rM   rQ   rS   ra   ri   rm   rq   rt   markZparametrizer~   escapery   r   r   r   r   r   r   r   r   r   r   r   <module>   s^    



