U
    2da                     @   s<  d dl Z 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 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 d dlmZ dZdd Ze jdejejge jdddgdd Zdd Z e jdddgdd  Z!d!d" Z"d#d$ Z#e jd%ddd&gd'd( Z$d)d* Z%e jdddgd+d, Z&d-d. Z'd/d0 Z(d1d2 Z)d3d4 Z*d5d6 Z+d7d8 Z,d9d: Z-d;d< Z.d=d> Z/e jd?ddgd@dA Z0dBdC Z1dDdE Z2e jd?dFe jdGdFdHdI Z3dJdK Z4e jdLddMgdNdO Z5dPdQ Z6dS )R    N)sparse)linalg)assert_array_almost_equal)assert_array_equal)assert_allclose)LinearRegression)_deprecate_normalize)_preprocess_data)_rescale_data)make_dataset)make_sparse_uncorrelated)make_regression)	load_iris)StandardScaler)add_dummy_featureư>c                  C   s   dgdgg} ddg}t  }|| | t|jdg t|jdg t|| ddg dgg} dg}t  }|| | t|jdg t|jdg t|| dg d S )N      r   )r   fitr   coef_
intercept_predict)XYreg r   H/tmp/pip-unpacked-wheel-zrfo1fqw/sklearn/linear_model/tests/test_base.pytest_linear_regression    s    r   array_constrfit_interceptTFc                 C   s   t j|}d\}}| |j||fd}|j|d}d|j|d }t|d}	|	j|||d |	j}
|	j}|	jj	|j	d fkst
t |}|s|nt|}|j| | }|j| | }t||}|st|
| n t|
|dd   t||d  d S )N)      )size      ?r   sample_weightr   r   )nprandomRandomStatenormaluniformr   r   r   r   shapeAssertionErrorZdiagr   Tr   Zsolver   )r   r   global_random_seedrng	n_samples
n_featuresr   yr&   r   Zcoefs1Zinter1WZX_augZXwZywZcoefs2r   r   r   %test_linear_regression_sample_weights8   s&    

r5   c               	   C   sL   d} t d}td}tdd}tjt| d ||| W 5 Q R X d S )Nz7A sparse matrix was passed, but dense data is required.
   TZpositivematch)	r   eyer'   onesr   pytestraises	TypeErrorr   )	error_msgr   r3   r   r   r   r   .test_raises_value_error_if_positive_and_sparse_   s    


r@   zn_samples, n_features)r      )rA   r   c           	      C   sp   t jd}|| |}|| }|| d d }d}d}t }|||| |||| |||| d S )Nr   r   r   r#   g       @)r'   r(   r)   randnr   r   )	r1   r2   r0   r   r3   Zsample_weights_OKZsample_weights_OK_1Zsample_weights_OK_2r   r   r   r   9test_raises_value_error_if_sample_weights_greater_than_1dk   s    
rC   c                  C   s   t ddgddgg} t dddgdd	d
gg}t ddg}tdd| |}t | |}tdd||}t ||}|jj|jjkst|jj|jjkst|jj|jjkstd S )NgmGB?g\^?gL+K?gfiU?g&/)¶?g <E/?gMd?g".Hw?g%|?g0e?r   Fr$   )r'   arrayr   r   r   r,   r-   ndim)ZX2ZX3r3   Zlr2_without_interceptZlr2_with_interceptZlr3_without_interceptZlr3_with_interceptr   r   r   test_fit_intercept}   s    rF   c               	   C   s0   d} d}t jt|d t| d W 5 Q R X d S )NZwrongz Leave 'normalize' to its defaultr8   	estimator)r<   r=   
ValueErrorr   )	normalizer?   r   r   r   test_error_on_wrong_normalize   s    rJ   rI   
deprecatedc              	      s   | dkrd}d }g }n(| }t }dg}| s4|d n
|d |d krrt  tdt  t| d}W 5 Q R X n:t| t| d}W 5 Q R X t fdd	|D st	||kst	d S )
NrK   Fz1.4zdefault valuezStandardScaler(errorrG   c                    s   g | ]}|t  d  jkqS )r   )strmessage).0warningrecordr   r   
<listcomp>   s     z,test_deprecate_normalize.<locals>.<listcomp>)
FutureWarningappendwarningscatch_warningssimplefilterr   r<   warnsallr-   )rI   outputexpectedZwarning_msg
_normalizer   rQ   r   test_deprecate_normalize   s$    

