a
    hi                     @   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   `/var/www/html/assistant/venv/lib/python3.9/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r4| |}|j|d}d|j|d }t|d}	|	j|||d |	j}
|	j}|	jj	|j	d fksJ 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   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*    

r6   c                  C   s`   d} t d}td}tdd}tjt| d ||| W d    n1 sR0    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   r4   r   r   r   r   .test_raises_value_error_if_positive_and_sparseb   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   )	r2   r3   r1   r   r4   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    
rC   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sJ |jj|jjksJ |jj|jjksJ d S )
NgmGB?g\^?gL+K?gfiU?)g&/)¶?g <E/?gMd?)g".Hw?g%|?g0e?r   Fr&   )r)   arrayr   r   r   r.   ndim)X2ZX3r4   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   )r0   r1   nr   betar4   olsr   r   r   test_linear_regression_sparse   s    
rN   csr_containerc                 C   s   t jd}d}d}|||}d||dk < ||}||}t| d}tf i |}	tf i |}
|	|| |
|| |	jt	
|
jksJ t|	j|
j d S )Nr      r           g?r&   )r)   r*   r+   rB   rI   dictr   r   r   r=   Zapproxr   r   )r!   rO   r1   r2   r3   r   ZXcsrr4   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sZJ |
|}||| |
|}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   )r1   r   r4   r   r3   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sbJ |
|}|||  |
|}	tt |	|	fj|dd d S )NrU   r   r   rA   rW   )r)   r*   r+   r   rY   r/   r.   r   r   r   r   rJ   r   )
r0   r]   r1   r   r4   r   r3   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   Tr8   r   )r   r   r   r   r   r   r   )r   r4   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srJ ||}|||  ||}tt ||fj| d S )NrU   r   Tr8   r   rQ   )r)   r*   r+   r   rY   r/   r.   r   r   r   allr   rJ   r   )	r0   r1   r   r4   r   r3   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sdJ d S )NrU   Tr8   Fr   gMbP?)r)   r*   r+   r   r   r   meanr   )r0   r1   r   r4   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 sJ d S )NrP      r   r   r   rA   g      ?Tr8   Fr   )r)   r*   r+   rI   r   r   rb   r   )r0   r1   r2   r3   r   r4   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rt|	 | n
t|| t|| |rt|	| tdd}
|
j|||	d | d urt|	 | nt j
|| dksJ t|| |rt|	| d S )Nr7      r   r'   F)Zcopy_XgzG?)r)   r*   r+   rB   rI   copyr   r   r   toarrayr   Znorm)r    rg   r0   r1   Zoriginal_X_dataZoriginal_y_dataZorginal_sw_datar   r4   r(   r   r   r   r   test_inplace_data_preprocessing  s6    







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 s0    Y  | jj|d dd|d< t|dsJ t H tdt ||jd d ddf |jd d df  W d    n1 sN0    Y  d S )NZpandas0r7   r   re   r      )Z
fill_valuez+pandas.DataFrame with sparse columns found.r9   r   rA   r   error)r=   ZimportorskipZ	DataFramer)   r*   rB   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"    
J
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   axisFr&   T)	r)   r*   r+   rI   rb   r   r   zerosr<   )r0   r1   r2   r3   r   r4   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rN||}t||dd\}	}
}	}}	t|t | t|
| t||dd\}	}
}	}}	t|| t|
||  d S )	NrP   rA   r   r   rz   Fr&   T)r)   r*   r+   rI   rb   r   r   r|   )r0   r    r1   r2   r3   Z	n_outputsr   r4   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rrt| |  nt|||  t|||	  d S )NrP   re   rQ         ?r   r7   r%   r   rA   )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    r0   r1   r2   r3   r   r4   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   Fr&   r   Trz   )r)   r*   r+   r   rI   rj   r   r   r|   r<   rb   )r0   r   r1   r2   r3   r   r4   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sDJ d S )NrQ         @Tr&   csr)r   r   format)rO   r   r4   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\}}}}}|rd| d urdt|j|jrJ nD|rzt||rJ n.| d urt|j|jsJ nt||sJ d S )NrQ   r   TF)r!   ri   Zcheck_input)r   r   r)   Zmay_share_memorydata)r    r   r   r4   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 ]B}
t|||
d\}}}}}t||	|
d\}}}}}t||	|
d\}}}}}t|||
d\}}}}}|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sNJ |jt jks`J |jt jksrJ |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s8J |jt jksJJ |jt jks\J |jt jksnJ |	jt jksJ t	|| t	|| t	|| t	|| t	|| qnd S )NrP   r   r   r   r&   )
r)   r*   r+   rI   Zasarrayfloat32float64r   r   r   )r0   r1   r2   r3   r   r4   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  sv    





r   	n_targetsr   c                 C   s(  t j|}d}d}d|| }|||}| d u rB||}n||| }t |}	||	d d t jf  }
| d u r||	 }n||	d d t jf  }|d ur||}| 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    r0   r1   r2   r3   r(   r   r4   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sJ |jtjksJ t||td t	|||\}}t	|||	\}}|
 \}}}}|
 \}}}}|\}}}|\}}}|jtjksZJ |jtjkslJ 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))r7   r#   )r7      )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f i |	j||dd}
|
j }|rr|
j	}t 
|}|
j|||d t|
j|dd |rt|
j	| d}|
j|||d t|
j|dd |rt|
j	| |jdd|jd	 d
}|
j|||d}
|
j }|r|
j	}|
j||t j| d t|
j||du rHdndd |rbt|
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f i |	j|||d}tf i |	j|||d}t|j|jdd |rt|j	|j	 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.
    Nr&   r'   r   r   g     ^@g{Gz?r   r   )lowhighr$   gh㈵>i  Zcsc)r   rz   )r)   r*   r+   rI   rR   r   r   r   ri   r   Z	ones_liker   r-   r.   pir   rY   Zconcatenate)r   r    r!   r0   r1   r2   r3   r   r4   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  sn    





(
 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parametrizer6   r@   rC   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)
-