
    -ib                     x   S r SSKrSSKJr  SSKrSSKrSSKJr  SSK	J
r
JrJr  SSKJrJrJr  SSKJr  SSKJrJrJr  SS	KJrJrJr  SS
KJr  SSKJrJr  SSK J!r!  SSK"J#r#J$r$  SSK%J&r&J'r'J(r(  SSK)J*r*J+r+  SSK,J-r-  SSK.J/r/  SSK0J1r1J2r2J3r3  SSK4J5r5  SSK6J7r7  SSK8J9r9   " S S\\5      r:S r;\Rx                  R{                  S\95      S 5       r>S r?S r@S rA\Rx                  R{                  S\95      S 5       rBS rCS  rDS! rES" rFS# rGS$ rHS% rIS& rJ\Rx                  R{                  S'\" S(5      S(/5      \Rx                  R{                  S)\S*4\S+4/5      S, 5       5       rK\Rx                  R{                  S-S.\L4S/\M4S0 \M4/5      \Rx                  R{                  S1\\/5      S2 5       5       rN\Rx                  R{                  S3SS*/5      S4 5       rOS5 rPS6 rQ\Rx                  R{                  / S7QS8S+S8\R                  " / S9Q5      /S8S*S8\R                  " / S:Q5      /S8S+S;\R                  " / S<Q5      /S8S*S;\R                  " / S=Q5      /S8S+S>\R                  " S8S+/5      /S8S*S>\R                  " / S?Q5      /S8S+S+\R                  " S8S+/5      /S8S*S+\R                  " S8S*/5      /S+S+S;\R                  " S+/5      /S+S*S8\R                  " S+S*/5      /S+S*S;\R                  " S+S*/5      //5      S@ 5       rS\Rx                  R{                  SA\\/5      SB 5       rT\Rx                  R{                  SA\\/5      SC 5       rU\Rx                  R{                  SA\\/5      \Rx                  R{                  SD\\\/5      SE 5       5       rVSF rW\Rx                  R{                  SG\SH4\SI4/5      SJ 5       rXSK rYSL rZSM r[g)Nz'
Testing Recursive feature elimination
    N)
attrgetter)parallel_backend)assert_allcloseassert_array_almost_equalassert_array_equal)BaseEstimatorClassifierMixinis_classifier)TransformedTargetRegressor)CCAPLSCanonicalPLSRegression)	load_irismake_classificationmake_friedman1)RandomForestClassifier)RFERFECV)SimpleImputer)LinearRegressionLogisticRegression)
get_scorermake_scorerzero_one_loss)
GroupKFoldcross_val_score)make_pipeline)StandardScaler)SVCSVR	LinearSVR)check_random_state)ignore_warnings)CSR_CONTAINERSc                   h   ^  \ rS rSrSrSS jrS rS r\r\r	\r
SS jrSS jrS rU 4S	 jrS
rU =r$ )MockClassifier   z8
Dummy classifier to test recursive feature elimination
c                     Xl         g N	foo_param)selfr+   s     [/var/www/html/venv/lib/python3.13/site-packages/sklearn/feature_selection/tests/test_rfe.py__init__MockClassifier.__init__$   s    "    c                     [        U5      [        U5      :X  d   e[        R                  " UR                  S   [        R                  S9U l        [        [        U5      5      U l        U $ )N   )dtype)	lennponesshapefloat64coef_sortedsetclasses_r,   Xys      r-   fitMockClassifier.fit'   sJ    1vQWWQWWQZrzz:
s1vr0   c                 H    [         R                  " UR                  S   5      $ )Nr   )r5   r6   r7   )r,   Ts     r-   predictMockClassifier.predict-   s    wwqwwqz""r0   c                     g)Ng         r=   s      r-   scoreMockClassifier.score4       r0   c                     SU R                   0$ )Nr+   r*   )r,   deeps     r-   
get_paramsMockClassifier.get_params7   s    T^^,,r0   c                     U $ r)   rG   )r,   paramss     r-   
set_paramsMockClassifier.set_params:   s    r0   c                 F   > [         TU ]  5       nSUR                  l        U$ )NT)super__sklearn_tags__
input_tags	allow_nan)r,   tags	__class__s     r-   rU   MockClassifier.__sklearn_tags__=   s!    w')$(!r0   )r<   r9   r+   )r   )NN)T)__name__
__module____qualname____firstlineno____doc__r.   r@   rD   predict_probadecision_function	transformrH   rM   rQ   rU   __static_attributes____classcell__)rY   s   @r-   r&   r&      sB    ## MI- r0   r&   c                      [        S5      n [        5       n[        R                  UR                  U R                  [        UR                  5      S4S94   nUR                  n[        SU SS9n[        USSS	9nUR                  X#5        [        UR                  5      UR                  S
   :X  d   e[        SS9n[        USSS	9nUR                  X#5        [        UR                  5       UR                  5       5        g )Nr      size      )n_estimatorsrandom_state	max_depth   皙?	estimatorn_features_to_selectstepr2   linearkernel)r"   r   r5   c_datanormalr4   targetr   r   r@   ranking_r7   r   r   get_support)	generatoririsr>   r?   clfrfeclf_svcrfe_svcs           r-   test_rfe_features_importancer   C   s    "1%I;D 	dii))DII/B)CCDAA
 byTU
VC
!#
>CGGAMs||
***"GG!#FGKK s('*=*=*?@r0   csr_containerc                    [        S5      n[        5       n[        R                  UR                  UR                  [        UR                  5      S4S94   nU " U5      nUR                  n[        SS9n[        USSS9nUR                  X55        UR                  U5      nUR                  X5        [        UR                  5      UR                  S	   :X  d   e[        SS9n	[        U	SSS9n
U
R                  XE5        U
R                  U5      nUR                  UR                  R                  :X  d   e[        US S
 UR                  S S
 5        [        UR                  U5      UR                  UR                  5      5        UR!                  X55      UR!                  UR                  UR                  5      :X  d   e[        XR#                  5       5        g )Nr   rf   rg   rt   ru   rn   ro   rp   r2   
   )r"   r   r5   rw   rx   ry   r4   rz   r   r   r@   rb   r{   r7   r   rD   rH   toarray)r   r}   r~   r>   X_sparser?   r   r   X_r
clf_sparse
rfe_sparse
X_r_sparses               r-   test_rfer   X   sz   "1%I;D 	dii))DII/B)CCDAQHA X
C
!#
>CGGAM
--
CGGCOs||
*** H%JzLJNN8%%h/J99		'''c#2h		#27ckk!nckk$)).DE99Q?cii		4;;????c#5#5#78r0   c                      " S S[         [        5      n [        SS9u  p[        R                  " [
        SS9   [        U " 5       S9R                  X5        S S S 5        [        R                  " [
        SS9   [        U " 5       S9R                  XS	S
9R                  X5        S S S 5        [        U " 5       S9R                  XS	S
9R                  XS	S
9  g ! , (       d  f       N= f! , (       d  f       NJ= f)Nc                   (    \ rS rSrSS jrSS jrSrg)0test_RFE_fit_score_params.<locals>.TestEstimator{   Nc                     Uc  [        S5      e[        SS9R                  X5      U l        U R                  R                  U l        U $ )Nfit: prop cannot be Nonert   ru   )
ValueErrorr   r@   svc_r9   r,   r>   r?   props       r-   r@   4test_RFE_fit_score_params.<locals>.TestEstimator.fit|   s>    | !;<<8,006DIDJKr0   c                 T    Uc  [        S5      eU R                  R                  X5      $ )Nscore: prop cannot be None)r   r   rH   r   s       r-   rH   6test_RFE_fit_score_params.<locals>.TestEstimator.score   s&    | !=>>99??1((r0   )r9   r   r)   )r[   r\   r]   r^   r@   rH   rc   rG   r0   r-   TestEstimatorr   {   s    		)r0   r   T
return_X_yr   matchrq   r   foo)r   )	r   r	   r   pytestraisesr   r   r@   rH   )r   r>   r?   s      r-   test_RFE_fit_score_paramsr   x   s    ) ) %DA	z)C	Dmo&**10 
E	z)E	Fmo&**1e*<BB1H 
G -/"&&q%&8>>q%>P 
E	D	F	Fs   C8,C(
C%(
C6c                     [        S5      n [        5       n[        R                  UR                  U R                  [        UR                  5      S4S94   nUR                  n[        SS9n[        USSS9nUR                  X#5        [        US	SS9nUR                  X#5        [        UR                  UR                  5        [        UR                  UR                  5        g )
Nr   rf   rg   rt   ru   rn   ro   rp   g?)r"   r   r5   rw   rx   ry   r4   rz   r   r   r@   r   r{   support_)r}   r~   r>   r?   r   rfe_numrfe_percs          r-   test_rfe_percent_n_featuresr      s    "1%I;D 	dii))DII/B)CCDAA
X
CCacBGKKSsEHLLx(('*:*:;x(('*:*:;r0   c                     [        S5      n [        5       n[        R                  UR                  U R                  [        UR                  5      S4S94   nUR                  n[        5       n[        USSS9nUR                  X#5        UR                  U5      nUR                  Xc5        [        UR                  5      UR                  S   :X  d   eUR                  UR                  R                  :X  d   eg )Nr   rf   rg   rn   ro   rp   r2   )r"   r   r5   rw   rx   ry   r4   rz   r&   r   r@   rb   r{   r7   )r}   r~   r>   r?   r   r   r   s          r-   test_rfe_mockclassifierr      s    "1%I;D 	dii))DII/B)CCDAA 
C
!#
>CGGAM
--
CGGCOs||
***99		'''r0   c                    [        S5      n[        5       n[        R                  UR                  UR                  [        UR                  5      S4S94   n[        UR                  5      n[        [        SS9SS9nUR                  X45        UR                  R                  5        H.  n[        UR                  U   5      UR                  S   :X  a  M.   e   [        UR                  5      UR                  S   :X  d   eUR!                  U5      n[#        XrR                  5        [        [        SS9SS9nU " U5      n	UR                  X5        UR!                  U	5      n
[#        U
R%                  5       UR                  5        ['        [(        SS	9n[        [        SS9SUS
9n[+        UR                  5      " X45        UR!                  U5      n[#        XrR                  5        [-        S5      n[        [        SS9SUS
9nUR                  X45        UR!                  U5      n[#        XrR                  5        S n[        [        SS9SUS
9nUR                  X45        UR.                  S:X  d   e[        [        SS9SS9nUR                  X45        UR                  R                  5        H!  n[        UR                  U   5      S:X  a  M!   e   [        UR                  5      UR                  S   :X  d   eUR!                  U5      n[#        XrR                  5        [        [        SS9SS9nU " U5      n	UR                  X5        UR!                  U	5      n
[#        U
R%                  5       UR                  5        [        [        SS9SS9nU " U5      n	UR                  X5        UR!                  U	5      n
[#        U
R%                  5       UR                  5        g )Nr   rf   rg   rt   ru   r2   rq   rs   F)greater_is_better)rq   rs   scoringaccuracyc                     g)Ng      ?rG   )rq   r>   r?   s      r-   test_scorertest_rfecv.<locals>.test_scorer   rJ   r0   rj   皙?)r"   r   r5   rw   rx   ry   r4   listrz   r   r   r@   cv_results_keysr7   r{   rb   r   r   r   r   r#   r   n_features_)r   r}   r~   r>   r?   rfecvkeyr   rfecv_sparser   r   r   scorerr   s                 r-   
test_rfecvr      s@   "1%I;D 	dii))DII/B)CCDAT[[A Cx0q9E	IIaO   %%'5$$S)*aggaj888 ( u~~!''!*,,,
//!
C sII& 3h#7a@LQHX!''1Jz))+TYY7 -5AGCx0q'JEEIIq$
//!
CsII& 
#FCx0q&IE	IIaO
//!
CsII& Cx0q+NE	IIaO !!! Cx0q9E	IIaO  %%'5$$S)*a/// ( u~~!''!*,,,
//!
CsII&3h#7a@LQHX!''1Jz))+TYY7 3h#7cBLQHX!''1Jz))+TYY7r0   c                     [        S5      n [        5       n[        R                  UR                  U R                  [        UR                  5      S4S94   n[        UR                  5      n[        [        5       SS9nUR                  X#5        UR                  R                  5        H.  n[        UR                  U   5      UR                  S   :X  a  M.   e   [        UR                  5      UR                  S   :X  d   eg )Nr   rf   rg   r2   r   )r"   r   r5   rw   rx   ry   r4   r   rz   r   r&   r@   r   r   r7   r{   )r}   r~   r>   r?   r   r   s         r-   test_rfecv_mockclassifierr   	  s    "1%I;D
dii))DII/B)CCDAT[[A N,15E	IIaO   %%'5$$S)*aggaj888 ( u~~!''!*,,,r0   c                     SS K n SSKJn  U" 5       U l        [	        S5      n[        5       n[        R                  UR                  UR                  [        UR                  5      S4S94   n[        UR                  5      n[        [        SS9SSS9nUR                  XE5        U R                  nUR!                  S5        [        UR#                  5       5      S:  d   eg )	Nr   )StringIOrf   rg   rt   ru   r2   )rq   rs   verbose)sysior   stdoutr"   r   r5   rw   rx   ry   r4   r   rz   r   r   r@   seekreadline)r   r   r}   r~   r>   r?   r   verbose_outputs           r-   test_rfecv_verbose_outputr     s    CJ"1%I;D
dii))DII/B)CCDAT[[ACx0q!DE	IIaOZZN~&&()A---r0   c                    [        U 5      n[        5       n[        R                  UR                  UR                  [        UR                  5      S4S94   n[        UR                  5      nSS/SS/SS/4 H  u  pV[        [        5       UUS9nUR                  X45        [        R                  " UR                  S   U-
  U-  5      S-   nUR                  R                  5        H!  n	[        UR                  U	   5      U:X  a  M!   e   [        UR                   5      UR                  S   :X  d   eUR"                  U:  a  M   e   g )Nrf   rg   rj   r2      rq   rs   min_features_to_select)r"   r   r5   rw   rx   ry   r4   r   rz   r   r&   r@   ceilr7   r   r   r{   r   )
global_random_seedr}   r~   r>   r?   rs   r   r   	score_lenr   s
             r-   test_rfecv_cv_results_sizer   .  s-   "#56I;D
dii))DII/B)CCDAT[[A +,Q!Q!Q(@$$&#9

 			!GGQWWQZ*@@DHIAM	$$))+Cu((-.);;; , 5>>"aggaj000  $:::: )Ar0   c                      [        [        SS95      n [        U 5      (       d   e[        5       n[	        XR
                  UR                  5      nUR                  5       S:  d   eg )Nrt   ru   gffffff?)r   r   r
   r   r   rx   rz   min)r   r~   rH   s      r-   test_rfe_estimator_tagsr   G  sQ    
c"
#C;DCDKK8E99;r0   c                    Sn[        SXS9u  p#UR                  u  pA[        SS9n[        USS9nUR	                  X#5      nUR
                  R                  5       US-  :X  d   e[        US	S9nUR	                  X#5      nUR
                  R                  5       US-  :X  d   e[        US
S9nUR	                  X#5      nUR
                  R                  5       US-  :X  d   eg )Nr   2   	n_samples
n_featuresrl   rt   ru   g{Gz?rs   rj   r      )r   r7   r    r   r@   r   sum)r   r   r>   r?   r   rq   selectorsels           r-   test_rfe_min_stepr   P  s    JDA GGI8$I 94(H
,,q
C<<q000 94(H
,,q
C<<q000 91%H
,,q
C<<q000r0   c                    S nS nSS/nSS/nSS/n[        X4U5       H  u  pgn[        U 5      n	U	R                  SU4S9n
U	R                  S5      R	                  5       n[        [        SS	9UUS
9nUR                  X5        [        R                  " UR                  5      U" XgU5      :X  d   e[        R                  " UR                  5      U" XgU5      :X  a  M   e   SnSS/nSS/n[        X55       H  u  ph[        U 5      n	U	R                  SU4S9n
U	R                  S5      R	                  5       n[        [        SS	9US9nUR                  X5        UR                  R                  5        HM  n[        UR                  U   5      U" XgU5      :X  d   e[        UR                  U   5      U" XgU5      :X  a  MM   e   M     g )Nc                 "    SX-   U-
  S-
  U-  -   $ Nr2   rG   r   rr   rs   s      r-   formula14test_number_of_subsets_of_features.<locals>.formula1q  s     Z&)==AdJKKr0   c                 P    S[         R                  " X-
  [        U5      -  5      -   $ r   )r5   r   floatr   s      r-   formula24test_number_of_subsets_of_features.<locals>.formula2t  s"    277J=tLMMMr0      r   rj   d   rg   rt   ru   rp   r2   r   r   )zipr"   ry   randroundr   r   r@   r5   maxr{   r   r   r   r4   )r   r   r   n_features_listn_features_to_select_list	step_listr   rr   rs   r}   r>   r?   r   r   r   s                  r-   "test_number_of_subsets_of_featuresr   h  s   LN 2hO!"AAI25I3.
$ ''9:	3
"34NN3%%'*!5

 	vvcll#x
RV'WWWWvvcll#x
RV'WWWW32 2hOAI;
&'9:	3
"34NN3%%'8 44@		!$$))+Cu((-.($3    u((-.($3   	 , <r0   c                    [        U 5      n[        5       n[        R                  UR                  UR                  [        UR                  5      S4S94   nUR                  n[        [        SS9S9nUR                  X45        UR                  nUR                  nUR                  SS9  UR                  X45        [        UR                  U5        UR                  5       UR                  R                  5       :X  d   eUR                  5        H.  nXx   [         R"                  " UR                  U   5      :X  a  M.   e   g )Nrf   rg   rt   ru   r   rj   )n_jobs)r"   r   r5   rw   rx   ry   r4   rz   r   r   r@   r{   r   rQ   r   r   r   approx)	r   r}   r~   r>   r?   r   rfecv_rankingrfecv_cv_results_r   s	            r-   test_rfe_cv_n_jobsr     s   "#56I;D
dii))DII/B)CCDAACx01E	IIaONNM))	A	IIaOennm<!!#u'8'8'='='???? %%' %u7H7H7M)NNNN (r0   c            	         [        S5      n [        5       nSn[        R                  " [        R                  " SU[        UR                  5      5      5      nUR                  nUR                  S:  R                  [        5      n[        [        U S9SS[        SS9S9nUR                  XEUS	9  UR                  S:  d   eg )
Nr   rn   rl   r2   r   rj   )n_splits)rq   rs   r   cv)groups)r"   r   r5   floorlinspacer4   rz   rx   astypeintr   r   r   r@   r   )r}   r~   number_groupsr   r>   r?   
est_groupss          r-   test_rfe_cv_groupsr    s    "1%I;DMXXbkk!]C4DEFF		A	q  %A(i@q!	J NN1N'!!A%%%r0   importance_getterzregressor_.coef_zselector, expected_n_featuresr   rn   c                     [        SSSS9u  p4[        SS9n[        U[        R                  [        R
                  S9nU" X`S9nUR                  X45      nUR                  R                  5       U:X  d   eg )Nr   r   r   r   r   	regressorfuncinverse_funcr  )	r   r!   r   r5   logexpr@   r   r   )r  r   expected_n_featuresr>   r?   rq   log_estimatorr   s           r-   test_rfe_wrapped_estimatorr    sm     B2AFDAq)I."&&rvvM KH
,,q
C<<!4444r0   zimportance_getter, err_typeautorandomc                     U R                   $ r)   )
importance)xs    r-   <lambda>r    s    1<<r0   Selectorc                    [        SSSS9u  p4[        5       n[        U[        R                  [        R
                  S9n[        R                  " U5         U" X`S9nUR                  X45        S S S 5        g ! , (       d  f       g = f)Nr   r   *   r   r	  r  )	r   r!   r   r5   r  r  r   r   r@   )r  err_typer  r>   r?   rq   r  models           r-   %test_rfe_importance_getter_validationr    sc     B2BGDAI."&&rvvM 
x	 L		! 
!	 	 s   A66
Br   c                 $   [        5       nUR                  nUR                  n[        R                  US   S'   [        R
                  US   S'   [        5       nU b
  [        X@S9nO	[        US9nUR                  X#5        UR                  U5        g )Nr   r2   )rq   r   r   )r   rx   rz   r5   naninfr&   r   r   r@   rb   )r   r~   r>   r?   r   r   s         r-   test_rfe_allow_nan_inf_in_xr"    sw    ;D		AA ffAaDGffAaDG

C	~c)C GGAMMM!r0   c                      [        [        5       [        5       5      n [        SS9u  p[	        U SSS9nUR                  X5        UR                  U5      R                  S   S:X  d   eg )NTr   rj   $named_steps.logisticregression.coef_)rr   r  r2   )r   r   r   r   r   r@   rb   r7   )pipelinerx   r?   sfms       r-   test_w_pipeline_2d_coef_r'    sd    ^-/A/CDH4(GD
@C GGD==$$Q'1,,,r0   c                    [        U 5      n[        5       n[        R                  UR                  UR                  [        UR                  5      S4S94   nUR                  n[        [        SS9S9nUR                  X45        UR                  R                  5        Vs/ s H#  n[        R                  " SU5      (       d  M!  UPM%     nn[        R                  " U Vs/ s H  oeR                  U   PM     sn5      n[        R                   " USS9n	[        R"                  " USS9n
[%        UR                  S	   U	5        [%        UR                  S
   U
5        g s  snf s  snf )Nrf   rg   rt   ru   r   zsplit\d+_test_scorer   axismean_test_scorestd_test_score)r"   r   r5   rw   rx   ry   r4   rz   r   r   r@   r   r   researchasarraymeanstdr   )r   r}   r~   r>   r?   r   r   
split_keys	cv_scoresexpected_meanexpected_stds              r-   test_rfecv_std_and_meanr6    s(   "#56I;D
dii))DII/B)CCDAACx01E	IIaO $$))++C99+S1 	+  
 

jIjs--c2jIJIGGIA.M66)!,LE%%&78-HE%%&67F
 Js     EE E!)r   r   rs   cv_results_n_featuresr2   )r2   rj   r   rn   )r2   rj   r   rn   r   rj   )r2   rj   rn   )r2   r   r   r   )r2   rj   r   c                    ^ [        SXSS9u  pE[        [        SS9UU S9mTR                  XE5        [	        TR
                  S   U5        [        U4S jTR
                  R                  5        5       5      (       d   eg )	Nri   r   )r   r   n_informativen_redundantrt   ru   r   r   c              3   l   >#    U  H)  n[        U5      [        TR                  S    5      :H  v   M+     g7f)r   N)r4   r   ).0valuer   s     r-   	<genexpr>3test_rfecv_cv_results_n_features.<locals>.<genexpr>N  s1      /E 	E
c%++L9::/s   14)r   r   r   r@   r   r   allvalues)r   r   rs   r7  r>   r?   r   s         @r-    test_rfecv_cv_results_n_featuresrB  .  s    , STDA X&5E
 
IIaOu((68MN &&--/    r0   ClsRFEc                     [         R                  R                  SS9n[         R                  R                  SSS9n[	        SS9nU " U5      nUR                  X5        g )N)r   r   rg   rj   )r   rj   r   )rk   )r5   r  ry   randintr   r@   )rC  r>   r?   r   rfe_tests        r-   test_multioutputrG  T  sQ    
		g&A
		!'*A
 a
0Cc{HLLr0   c                     [        SS9u  p[        R                  US'   [        [	        5       [        5       [        5       5      nU " USS9nUR                  X5        g)zXCheck that RFE works with pipeline that accept nans.

Non-regression test for gh-21743.
Tr   )r   r   r$  )rq   r  N)r   r5   r   r   r   r   r   r@   )rC  r>   r?   pipefss        r-   test_pipeline_with_nansrK  ]  sW     %DAffAdGD 
@
B FF1Lr0   PLSEstimatorc                     [        SSSS9u  p#U" SS9nU " USS9R                  X#5      nUR                  X#5      S:  d   eg	)
zCheck the behaviour of RFE with PLS estimators.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/12410
r   r   r   r   r2   )n_componentsr   g      ?N)r   r@   rH   )rC  rL  r>   r?   rq   r   s         r-   test_rfe_plsrO  s  sL     B2AFDA!,Iia(,,Q2H>>!#%%%r0   c                     [        5       n [        [        5       S9nSnSn[        R                  " [
        US9 nUR                  U R                  U R                  5      R                  U R                  5        SSS5        [        WR                  R                  [
        5      (       d   eU[        UR                  R                  5      ;   d   eg! , (       d  f       N_= f)zCheck that we raise the proper AttributeError when the estimator
does not implement the `decision_function` method, which is decorated with
`available_if`.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/28108
r   z/This 'RFE' has no attribute 'decision_function'z>'LinearRegression' object has no attribute 'decision_function'r   N)r   r   r   r   r   AttributeErrorr@   rx   rz   ra   
isinstancer=  	__cause__str)r~   r   	outer_msg	inner_msg	exec_infos        r-   "test_rfe_estimator_attribute_errorrX    s     ;D (*
+CAIPI	~Y	79		4;;'99$))D 
8ioo//@@@@IOO556666 
8	7s   A C
C zClsRFE, paramrr   r   c                     [        SSS9u  p#[        R                  " [        U S3S9   U " S	S[	        5       0US0D6nUR                  X#5        SSS5        g! , (       d  f       g= f)
zCheck if the correct warning is raised when trying to initialize a RFE
object with a n_features_to_select attribute larger than the number of
features present in the X variable that is passed to the fit method
ri   r   )r   rl   z=21 > n_features=20r   rq      NrG   )r   r   warnsUserWarningr   r@   )rC  paramr>   r?   clsrfes        r-   %test_rfe_n_features_to_select_warningr_    s]     "1=DA	kE72E)F	G F"4"6F5"+F

1	 
H	G	Gs   &A
A&c                  f   [        SS9u  pU R                  S   n[        R                  " U5      nSUSUS-  & [        R                  " X SUS-   /SS9n[        R                  " XSUS-   /5      n[        SS9n[        USS	9nUR                  XUS
9  [        USS	9nUR                  XE5        [        UR                  UR                  5        [        USS	9n	[        R                  " U5      n
U	R                  XU
S
9  [        R                  " U	R                  UR                  5      (       a   eg)z4Test that `RFE` works correctly with sample weights.r   r   rj   Nr)  rt   ru   ro   r   )sample_weight)r   r7   r5   	ones_likeconcatenater   r   r@   r   r{   array_equal)r>   r?   r   ra  X2y2rq   rfe_swr   rfe_sw_2sample_weight_2s              r-   test_rfe_with_sample_weightrj    s   A.DA
I LLOM&'M"IN# 
.	Q/0q	9B	.	Q/0	1B8$I93/F
JJq=J1
	
,CGGBOv5 YS1Hll1oOLL_L5~~h//>>>>>r0   c                    [        U S9u  p[        5       n[        USS9nUR                  X5        UR                  n[        S5         UR                  X5        S S S 5        [        XTR                  5        g ! , (       d  f       N$= f)Nr   rj   )rq   r   	threading)r   r   r   r@   r{   r   r   )r   r>   r?   r   r   ranking_refs         r-   &test_rfe_with_joblib_threading_backendrn    sl    ,>?DA

C
C
 GGAM,,K	+	& 
' {LL1 
'	&s   A88
Bc                    [        U S9u  p[        5       n[        USSS9nUR                  X5        [	        UR
                  S   5      [	        UR
                  S   5      :X  d   e[	        UR
                  S   5      [	        UR
                  S   5      :X  d   e[	        UR
                  S	   5      [	        UR
                  S
   5      :X  d   eg)zl
Test that the results of RFECV are consistent across the different folds
in terms of length of the arrays.
r   rj   r   )rq   r   r   split1_test_scoresplit2_test_scoresplit1_supportsplit2_supportsplit1_rankingsplit2_rankingN)r   r   r   r@   r4   r   )r   r>   r?   r   r   s        r-   test_results_per_cv_in_rfecvrv    s    
 ,>?DA

CE 
IIaOu  !456#-.;    u  !123s*+8    u  !123s*+8   r0   )\r_   r-  operatorr   numpyr5   r   joblibr   numpy.testingr   r   r   sklearn.baser   r	   r
   sklearn.composer   sklearn.cross_decompositionr   r   r   sklearn.datasetsr   r   r   sklearn.ensembler   sklearn.feature_selectionr   r   sklearn.imputer   sklearn.linear_modelr   r   sklearn.metricsr   r   r   sklearn.model_selectionr   r   sklearn.pipeliner   sklearn.preprocessingr   sklearn.svmr   r    r!   sklearn.utilsr"   sklearn.utils._testingr#   sklearn.utils.fixesr$   r&   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r  r  r   rQ  r  r"  r'  r6  arrayrB  rG  rK  rO  rX  r_  rj  rn  rv  rG   r0   r-   <module>r     s   
    # X X F F 6 H H K K 3 0 ( E B B ? * 0 + + , 2 .!_m !HA* .99 :9>Q2<(($ .9N8 :N8b-".(;210>BO*&$ *%78:LM 8C8eQZ:PQ5 R5 !		>"	0 c5\2	 3	 ay) *$-G* M	
Aq"((<()	
Aq"((?+,	
Aq"((9%&	
Aq"((9%&	
Aq"((Aq6"#	
Aq"((9%&	
Aq"((Aq6"#	
Aq"((Aq6"#	
Aq"((A3- 	
Aq"((Aq6"#	
Aq"((Aq6"# ! , C<0 1 C<0 1* C<0#|])KL	& M 1	&7, s23e=U5VW?B2$r0   