r^   c                 C   sr   t j| }d}t||}||}|| }t }|||  t	||j
|j  t	|||  d d S )Nd   r   )r'   r(   r)   r   r:   randr   r   ravelr   r   r   r   )r/   r0   nr   betar3   olsr   r   r   test_linear_regression_sparse   s    
re   c           
      C   s   t jd}d}d}|||}d||dk < t|}||}t| d}tf |}tf |}	|	|| |		|| |j
t|	j
kstt|j|	j d S )Nr      r           g?r$   )r'   r(   r)   rB   r   
csr_matrixr`   dictr   r   r   r<   Zapproxr-   r   r   )
r   r0   r1   r2   r   ZXcsrr3   paramsZ	clf_denseZ
clf_sparser   r   r   )test_linear_regression_sparse_equal_dense   s    




rk   c                  C   s   t jd} t| d\}}t ||fj}|jd }t }||| |j	jd|fksZt
||}||| ||}tt ||fj|dd d S )Nr   random_stater   r   rA   decimal)r'   r(   r)   r   vstackr.   r,   r   r   r   r-   r   r   )r0   r   r3   r   r2   r   Y_predy_predr   r   r   'test_linear_regression_multiple_outcome   s    


rs   c           	      C   s   t j| }t|d\}}t|}t ||fj}|jd }t	 }|
|| |jjd|fksdt||}|
||  ||}tt ||fj|dd d S )Nrl   r   r   rA   rn   )r'   r(   r)   r   r   Z
coo_matrixrp   r.   r,   r   r   r   r-   r   ra   r   	r/   r0   r   r3   r   r2   rd   rq   rr   r   r   r   .test_linear_regression_sparse_multiple_outcome   s    



ru   c                  C   s   dgdgg} ddg}t dd}|| | t|jdg t|jdg t|| ddg dgg} dg}t dd}|| | t|jdg t|jdg t|| dg d S )Nr   r   Tr7   r   )r   r   r   r   r   r   r   )r   r3   r   r   r   r   test_linear_regression_positive   s    

rv   c           	      C   s   t j| }t|d\}}t ||fj}|jd }tdd}||| |j	jd|fks^t
t |j	dksrt
||}|||  ||}tt ||fj| d S )Nrl   r   Tr7   r   rg   )r'   r(   r)   r   rp   r.   r,   r   r   r   r-   rZ   r   ra   r   rt   r   r   r   0test_linear_regression_positive_multiple_outcome  s    



rw   c                 C   sh   t j| }t|d\}}tdd}||| tdd}||| t |j|j d dksdtd S )Nrl   Tr7   Fr   gMbP?)	r'   r(   r)   r   r   r   meanr   r-   )r/   r0   r   r3   r   regnr   r   r   .test_linear_regression_positive_vs_nonpositive   s    

rz   c                 C   s   t j| }d}d}|||}|d d df d|d d df   d|d d df   d|d d df   }tdd	}||| td
d	}||| t |j|j d dk std S )Nrf      r   r   r   rA   g      ?Tr7   Fr   )	r'   r(   r)   r`   r   r   rx   r   r-   )r/   r0   r1   r2   r   r3   r   ry   r   r   r   <test_linear_regression_positive_vs_nonpositive_when_positive-  s    L

r|   c               	   C   s2  t d} | dtjdi}tddD ]@}tjd}d|d d< |dkr^| jj|dd}||t	|< q*d	}t
 }t jt|d
