o
    ii                     @   s  d dl Z d dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZmZmZ d dlmZ d dlmZmZmZ d dlmZmZmZmZ d	Zd
d Zejddge 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gejdedd Z%d d! Z&ejd"ed#d$ Z'd%d& Z(d'd( Z)d)d* Z*d+d, Z+ejddge ejd-ddgd.d/ Z,d0d1 Z-d2d3 Z.ejddge d4d5 Z/ejddge d6d7 Z0ejd8ed9d: Z1ejded;d< Z2ejddge ejd=d>d?d@ Z3dAdB Z4ejdCddDgejddge dEdF Z5ejdedGdH Z6ejdIg dJejddgdKdL eD  ejdddgdMdN Z7dS )O    N)linalgsparse)	load_irismake_regressionmake_sparse_uncorrelated)LinearRegression)_preprocess_data_rescale_datamake_dataset)add_dummy_feature)assert_allcloseassert_array_almost_equalassert_array_equal)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSLIL_CONTAINERSư>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/kim/smarthome/.venv/lib/python3.10/site-packages/sklearn/linear_model/tests/test_base.pytest_linear_regression!   s   r   sparse_containerfit_interceptTFc                 C   s  t j|}d\}}|j||fd}| d ur| |}|j|d}d|j|d }t|dd}	|	j|||d |	j}
|	j}|	jj	|j	d fksHJ t 
|}|sQ|nt|}|j| | }|j| | }t||}|srt|
| d S t|
|dd   t||d  d S )	N)      )size      ?gؗҜ<)r!   Ztolsample_weightr   r   )nprandomRandomStatenormaluniformr   r   r   r   shapeZ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_weights9   s*   
r5   c                  C   sb   d} t d}td}tdd}tjt| d ||| W d    d S 1 s*w   Y  d S )Nz9Sparse data was passed for X, but dense data is required.
   TZpositivematch)	r   eyer(   onesr   pytestZraises	TypeErrorr   )	error_msgr   r3   r   r   r   r   .test_raises_value_error_if_positive_and_sparseb   s   


"r?   zn_samples, n_features)r      )r@   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_1dn   s   
rB   c                  C   s   t ddgddgg} t g dg dg}t ddg}tdd	| |}t | |}tdd	||}t ||}|jj|jjksGJ |jj|jjksQJ |jj|jjks[J d S )
NgmGB?g\^?gL+K?gfiU?)g&/)¶?g <E/?gMd?)g".Hw?g%|?g0e?r   Fr!   )r(   arrayr   r   r   r-   ndim)X2ZX3r3   Zlr2_without_interceptZlr2_with_interceptZlr3_without_interceptZlr3_with_interceptr   r   r   test_fit_intercept   s   rG   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   
rN   csr_containerc                 C   s   t jd}d}d}|||}d||dk < ||}||}t| d}tdi |}	tdi |}
|	|| |
|| |	jt	
|
jksIJ t|	j|
j d S )Nr      r           g?rC   r   )r(   r)   r*   rA   rI   dictr   r   r   r<   Zapproxr   r   )r!   rO   r0   r1   r2   r   ZXcsrr3   paramsZ	clf_denseZ
clf_sparser   r   r   )test_linear_regression_sparse_equal_dense   s   

rT   c                  C   s   t jd} t| d\}}t ||fj}|jd }t }||| |j	jd|fks-J |
|}||| |
|}tt ||fj|dd d S )Nr   random_stater   r   r@   decimal)r(   r)   r*   r   vstackr.   r-   r   r   r   r   r   )r0   r   r3   r   r2   r   Y_predy_predr   r   r   'test_linear_regression_multiple_outcome   s   


r\   coo_containerc           
      C   s   t j| }t|d\}}||}t ||fj}|jd }t }||| |j	jd|fks1J |
|}|||  |
|}	tt |	|	fj|dd d S )NrU   r   r   r@   rW   )r(   r)   r*   r   rY   r.   r-   r   r   r   r   rJ   r   )
r/   r]   r0   r   r3   r   r2   rM   rZ   r[   r   r   r   .test_linear_regression_sparse_multiple_outcome   s   


r^   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   

r_   c           	      C   s   t j| }t|d\}}t ||fj}|jd }tdd}||| |j	jd|fks/J t 
|j	dks9J ||}|||  ||}tt ||fj| d S )NrU   r   Tr7   r   rQ   )r(   r)   r*   r   rY   r.   r-   r   r   r   allr   rJ   r   )	r/   r0   r   r3   r   r2   rM   rZ   r[   r   r   r   0test_linear_regression_positive_multiple_outcome   s   



ra   c                 C   sh   t j| }t|d\}}tdd}||| tdd}||| t |j|j d dks2J d S )NrU   Tr7   Fr   gMbP?)r(   r)   r*   r   r   r   meanr   )r/   r0   r   r3   r   regnr   r   r   .test_linear_regression_positive_vs_nonpositive  s   

