o
    \i*                     @   s  d dl Zd dlZd dl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 d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZ dd Zejddejdddd Zejdddd Z ejdddd Z!ejddejdddd Z"ejde#dejddejdd d d gfd!d gfgd"d# Z$ejd$ed%d& Z%d'd( Z&d)d* Z'ejdd+d,d- Z(ejd.d/d0d1ej)d2fd3d4 Z*d5d6 Z+d7d8 Z,d9d: Z-d;d< Z.dS )=    N)assert_array_equal)KMeans)
make_blobsmake_classificationmake_regression)HistGradientBoostingRegressor)SequentialFeatureSelector)LinearRegression)LeaveOneGroupOutcross_val_score)KNeighborsClassifier)make_pipeline)StandardScaler)CSR_CONTAINERSc                  C   s`   d} t | d\}}tt | d}tjtdd ||| W d    d S 1 s)w   Y  d S )N   
n_featuresn_features_to_selectz)n_features_to_select must be < n_featuresmatchr   r   r	   pytestraises
ValueErrorfit)r   Xysfs r   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/feature_selection/tests/test_sequential.pytest_bad_n_features_to_select   s   "r!   	direction)forwardbackwardr   )   r   	   autoc                 C   s   d}t |dd\}}tt || dd}||| |dkr!|d }|jddjd |ks.J |j|ks5J ||jd	 |ksAJ d S )
N
   r   r   random_state   r   r"   cvr'   Tindicesr%   r   r   r	   r   get_supportshapen_features_to_select_	transform)r"   r   r   r   r   r   r   r   r    test_n_features_to_select   s   r5   c                 C   s   d}d}t |dd\}}tt d|| dd}||| |d }|jd	d
jd |ks-J |j|ks4J ||jd |ks@J |jd	d
jd |jksNJ dS )zlCheck the behaviour of `n_features_to_select="auto"` with different
    values for the parameter `tol`.
    r(   MbP?r   r)   r'   r+   r   tolr"   r-   r%   Tr.   Nr0   )r"   r   r8   r   r   r   max_features_to_selectr   r   r    test_n_features_to_select_auto0   s     r:   c                 C   sx  t dddd\}}d}tt d|| dd}||| ||}tjd}tt	t
|jd	 t	|jd
d }t||dd||f ddtjf g}|tt
|j}	tj||	d	d}
tt ||dd }tt ||dd }tt ||dd }tt |
|dd }||ksJ | dkr|| |ksJ || |ksJ dS || |ksJ || |ksJ dS )av  Check the behaviour stopping criterion for feature selection
    depending on the values of `n_features_to_select` and `tol`.

    When `direction` is `'forward'`, select a new features at random
    among those not currently selected in selector.support_,
    build a new version of the data that includes all the features
    in selector.support_ + this newly selected feature.
    And check that the cross-validation score of the model trained on
    this new dataset variant is lower than the model with
    the selected forward selected features or at least does not improve
    by more than the tol margin.

    When `direction` is `'backward'`, instead of adding a new feature
    to selector.support_, try to remove one of those selected features at random
    And check that the cross-validation score is either decreasing or
    not improving by more than the tol margin.
    2   r(   r   )r   n_informativer*   r6   r'   r+   r7   r%   Tr.   N)axis)r-   r#   )r   r   r	   r   r4   nprandomRandomStatelistsetranger2   r1   hstackchoicenewaxisr3   deleter   mean)r"   r   r   r8   r   
selected_Xrngadded_candidatesadded_Xremoved_candidate	removed_Xplain_cv_scoresfs_cv_scoreadded_cv_scoreremoved_cv_scorer   r   r    ,test_n_features_to_select_stopping_criterionJ   s<   
&"rS   zn_features_to_select, expected))g?r%   )g      ?r(   )g      ?r   c                 C   s>   t dd\}}tt || dd}||| |j|ksJ d S )Nr(   r   r+   r,   )r   r   r	   r   r3   )r"   r   expectedr   r   r   r   r   r    test_n_features_to_select_float   s   rU   seedr(   z0n_features_to_select, expected_selected_featuresr+   r%   c           	      C   sx   t j| }d}||d}d|d d df  d|d d df   }tt ||dd}||| t|jdd| d S )	Nd      r   r(   r+   r,   Tr.   )	r>   r?   r@   randnr   r	   r   r   r1   )	rV   r"   r   expected_selected_featuresrJ   	n_samplesr   r   r   r   r   r    test_sanity   s   (r\   csr_containerc                 C   s@   t dd\}}| |}tt ddd}||| || d S )Nr(   r   r'   r+   r   r-   )r   r   r	   r   r4   )r]   r   r   r   r   r   r    test_sparse_support   s   r_   c                  C   s   t jd} d\}}t||dd\}}| jdd||ftd}t j||< tt ddd}|	|| |
| tjtdd	 tt ddd	|| W d    d S 1 sUw   Y  d S )
Nr   )(      r*   r+   )sizedtyper'   r^   zInput X contains NaNr   )r>   r?   r@   r   randintboolnanr   r   r   r4   r   r   r   r	   )rJ   r[   r   r   r   nan_maskr   r   r   r    test_nan_support   s    

"ri   c                  C   s   d\} }t | |dd\}}tt t }t|ddd}||| || tt ddd}tt |}||| || d S )N)r;   rX   r   rb   r'   r+   r^   )r   r   r   r	   r   r   r4   )r[   r   r   r   piper   r   r   r    test_pipeline_support   s   
rk   )r+   rX   c                 C   sF   t dd\}}ttdd| d}|| ||jd | ks!J d S )Nra   r   r%   )n_initr   )r   r   r   r   r4   r2   )r   r   r   r   r   r   r    test_unsupervised_model_fit   s   
rm   r   no_validationy              ?gX@rX   c                 C   s\   t dd\}}tt dd}tttf |||  W d    d S 1 s'w   Y  d S )N   r   rX   r   )r   r   r   r   r   	TypeErrorr   r   )r   r   clustersr   r   r   r    test_no_y_validation_model_fit  s   "rr   c                  C   sb   t ddd\} }tt dddd}tjtdd	 || | W d
   d
S 1 s*w   Y  d
S )z?Check that we raise an error when tol<0 and direction='forward'r(   r   r)   r'   r#   MbPr   r"   r8   ztol must be strictly positiver   Nr   )r   r   r   r   r   r    test_forward_neg_tol_error  s   "ru   c                  C   s   t ddd\} }t }|| || |}t|dddd}|| |}|||||}d|    k r?| jd k sBJ  J ||k sHJ d	S )
z`Check that SequentialFeatureSelector works negative tol

    non-regression test for #25525
    r(   r   r)   r'   r$   rs   rt   r%   N)	r   r	   r   scorer   fit_transformr1   sumr2   )r   r   lrinitial_scorer   Xr	new_scorer   r   r    test_backward_neg_tol  s   *r}   c                  C   sl   t dd\} }tj|td}d||jd d< t }|j| ||d}tdd	}t|d|d
}|	| | dS )z\Check that no exception raised when cv is generator

    non-regression test for #25957
    r   rb   )rd   r%   r+   N)groupsr   )n_neighborsr^   )
r   r>   
zeros_likeintrc   r
   splitr   r   r   )r   r   r~   r-   splitskncr   r   r   r    test_cv_generator_support3  s   
r   c                  C   sh   t dd\} }t }t|d}tjtdd |j| |t|d W d    d S 1 s-w   Y  d S )N*   rb   )	estimatorzis only supported ifr   )sample_weight)	r   r	   r   r   r   r   r   r>   	ones_like)r   r   estr   r   r   r    /test_fit_rejects_params_with_no_routing_enabledF  s   
"r   )/numpyr>   r   numpy.testingr   sklearn.clusterr   sklearn.datasetsr   r   r   sklearn.ensembler   sklearn.feature_selectionr   sklearn.linear_modelr	   sklearn.model_selectionr
   r   sklearn.neighborsr   sklearn.pipeliner   sklearn.preprocessingr   sklearn.utils.fixesr   r!   markparametrizer5   r:   rS   rU   rC   r\   r_   ri   rk   rm   rg   rr   ru   r}   r   r   r   r   r   r    <module>   s`    

=



