U
    ½mœ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   ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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s‚t
‚t  |¡}|s”|nt|ƒ}|j| | }|j| | }t ||¡}|sÔt|
|ƒ 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s’t‚|jj|jjks¦t‚|jj|jjksºt‚d S )NgmâG©B‹Ø?gÊ\«^ºã?gñ‰L+KÕâ?gìf©iUÚ?g&Ï/)Â¶Ñ?g ö<E/Ÿæ?g²MdÅô­�?g".ÆáHwµ?g€%ü÷…|Ê?gÜ0Èeõ±æ?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 ƒƒs¬t	‚||ks¸t	‚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 )Néd   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sŒt‚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   gü©ñÒMbP?)	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 s¶t‚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ƒsât‚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||ƒ | �ræt| ¡ | ¡ | ƒ nt||| | ƒ | �r’t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¡ržt‚n@|rtt ||¡ržt‚n*| rŽt |j|j¡sžt‚nt ||¡sžt‚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söt	‚|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�s†t	‚|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�sàt	‚|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�s:t	‚|jt jk�sLt	‚|jt jk�s^t	‚|jt jk�spt	‚|jt jk�s‚t	‚|	jt jk�s”t	‚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sÚt‚|jtj
ksêt‚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   Ú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
