
    -i*                     "   S SK rS SKrS SKJr  S SKJr  S SKJrJ	r	J
r
  S SKJr  S SKJr  S SKJr  S SKJrJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S r\R:                  R=                  SS5      \R:                  R=                  SS5      S 5       5       r\R:                  R=                  SS5      S 5       r \R:                  R=                  SS5      S 5       r!\R:                  R=                  SS5      \R:                  R=                  SS5      S 5       5       r"\R:                  R=                  S\#" S5      5      \R:                  R=                  SS5      \R:                  R=                  SSS S/4SS/4/5      S 5       5       5       r$\R:                  R=                  S\5      S 5       r%S  r&S! r'\R:                  R=                  SS"5      S# 5       r(\R:                  R=                  S$S%S&S'\RR                  S(45      S) 5       r*S* r+S+ r,S, r-S- r.g).    N)assert_array_equal)KMeans)
make_blobsmake_classificationmake_regression)HistGradientBoostingRegressor)SequentialFeatureSelector)LinearRegression)LeaveOneGroupOutcross_val_score)KNeighborsClassifier)make_pipeline)StandardScaler)CSR_CONTAINERSc                      Sn [        U S9u  p[        [        5       U S9n[        R                  " [
        SS9   UR                  X5        S S S 5        g ! , (       d  f       g = f)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sfss       b/var/www/html/venv/lib/python3.13/site-packages/sklearn/feature_selection/tests/test_sequential.pytest_bad_n_features_to_selectr"      sJ    Jj1DA
#$4$6Z
XC	z)T	U 
V	U	Us   A
A"	direction)forwardbackwardr   )   r   	   autoc                 0   Sn[        USS9u  p4[        [        5       UU SS9nUR                  X45        US:X  a  US-  nUR	                  SS9R
                  S   U:X  d   eUR                  U:X  d   eUR                  U5      R
                  S	   U:X  d   eg )
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    s         r!   test_n_features_to_selectr7      s    
 JjqADA
#1	C GGAMv%)Q??4?(..q15IIII$$(<<<<==!!!$(<<<<    c                    SnSn[        USS9u  p4[        [        5       SUU SS9nUR                  X45        US-
  nUR	                  S	S
9R
                  S   U::  d   eUR                  U::  d   eUR                  U5      R
                  S   U::  d   eUR	                  S	S
9R
                  S   UR                  :X  d   eg)zdCheck 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&   Tr0   Nr2   )r#   r   r<   r   r   r    max_features_to_selects          r!   test_n_features_to_select_autor>   0   s     J
CjqADA
##C GGAM'!^??4?(..q15KKKK$$(>>>>==!!!$(>>>>??4?(..q1S5N5NNNNr8   c           	         [        SSSS9u  pSn[        [        5       SUU SS9nUR                  X5        UR	                  U5      n[
        R                  R                  S5      n[        [        [        UR                  S	   5      5      [        UR                  S
S95      -
  5      n[
        R                  " UUSS2UR                  U5      4   SS2[
        R                  4   /5      nUR                  [        [        UR                   5      5      5      n	[
        R"                  " XYS	S9n
[%        [        5       XSS9R'                  5       n[%        [        5       XRSS9R'                  5       n[%        [        5       XSS9R'                  5       n[%        [        5       XSS9R'                  5       nX:  d   eU S:X  a  X-
  U::  d   eX-
  U:  d   egX-
  U::  d   eX-
  U::  d   eg)a>  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,   r:   r(   r-   r;   r&   Tr0   N)axis)r/   r$   )r   r	   r
   r   r6   nprandomRandomStatelistsetranger4   r3   hstackchoicenewaxisr5   deleter   mean)r#   r   r   r<   r    
selected_Xrngadded_candidatesadded_Xremoved_candidate	removed_Xplain_cv_scoresfs_cv_scoreadded_cv_scoreremoved_cv_scores                  r!   ,test_n_features_to_select_stopping_criterionrX   J   s   ( bKDA
C
##C GGAMq!J
))


"CCaggaj 12SQU9V5WWXiiq#**-../BJJ?	
G 

4c.G.G(H#IJ		*a@I$%5%7!DIIKN"#3#5zKPPRL$%5%7JOOQN&'7'99ANSSU)))I-#555/C777-#555 /C777r8   zn_features_to_select, expected))g?r&   )g      ?r*   )g      ?r   c                     [        SS9u  p4[        [        5       UU SS9nUR                  X45        UR                  U:X  d   eg )Nr*   r   r-   r.   )r   r	   r
   r   r5   )r#   r   expectedr   r   r    s         r!   test_n_features_to_select_floatr[      sJ     b)DA
#1	C GGAM$$000r8   seedr*   z0n_features_to_select, expected_selected_featuresr-   r&   c                    [         R                  R                  U 5      nSnUR                  US5      nSUS S 2S4   -  SUS S 2S4   -  -
  n[	        [        5       UUSS9nUR                  Xg5        [        UR                  SS9U5        g )	Nd      r   r*   r-   r.   Tr0   )	rC   rD   rE   randnr	   r
   r   r   r3   )	r\   r#   r   expected_selected_featuresrO   	n_samplesr   r   r    s	            r!   test_sanityrc      s     ))


%CI		)QA	AadGb1QT7l"A
#1	C GGAMst46PQr8   csr_containerc                     [        SS9u  pU " U5      n[        [        5       SSS9nUR                  X5        UR	                  U5        g )Nr*   r   r(   r-   r   r/   )r   r	   r
   r   r6   )rd   r   r   r    s       r!   test_sparse_supportrg      sG     b)DAaA
#AC GGAMMM!r8   c                     [         R                  R                  S5      n Su  p[        XSS9u  p4U R	                  SSX4[
        S9n[         R                  X5'   [        [        5       SSS9nUR                  X45        UR                  U5        [        R                  " [        SS	9   [        [        5       SSS9R                  X45        S S S 5        g ! , (       d  f       g = f)
Nr   )(      r,   r-   )sizedtyper(   rf   zInput X contains NaNr   )rC   rD   rE   r   randintboolnanr	   r   r   r6   r   r   r   r
   )rO   rb   r   r   r   nan_maskr    s          r!   test_nan_supportrr      s     ))


"C!I9qADA{{1ay&=T{JH&&AK
#%'fC GGAMMM!	z)?	@!V	

#a)	 
A	@	@s   '#C
C!c                  H   Su  p[        XSS9u  p#[        [        5       [        5       5      n[	        USSS9nUR                  X#5        UR                  U5        [	        [        5       SSS9n[        [        5       U5      nUR                  X#5        UR                  U5        g )N)r@   r_   r   rk   r(   r-   rf   )r   r   r   r
   r	   r   r6   )rb   r   r   r   piper    s         r!   test_pipeline_supportru      s     "I9qADA )+;+=>D
#Dv!
LCGGAMMM! $AC )3/DHHQNNN1r8   )r-   r_   c                     [        SS9u  p[        [        SS9U S9nUR                  U5        UR	                  U5      R
                  S   U :X  d   eg )Nrj   r   r&   )n_initr   )r   r	   r   r   r6   r4   )r   r   r   r    s       r!   test_unsupervised_model_fitrx      sU    
 #DA