"rd   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[J d S )NrP      r   r   r   r@   g      ?Tr7   Fr   )r(   r)   r*   rI   r   r   rb   r   )r/   r0   r1   r2   r   r3   r   rc   r   r   r   <test_linear_regression_positive_vs_nonpositive_when_positive  s   L

"rf   use_swc                 C   s  t j|}|dd}|dd}|d}| d ur | |}n| }| }|r/| }	nd }	t }
|
j|||	d | d urHt|	 | nt|| t|| |rYt|	| tdd}
|
j|||	d | d urrt|	 | nt j
|| dks~J t|| |rt|	| d S d S )Nr6      r   r&   F)Zcopy_XgzG?)r(   r)   r*   rA   rI   copyr   r   r   toarrayr   Znorm)r    rg   r/   r0   Zoriginal_X_dataZoriginal_y_dataZorginal_sw_datar   r3   r'   r   r   r   r   test_inplace_data_preprocessing  s8   







rk   c                  C   s\  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
 ||jd d ddf |jd d df  W d    n1 scw   Y  | jj|d dd|d< t|ds{J t % tdt ||jd d ddf |jd d df  W d    d S 1 sw   Y  d S )NZpandas0r6   r   re   r      )Z
fill_valuez+pandas.DataFrame with sparse columns found.r8   r   r@   r   error)r<   ZimportorskipZ	DataFramer(   r)   rA   rangeZarraysZSparseArraystrr   ZwarnsUserWarningr   Zilochasattrwarningscatch_warningssimplefilter)pdZdfcolZarrmsgr   r   r   r   2test_linear_regression_pd_sparse_dataframe_warningW  s&   
.
."ry   c                 C   s   t j| }d}d}|||}||}t j|dd}t j|dd}t||dd\}}	}
}}t|
t | t|d t|t | t|| t|	| t||dd\}}	}
}}t|
| t|| t|t | t|||  t|	||  d S )NrP   r   r   axisFrC   T)	r(   r)   r*   rI   rb   r   r   zerosr;   )r/   r0   r1   r2   r   r3   expected_X_meanexpected_y_meanXtytX_meany_meanX_scaler   r   r   test_preprocess_datas  s&   





r   c                 C   s   t j| }d}d}d}|||}|||}t j|dd}|d ur'||}t||dd\}	}
}	}}	t|t | t|
| t||dd\}	}
}	}}	t|| t|
||  d S )	NrP   r@   r   r   rz   FrC   T)r(   r)   r*   rI   rb   r   r   r|   )r/   r    r0   r1   r2   Z	n_outputsr   r3   r~   _r   r   r   r   r    test_preprocess_data_multioutput  s   

r   c                 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|g d t 	|t 	|
  }d||< | d ur| |}t||d|d\}}}}}t|| t||	 t|t | | d urt| |  nt|||  t|||	  d S )NrP   re   rQ         ?r   r6   r%   r   r@   )r{   weights)r   r{   )r   r   r   r   r   T)r!   r'   )r(   r)   r*   rI   ZaverageZfinfodtypeepsr   sqrtsumr   r   r;   rj   )r    r/   r0   r1   r2   r   r3   r'   r}   r~   ZX_sample_weight_avgZX_sample_weight_varZconstant_maskZexpected_X_scaler   r   r   r   r   r   r   r   test_preprocess_data_weighted  sF   



r   lil_containerc                 C   s  t j| }d}d}tj||d|d}||}||}| }t||dd\}}	}
}}t|
t | t|d t|t 	| t| | t|	| t||dd\}}	}
}}t|
t j
|dd	 t|t j
|dd	 t|t 	| t| | t|	|t j
|dd	  d S )
NrP   r   r   )ZdensityrV   FrC   r   Trz   )r(   r)   r*   r   rI   rj   r   r   r|   r;   rb   )r/   r   r0   r1   r2   r   r3   ZXAr   r   r   r   r   r   r   r   #test_sparse_preprocess_data_offsets  s&   


r   c                 C   sH   t  \}}d||dk < | |}t||dd\}}}}}|jdks"J d S )NrQ         @TrC   csr)r   r   format)rO   r   r3   r   Zcsr_r   r   r   r   test_csr_preprocess_data  s
   
