Ë
    ÷Q(hš*  ã                   ó"  — 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„ Zej:                  j=                  dd«      ej:                  j=                  dd«      d„ «       «       Zej:                  j=                  dd«      d„ «       Z ej:                  j=                  dd«      d„ «       Z!ej:                  j=                  dd«      ej:                  j=                  dd«      d„ «       «       Z"ej:                  j=                  d e#d«      «      ej:                  j=                  dd«      ej:                  j=                  ddd dgfddgfg«      d„ «       «       «       Z$ej:                  j=                  de«      d„ «       Z%d „ Z&d!„ Z'ej:                  j=                  dd"«      d#„ «       Z(ej:                  j=                  d$d%d&d'ejR                  d(f«      d)„ «       Z*d*„ Z+d+„ Z,d,„ Z-d-„ Z.y).é    N)Úassert_array_equal)ÚKMeans)Ú
make_blobsÚmake_classificationÚmake_regression)ÚHistGradientBoostingRegressor)ÚSequentialFeatureSelector)ÚLinearRegression)ÚLeaveOneGroupOutÚcross_val_score)ÚKNeighborsClassifier)Úmake_pipeline)ÚStandardScaler)ÚCSR_CONTAINERSc                  óÔ   — d} t        | ¬«      \  }}t        t        «       | ¬«      }t        j                  t
        d¬«      5  |j                  ||«       d d d «       y # 1 sw Y   y xY w)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       úm/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/feature_selection/tests/test_sequential.pyÚtest_bad_n_features_to_selectr"      sV   € Ø€JÜ jÔ1�D€A€qÜ
#Ô$4Ó$6ÈZÔ
X€CÜ	�‰”zÐ)TÔ	Uñ Ø�‰��1Œ÷÷ ñ ús   ÁAÁA'Ú	direction)ÚforwardÚbackwardr   )é   r   é	   Úautoc                 ó>  — d}t        |d¬«      \  }}t        t        «       || d¬«      }|j                  ||«       |dk(  r|dz  }|j	                  d¬«      j
                  d   |k(  sJ ‚|j                  |k(  sJ ‚|j                  |«      j
                  d	   |k(  sJ ‚y )
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Ü j¸qÔA�D€A€qÜ
#ÜÓØ1ØØô	€Cð ‡G�GˆAˆq„Mà˜vÒ%Ø)¨Q™Ðà�?‰? 4ˆ?Ó(×.Ñ.¨qÑ1Ð5IÒIÐIÐIØ×$Ñ$Ð(<Ò<Ð<Ð<Ø�=‰=˜Ó×!Ñ! !Ñ$Ð(<Ò<Ð<Ñ<ó    c                 ó–  — d}d}t        |d¬«      \  }}t        t        «       d|| d¬«      }|j                  ||«       |dz
  }|j	                  d	¬
«      j
                  d   |k  sJ ‚|j                  |k  sJ ‚|j                  |«      j
                  d   |k  sJ ‚|j	                  d	¬
«      j
                  d   |j                  k(  sJ ‚y)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&   Tr0   Nr2   )r#   r   r<   r   r   r    Úmax_features_to_selects          r!   Útest_n_features_to_select_autor>   0   sÚ   € ð €JØ
€CÜ j¸qÔA�D€A€qÜ
#ÜÓØ#ØØØô€Cð ‡G�GˆAˆq„Mà'¨!™^Ðà�?‰? 4ˆ?Ó(×.Ñ.¨qÑ1Ð5KÒKÐKÐKØ×$Ñ$Ð(>Ò>Ð>Ð>Ø�=‰=˜Ó×!Ñ! !Ñ$Ð(>Ò>Ð>Ð>Ø�?‰? 4ˆ?Ó(×.Ñ.¨qÑ1°S×5NÑ5NÒNÐNÑNr8   c                 ó
  — t        ddd¬«      \  }}d}t        t        «       d|| d¬«      }|j                  ||«       |j	                  |«      }t
        j                  j                  d«      }t        t        t        |j                  d	   «      «      t        |j                  d
¬«      «      z
  «      }t        j                  ||dd…|j                  |«      f   dd…t
        j                  f   g«      }|j                  t        t        |j                   «      «      «      }	t        j"                  ||	d	¬«      }