#a1C GGAJ==!!!$(<<<<r8   r   no_validationy              ?gX@r_   c                     [        SS9u  p[        [        5       SS9n[        R                  " [
        [        45         UR                  X5        S S S 5        g ! , (       d  f       g = f)N   r   r_   r   )r   r	   r   r   r   	TypeErrorr   r   )r   r   clustersr    s       r!   test_no_y_validation_model_fitr~     sL     *KA
#C
 
	:.	/ 
0	/	/s   A
A'c                      [        SSS9u  p[        [        5       SSSS9n[        R                  " [
        SS	9   UR                  X5        S
S
S
5        g
! , (       d  f       g
= f)z?Check that we raise an error when tol<0 and direction='forward'r*   r   r+   r(   r$   MbPr   r#   r<   ztol must be strictly positiver   Nr   )r   r   r    s      r!   test_forward_neg_tol_errorr     sR    bq9DA
##	C 
z)H	I 
J	I	Is   A
A#c                  n   [        SSS9u  p[        5       nUR                  X5      R                  X5      n[	        USSSS9nUR                  X5      nUR                  XQ5      R                  XQ5      nSUR                  5       R                  5       s=:  a  U R                  S   :  d   e   eXc:  d   eg	)
zXCheck that SequentialFeatureSelector works negative tol

non-regression test for #25525
r*   r   r+   r(   r%   r   r   r&   N)	r   r
   r   scorer	   fit_transformr3   sumr4   )r   r   lrinitial_scorer    Xr	new_scores          r!   test_backward_neg_tolr     s    
 bq9DA		BFF1L&&q,M
#
#	C 
		1	 Br##B*Is $$&333333$$$r8   c                      [        SS9u  p[        R                  " U[        S9nSX!R                  S-  S& [        5       nUR                  XUS9n[        SS	9n[        USUS
9nUR                  X5        g)zTCheck that no exception raised when cv is generator

non-regression test for #25957
r   rk   )rm   r&   r-   N)groupsr   )n_neighborsrf   )
r   rC   
zeros_likeintrl   r   splitr   r	   r   )r   r   r   r/   splitskncr    s          r!   test_cv_generator_supportr   3  so    
 A.DA]]1C(FF66Q;=		BXXa6X*F
1
-C
#CaF
KCGGAMr8   c                      [        SS9u  p[        5       n[        US9n[        R                  " [
        SS9   UR                  X[        R                  " U5      S9  S S S 5        g ! , (       d  f       g = f)N*   rk   )	estimatorzis only supported ifr   )sample_weight)	r   r
   r	   r   r   r   r   rC   	ones_like)r   r   estr    s       r!   /test_fit_rejects_params_with_no_routing_enabledr   F  sT    B/DA

C
#c
2C	z)?	@BLLO4 
A	@	@s   %A&&
A4)/numpyrC   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parametrizer7   r>   rX   r[   rH   rc   rg   rr   ru   rx   rp   r~   r   r   r   r    r8   r!   <module>r      s      , " M M : ? 1 E 2 * 0 . &=>/1BC= D ?=* &=>O ?O2 &=>:8 ?:8z &=>$
1 ?
1 r+&=>6	
QF	
QCR ? ,R( .9	 :	*, /8
= 9
= D"&&!DE
 F
%,&5r8   