2 ||jd d ddf |jd d df  W 5 Q R X | jj|d dd|d< t|dstt > tdt ||jd d ddf |jd d df  W 5 Q R X d S )NZpandas0r6   r   r{   r      )Z
fill_valuez+pandas.DataFrame with sparse columns found.r8   r   rA   r   rL   )r<   ZimportorskipZ	DataFramer'   r(   rB   rangeZarraysZSparseArrayrM   r   rY   UserWarningr   Zilochasattrr-   rV   rW   rX   )pdZdfcolZarrmsgr   r   r   r   2test_linear_regression_pd_sparse_dataframe_warning>  s"    
6
r   c                 C   sr  t j| }d}d}|||}||}t j|dd}t j|ddt |jd  }t j|dd}t||ddd\}	}
}}}t	|t 
| t	|d t	|t | t	|	| t	|
| t||ddd\}	}
}}}t	|| t	|| t	|t | t	|	||  t	|
||  t||ddd\}	}
}}}t	|| t	|| t	|| t	|	|| |  t	|
||  d S )Nrf   r   r   axisFr   rI   T)r'   r(   r)   r`   rx   stdsqrtr,   r	   r   zerosr;   )r/   r0   r1   r2   r   r3   expected_X_meanexpected_X_scaleexpected_y_meanXtytX_meany_meanX_scaler   r   r   test_preprocess_dataZ  sR    
   


   

   


r   c                 C   s   t j| }d}d}d}|||}|||}t j|dd}|t|g}|D ]}t||ddd\}	}
}	}}	t|t 	| t|
| t||ddd\}	}
}	}}	t|| t|
||  t||ddd\}	}
}	}}	t|| t|
||  qPd S )	Nrf   rA   r   r   r   Fr   T)
r'   r(   r)   r`   rx   r   Z
csc_matrixr	   r   r   )r/   r0   r1   r2   Z	n_outputsr   r3   r   args_r   r   r   r   r    test_preprocess_data_multioutput  s8       
   

r   	is_sparsec                 C   s  t j|}d}d}|||}d||dk < |d d df  d9  < d|d d df< d|d d d	f< ||}||}t j|d|d
}t j|d|d
}	t j||dd}
t j||
 d |dd}|dt |jj k }t|ddddg t 	|t 	|
  }d||< | rt|}t||dd|d\}}}}}t|| t||	 t|t | | rrt| |  nt|||  t|||	  t||dd|d\}}}}}t|| t||	 t|| | rt| | |  nt||| |  | rtddj||d}t|| d d d df t 	|
  | d d d df  t|| d d dd f | d d dd f  n>tddj||d}t|j| t||t 	|
  | t|||	  d S )Nrf   r{   rg         ?r   r6   r#   r   rA   )r   weights)r   r   r   TF)r   rI   r&   )Z	with_meanr%   )r'   r(   r)   r`   ZaverageZfinfodtypeZepsr   r   sumr   rh   r	   r   r;   toarrayr   r   Z	transformZmean_)r   r/   r0   r1   r2   r   r3   r&   r   r   ZX_sample_weight_avgZX_sample_weight_varZconstant_maskr   r   r   r   r   r   Zscalerr   r   r   test_preprocess_data_weighted  s    


  





* r   c                 C   s  t j| }d}d}tj||d|d}| }||}| }t j|ddt |j	d  }t
||ddd\}}	}
}}t|
t | t|d t|t | t|j| t|	| t
||d	dd\}}	}
}}t|
t j|dd t|t j|dd t|t | t|j| t|	|t j|dd  t
||d	d	d\}}	}
}}t|
t j|dd t|t j|dd t|| t|j||  t|	|t j|dd  d S )
Nrf   r   r   )Zdensityrm   r   r   Fr   T)r'   r(   r)   r   r`   Ztolilr   r   r   r,   r	   r   r   r;   Arx   )r/   r0   r1   r2   r   r3   ZXAr   r   r   r   r   r   r   r   r   #test_sparse_preprocess_data_offsets  sR    
   

      
r   c                  C   sJ   t  \} }d| | dk < t| }t||d\}}}}}| dksFtd S )Nrg         @Tcsr)r   r   rh   r	   Z	getformatr-   )r   r3   r   Zcsr_r   r   r   r   test_csr_preprocess_data+  s
    