r   to_copyTFc                 C   s   t  \}}d||dk < | d ur| |}t||d|dd\}}}}}|r3| d ur3t|j|jr1J d S |r?t||r=J d S | d urOt|j|jsMJ d S t||sWJ d S )NrQ   r   TF)r!   ri   Zcheck_input)r   r   r(   Zmay_share_memorydata)r    r   r   r3   ZX_Zy_r   r   r   r   #test_preprocess_copy_data_no_checks  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 ]}
t|||
d\}}}}}t||	|
d\}}}}}t||	|
d\}}}}}t|||
d\}}}}}|jt jksrJ |jt jkszJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jksJ |jt jks'J |	jt jks0J t	|| t	|| t	|| t	|| t	|| q7d S )NrP   r   r   r   rC   )
r(   r)   r*   rI   Zasarrayfloat32float64r   r   r   )r/   r0   r1   r2   r   r3   X_32y_32X_64y_64r!   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_data  sx   





r   	n_targetsr   c                 C   s$  t j|}d}d}d|| }|||}| d u r!||}n||| }t |}	||	d d t jf  }
| d u r@||	 }n||	d d t jf  }|d urd||}| d u r`||dd}n||}t|||\}}}t||	 |d ur|	 }|	 }| d u r|
 }t||
 t|| d S )NrP   r   r%   r   )r(   r)   r*   rI   r   ZnewaxisZreshaper	   r   rj   rJ   )r   r    r/   r0   r1   r2   r'   r   r3   Zexpected_sqrt_swZexpected_rescaled_XZexpected_rescaled_yZ
rescaled_XZ
rescaled_yZsqrt_swr   r   r   test_rescale_data^  s6   



r   c                 C   s  t  }|jtj}|jtj}| |}tj|jtjd}|jtj}|jtj}| |}tj|jtjd}	t	|||\}
}t	|||	\}}|

 \}}}}|
 \}}}}|\}}}|\}}}|jtjkskJ |jtjkssJ t||td t	|||\}}t	|||	\}}|
 \}}}}|
 \}}}}|\}}}|\}}}|jtjksJ |jtjksJ t||td t||td t|| t|| t|| t|| d S )Nr   rtol)r   r   Zastyper(   r   targetZaranger$   r   r
   Z_next_pyr   r   r   r   )rO   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   X_shape))r6   r#   )r6      )rH   rH   c                 C   s$   g | ]}t j|t jjd ddqS )z/Known to fail for CSR arrays, see issue #30131.)reason)Zmarks)r<   parammarkZxfail).0	containerr   r   r   
<listcomp>  s    r   c                 C   s  t j|}| \}}|||}||}|dur||}t|d}	tdi |	j||dd}
|
j }|r9|
j	}t 
|}|
j|||d t|
j|dd |rVt|
j	| d}|
j|||d t|
j|dd |rpt|
j	| |jdd|jd	 d
}|
j|||d}
|
j }|r|
j	}|
j||t j| d t|
j||du rdndd |rt|
j	| | }d	|dd< |dd  d9  < |
j|||d |
j }|r|
j	}|
j|dd |dd |dd d t|
j|dd |rt|
j	| |durtj||d|d  gdd}nt j||d|d  gd	d}t ||d|d  g}| }|d|d   d9  < t j||d|d  gd	d}tdi |	j|||d}tdi |	j|||d}t|j|jdd |rwt|j	|j	 dS dS )zTest that the impact of sample_weight is consistent.

    Note that this test is stricter than the common test
    check_sample_weight_equivalence alone and also tests sparse X.
    It is very similar to test_enet_sample_weight_consistency.
    NrC   r&   r   r   g     ^@g{Gz?r   r   )lowhighr$   gh㈵>i  Zcsc)r   rz   r   )r(   r)   r*   rI   rR   r   r   r   ri   r   Z	ones_liker   r,   r-   pir   rY   Zconcatenate)r   r    r!   r/   r0   r1   r2   r   r3   rS   r   ZcoefZ	interceptr'   Zsample_weight_0Zcoef_0Zintercept_0rF   y2Zsample_weight_1Zsample_weight_2Zreg1Zreg2r   r   r   0test_linear_regression_sample_weight_consistency  sp   





(
 r   )8rs   numpyr(   r<   Zscipyr   r   Zsklearn.datasetsr   r   r   Zsklearn.linear_modelr   Zsklearn.linear_model._baser   r	   r
   Zsklearn.preprocessingr   Zsklearn.utils._testingr   r   r   Zsklearn.utils.fixesr   r   r   r   r   r   r   Zparametrizer5   r?   rB   rG   rN   rT   r\   r^   r_   ra   rd   rf   rk   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s~   '

6

9

	I)
-