t%        t        «       ||d¬«      j'                  «       }t%        t        «       ||d¬«      j'                  «       }t%        t        «       ||d¬«      j'                  «       }t%        t        «       |
|d¬«      j'                  «       }||k\  sJ ‚| dk(  r||z
  |k  sJ ‚||z
  |k\  sJ ‚y||z
  |k  sJ ‚||z
  |k  sJ ‚y)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,   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¸ÈÔK�D€A€qà
€Cä
#ÜÓØ#ØØØô€Cð ‡G�GˆAˆq„MØ—‘˜qÓ!€Jä
�)‰)×
Ñ
 Ó
"€CäœC¤ a§g¡g¨a¡jÓ 1Ó2´S¸¿¹ÐQU¸Ó9VÓ5WÑWÓXÐÜ�i‰iàØŠq�#—*‘*Ð-Ó.Ð.Ñ/²´B·J±J°Ñ?ð	
ó€Gð Ÿ
™
¤4¬¨c×.GÑ.GÓ(HÓ#IÓJÐÜ—	‘	˜*Ð&7¸aÔ@€Iä$Ô%5Ó%7¸¸AÀ!ÔD×IÑIÓK€NÜ"Ô#3Ó#5°zÀ1ÈÔK×PÑPÓR€LÜ$Ô%5Ó%7¸À!ÈÔJ×OÑOÓQ€NÜ&Ô'7Ó'9¸9ÀaÈAÔ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                 ó–   — t        d¬«      \  }}t        t        «       || d¬«      }|j                  ||«       |j                  |k(  sJ ‚y )Nr*   r   r-   r.   )r   r	   r
   r   r5   )r#   r   Úexpectedr   r   r    s         r!   Útest_n_features_to_select_floatr[   ˆ   sN   € ô  bÔ)�D€A€qÜ
#ÜÓØ1ØØô	€Cð ‡G�GˆAˆq„MØ×$Ñ$¨Ò0Ð0Ñ0r8   Úseedr*   z0n_features_to_select, expected_selected_featuresr-   r&   c                 ó&  — t         j                  j                  | «      }d}|j                  |d«      }d|d d …df   z  d|d d …df   z  z
  }t	        t        «       ||d¬«      }|j                  ||«       t        |j                  d¬«      |«       y )	Néd   é   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Ø	ˆAŠa�ˆd‰G‰�b˜1šQ ˜T™7‘lÑ"€Aä
#ÜÓØ1ØØô	€Cð ‡G�GˆAˆq„MÜ�s—‘¨t�Ó4Ð6PÕQr8   Úcsr_containerc                 ó¤   — t        d¬«      \  }} | |«      }t        t        «       dd¬«      }|j                  ||«       |j	                  |«       y )Nr*   r   r(   r-   ©r   r/   )r   r	   r
   r   r6   )rd   r   r   r    s       r!   Útest_sparse_supportrg   »   sK   € ô  bÔ)�D€A€qÙ�aÓ€AÜ
#ÜÓ°¸Aô€Cð ‡G�GˆAˆq„MØ‡M�M�!Õr8   c                  óè  — t         j                  j                  d«      } d\  }}t        ||d¬«      \  }}| j	                  dd||ft
        ¬«      }t         j                  ||<   t        t        «       dd¬«      }|j                  ||«       |j                  |«       t        j                  t        d¬	«      5  t        t        «       dd¬«      j                  ||«       d d d «       y # 1 sw Y   y xY w)
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ˆzÜ˜9 j¸qÔA�D€A€qØ�{‰{˜1˜a y°*Ð&=ÄTˆ{ÓJ€HÜ—&‘&€A€h�KÜ
#Ü%Ó'¸fÈô€Cð ‡G�GˆAˆq„MØ‡M�M�!Ôä	�‰”zÐ)?Ô	@ñ ä!ÜÓ°VÀô	
ç
‰#ˆa�Œ)÷	÷ ñ ús   Â8'C(Ã(C1c                  ód  — d\  } }t        | |d¬«      \  }}t        t        «       t        «       «      }t	        |dd¬«      }|j                  ||«       |j                  |«       t	        t        «       dd¬«      }t        t        «       |«      }|j                  ||«       |j                  |«       y )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ˆzÜ˜9 j¸qÔA�D€A€qô œÓ)Ô+;Ó+=Ó>€DÜ
# D¸vÈ!Ô
L€CØ‡G�GˆAˆq„MØ‡M�M�!Ôô $ÜÓ°¸Aô€Cô œÓ)¨3Ó/€DØ‡H�HˆQ�„NØ‡N�N�1Õr8   )r-   r_   c                 ó¸   — t        d¬«      \  }}t        t        d¬«      | ¬«      }|j                  |«       |j	                  |«      j
                  d   | k(  sJ ‚y )Nrj   r   r&   )Ún_initr   )r   r	   r   r   r6   r4   )r   r   r   r    s       r!   Útest_unsupervised_model_fitrx   ó   sW   € ô
  Ô#�D€A€qÜ