r   TFto_copyc                 C   s   t  \}}d||dk < | r$t|}t||d|dd\}}}}}|r^| r^t|j|jrtn@|rtt||rtn*| rt|j|jstnt||std S )Nrg   r   TF)copyZcheck_input)r   r   rh   r	   r'   Zmay_share_memorydatar-   )r   r   r   r3   ZX_Zy_r   r   r   r   #test_preprocess_copy_data_no_checks4  s    

r   c                  C   s  t j| }d}d}|||}||}t j|t jd}t j|t jd}t j|t jd}t j|t jd}	dD ]X}
dD ]L}t|||
|d\}}}}}t||	|
|d\}}}}}t||	|
|d\}}}}}t|||
|d\}}}}}|jt jkst	|jt jkst	|jt jkst	|jt jks,t	|jt jks>t	|jt jksPt	|jt jksbt	|jt jkstt	|jt jkst	|jt jkst	|jt jkst	|jt jkst	|jt jkst	|jt jkst	|jt jkst	|jt jkst	|jt jkst	|jt jks(t	|jt jks:t	|jt jksLt	|jt jks^t	|jt jkspt	|jt jkst	|	jt jkst	t
|| t
|| t
|| t
|| t
|| qxqnd S )Nrf   r   r   r   r   )r'   r(   r)   r`   Zasarrayfloat32float64r	   r   r-   r   ) r/   r0   r1   r2   r   r3   X_32y_32X_64y_64r   rI   ZXt_32Zyt_32Z	X_mean_32Z	y_mean_32Z
X_scale_32ZXt_64Zyt_64Z	X_mean_64Z	y_mean_64Z
X_scale_64ZXt_3264Zyt_3264ZX_mean_3264Zy_mean_3264ZX_scale_3264ZXt_6432Zyt_6432ZX_mean_6432Zy_mean_6432ZX_scale_6432r   r   r   test_dtype_preprocess_dataI  s    






r   	n_targetsr   c                 C   s   t j|}d}d}d|| }|||}| d krB||}n||| }t|||\}}	}
||
d d t jf  }| d kr||
 }n||
d d t jf  }t|| t|	| d S )Nrf   r   r#   )r'   r(   r)   r`   r
   Znewaxisr   )r   r/   r0   r1   r2   r&   r   r3   Z
rescaled_XZ
rescaled_yZsqrt_swZrescaled_X2Zrescaled_y2r   r   r   test_rescale_data_dense  s    

r   c                  C   s  t  } | jtj}| jtj}t|}tj|j	tjd}| jtj
}| jtj
}t|}tj|j	tj
d}t|||\}	}
t|||\}}
|	 \}}}
}
| \}}}
}
|\}}
}
|\}}
}
|jtjkst|jtj
kstt||td t|||\}}
t|||\}}
| \}}}
}
| \}}}
}
|\}}
}
|\}}
}
|jtjks^t|jtj
ksptt||td t||td t|| t|| t|| t|| d S )Nr   )rtol)r   r   Zastyper'   r   targetr   rh   Zaranger"   r   r   Z_next_pyr   r-   r   r   r   )Zirisr   r   ZX_csr_32Zsample_weight_32r   r   ZX_csr_64Zsample_weight_64Z
dataset_32r   Z
dataset_64Zxi_32Zyi_32Zxi_64Zyi_64Z
xi_data_32Z
xi_data_64Zdatasetcsr_32Zdatasetcsr_64Zxicsr_32Zyicsr_32Zxicsr_64Zyicsr_64Zxicsr_data_32Zxicsr_data_64r   r   r   test_fused_types_make_dataset  s@    








r   )7r<   rV   Znumpyr'   Zscipyr   r   Zsklearn.utils._testingr   r   r   Zsklearn.linear_modelr   Zsklearn.linear_model._baser   r	   r
   r   Zsklearn.datasetsr   r   r   Zsklearn.preprocessingr   r   r   r   markZparametrizerD   rh   r5   r@   rC   rF   rJ   r^   re   rk   rs   ru   rv   rw   rz   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sh   %


&
h&	O