#Ü�aÔØ1ô€Cð ‡G�GˆA„JØ�=‰=˜Ó×!Ñ! !Ñ$Ð(<Ò<Ð<Ñ<r8   r   Úno_validationy              ð?gš™™™™ùX@r_   c                 óØ   — t        d¬«      \  }}t        t        «       d¬«      }t        j                  t
        t        f«      5  |j                  || «       d d d «       y # 1 sw Y   y xY w)Né   r   r_   r   )r   r	   r   r   r   Ú	TypeErrorr   r   )r   r   Úclustersr    s       r!   Útest_no_y_validation_model_fitr~     sY   € ô ¨Ô*�K€A€xÜ
#Ü‹Øô€Cô
 
�‰œ	¤:Ð.Ó	/ñ Ø�‰��1Œ÷÷ ñ ús   ÁA Á A)c                  óÖ   — t        dd¬«      \  } }t        t        «       ddd¬«      }t        j                  t
        d¬	«      5  |j                  | |«       d
d
d
«       y
# 1 sw Y   y
xY w)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‚     s^   € ä b°qÔ9�D€A€qÜ
#ÜÓØ#ØØô	€Cô 
�‰”zÐ)HÔ	Iñ Ø�‰��1Œ÷÷ ñ ús   ÁAÁA(c                  ó‚  — t        dd¬«      \  } }t        «       }|j                  | |«      j                  | |«      }t	        |ddd¬«      }|j                  | |«      }|j                  ||«      j                  ||«      }d|j                  «       j                  «       cxk  r| j                  d   k  sJ ‚ J ‚||k  sJ ‚y	)
z`Check 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½   € ô
  b°qÔ9�D€A€qÜ	Ó	€BØ—F‘F˜1˜a“L×&Ñ& q¨!Ó,€Mä
#Ø
Ø#ØØô	€Cð 
×	Ñ	˜1˜aÓ	 €BØ—‘�r˜1“×#Ñ# B¨Ó*€Iàˆs�‰Ó ×$Ñ$Ó&Ô3¨¯©°©Ò3Ð3Ñ3Ð3Ð3Ø�}Ò$Ð$Ñ$r8   c                  ó  — t        d¬«      \  } }t        j                  |t        ¬«      }d||j                  dz  d t        «       }|j                  | ||¬«      }t        d¬	«      }t        |d|¬
«      }|j                  | |«       y)z\Check 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  sw   € ô
 ¨AÔ.�D€A€qä�]‰]˜1¤CÔ(€FØ€Fˆ1�6‰6�Q‰;ˆ=Ðä	Ó	€BØ�X‰X�a˜ 6ˆXÓ*€Fä
¨1Ô
-€Cä
# C¸aÀFÔ
K€CØ‡G�GˆAˆq…Mr8   c                  óü   — t        d¬«      \  } }t        «       }t        |¬«      }t        j                  t
        d¬«      5  |j                  | |t        j                  |«      ¬«       d d d «       y # 1 sw Y   y xY w)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  s`   € Ü¨BÔ/�D€A€qÜ
Ó
€CÜ
#¨cÔ
2€Cä	�‰”zÐ)?Ô	@ñ 5Ø�‰��1¤B§L¡L°£OˆÔ4÷5÷ 5ñ 5ús   Á(A2Á2A;)/Ú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ó ?ð:8ðz ‡�×Ñ˜Ð&=Ó>Ø‡�×ÑØ$ðóñ
1óó ?ð
1ð ‡�×Ñ˜¡ r£Ó+Ø‡�×Ñ˜Ð&=Ó>Ø‡�×ÑØ6à	
ˆQ�ˆFˆØ	
ˆQˆCˆðóñRóó ?ó ,ðRð( ‡�×Ñ˜¨.Ó9ñ	ó :ð	òò*ð, ‡�×ÑÐ/°Ó8ñ
=ó 9ð
=ð ‡�×Ñ˜˜°°D¸"¿&¹&À!ÐDÓEñ
ó Fð
òò%ò,ó&5r8   