Ë
    ÷Q(h¥_  ã                   ój  — d Z ddlmZ ddlZddlZddlmZ ddlm	Z	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mZmZ dd
lmZ ddlmZmZ ddlm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8  G d„ dee«      Z9d„ Z:ejv                  jy                  de8«      d„ «       Z=d„ Z>d„ Z?d„ Z@ejv                  jy                  de8«      d„ «       ZAd„ ZBd „ ZCd!„ ZDd"„ ZEd#„ ZFd$„ ZGd%„ ZHd&„ ZIejv                  jy                  d' ed(«      d(g«      ejv                  jy                  d)ed*fed+fg«      d,„ «       «       ZJejv                  jy                  d-d.eKfd/eLfd0„ eLfg«      ejv                  jy                  d1eeg«      d2„ «       «       ZMejv                  jy                  d3dd*g«      d4„ «       ZNd5„ ZOd6„ ZPejv                  jy                  g d7¢d8d+d8 ej¢                  g d9¢«      gd8d*d8 ej¢                  g d:¢«      gd8d+d; ej¢                  g d<¢«      gd8d*d; ej¢                  g d=¢«      gd8d+d> ej¢                  d8d+g«      gd8d*d> ej¢                  g d?¢«      gd8d+d+ ej¢                  d8d+g«      gd8d*d+ ej¢                  d8d*g«      gd+d+d; ej¢                  d+g«      gd+d*d8 ej¢                  d+d*g«      gd+d*d; ej¢                  d+d*g«      gg«      d@„ «       ZRejv                  jy                  dAeeg«      dB„ «       ZSejv                  jy                  dAeeg«      dC„ «       ZTejv                  jy                  dAeeg«      ejv                  jy                  dDeeeg«      dE„ «       «       ZUdF„ ZVejv                  jy                  dGedHfedIfg«      dJ„ «       ZWdK„ ZXdL„ ZYy)Mz'
Testing Recursive feature elimination
é    )Ú
attrgetterN)Ú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                   óX   ‡ — e Zd ZdZd	d„Zd„ Zd„ ZeZeZeZ	d
d„Z
dd„Zd„ Zˆ fd„Zˆ xZS )ÚMockClassifierz@
    Dummy classifier to test recursive feature elimination
    c                 ó   — || _         y ©N©Ú	foo_param)Úselfr*   s     úf/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/feature_selection/tests/test_rfe.pyÚ__init__zMockClassifier.__init__#   s	   € Ø"ˆ�ó    c                 óØ   — t        |«      t        |«      k(  sJ ‚t        j                  |j                  d   t        j                  ¬«      | _        t        t        |«      «      | _        | S )Né   )Údtype)	ÚlenÚnpÚonesÚshapeÚfloat64Úcoef_ÚsortedÚsetÚclasses_©r+   ÚXÚys      r,   ÚfitzMockClassifier.fit&   sJ   € Ü�1‹vœ˜Q›ÒÐÐÜ—W‘W˜QŸW™W Q™Z¬r¯z©zÔ:ˆŒ
Üœs 1›v›ˆŒØˆr.   c                 óF   — t        j                  |j                  d   «      S )Nr   )r3   r4   r5   )r+   ÚTs     r,   ÚpredictzMockClassifier.predict,   s   € Ü�w‰w�q—w‘w˜q‘zÓ"Ð"r.   c                  ó   — y)Ng        © r;   s      r,   ÚscorezMockClassifier.score3   ó   € Ør.   c                 ó   — d| j                   iS )Nr*   r)   )r+   Údeeps     r,   Ú
get_paramszMockClassifier.get_params6   s   € Ø˜TŸ^™^Ð,Ð,r.   c                 ó   — | S r(   rC   )r+   Úparamss     r,   Ú
set_paramszMockClassifier.set_params9   s   € Øˆr.   c                 óF   •— t         ‰| �  «       }d|j                  _        |S )NT)ÚsuperÚ__sklearn_tags__Ú
input_tagsÚ	allow_nan)r+   ÚtagsÚ	__class__s     €r,   rN   zMockClassifier.__sklearn_tags__<   s!   ø€ Ü‰wÑ'Ó)ˆØ$(ˆ�‰Ô!Øˆr.   )r   )NN)T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   r>   rA   Úpredict_probaÚdecision_functionÚ	transformrD   rH   rK   rN   Ú__classcell__)rR   s   @r,   r&   r&      sB   ø„ ñó#òò#ð €MØÐØ€Ióó-ò÷ð r.   r&   c                  ó   — t        d«      } t        «       }t        j                  |j                  | j                  t        |j                  «      df¬«      f   }|j                  }t        d| d¬«      }t        |dd¬	«      }|j                  ||«       t        |j                  «      |j                  d
   k(  sJ ‚t        d¬«      }t        |dd¬	«      }|j                  ||«       t        |j                  «       |j                  «       «       y )Nr   é   ©Úsizeé   é   )Ún_estimatorsÚrandom_stateÚ	max_depthé   çš™™™™™¹?©Ú	estimatorÚn_features_to_selectÚstepr0   Úlinear©Úkernel)r"   r   r3   Úc_ÚdataÚnormalr2   Útargetr   r   r>   Úranking_r5   r   r   Úget_support)Ú	generatorÚirisr<   r=   ÚclfÚrfeÚclf_svcÚrfe_svcs           r,   Útest_rfe_features_importancery   B   sÛ   € Ü" 1Ó%€IÜ‹;€Dô 	�‰ˆd�i‰i˜×)Ñ)´°D·I±I³ÀÐ/BÐ)ÓCÐCÑD€AØ�‰€Aä
 ¨b¸yÐTUÔ
V€CÜ
˜°!¸#Ô
>€CØ‡G�GˆAˆq„MÜˆs�|‰|Ó §¡¨¡
Ò*Ð*Ð*ä˜Ô"€GÜ˜G¸!À#ÔF€GØ‡K�K��1Ôô �s—‘Ó(¨'×*=Ñ*=Ó*?Õ@r.   Úcsr_containerc                 óØ  — t        d«      }t        «       }t        j                  |j                  |j                  t        |j                  «      df¬«      f   } | |«      }|j                  }t        d¬«      }t        |dd¬«      }|j                  ||«       |j                  |«      }|j                  ||«       t        |j                  «      |j                  d	   k(  sJ ‚t        d¬«      }	t        |	dd¬«      }
|
j                  ||«       |
j                  |«      }|j                  |j                  j                  k(  sJ ‚t        |d d
 |j                  d d
 «       t        |j                  |«      |j                  |j                  «      «       |j!                  ||«      |j!                  |j                  |j                  «      k(  sJ ‚t        ||j#                  «       «       y )Nr   r\   r]   rj   rk   rd   re   rf   r0   é
   )r"   r   r3   rm   rn   ro   r2   rp   r   r   r>   rY   rq   r5   r   rA   rD   Útoarray)rz   rs   rt   r<   ÚX_sparser=   ru   rv   ÚX_rÚ
clf_sparseÚ
rfe_sparseÚ
X_r_sparses               r,   Útest_rferƒ   W   s„  € ä" 1Ó%€IÜ‹;€Dô 	�‰ˆd�i‰i˜×)Ñ)´°D·I±I³ÀÐ/BÐ)ÓCÐCÑD€AÙ˜QÓ€HØ�‰€Aô �XÔ
€CÜ
˜°!¸#Ô
>€CØ‡G�GˆAˆq„MØ
�-‰-˜Ó
€CØ‡G�GˆC�„OÜˆs�|‰|Ó §¡¨¡
Ò*Ð*Ð*ô ˜HÔ%€JÜ˜zÀÈÔL€JØ‡N�N�8˜QÔØ×%Ñ% hÓ/€Jà�9‰9˜Ÿ	™	Ÿ™Ò'Ð'Ð'Ü˜c # 2˜h¨¯	©	°#°2¨Ô7ä˜cŸk™k¨!›n¨c¯k©k¸$¿)¹)Ó.DÔEØ�9‰9�Q˜‹?˜cŸi™i¨¯	©	°4·;±;Ó?Ò?Ð?Ð?Ü˜c :×#5Ñ#5Ó#7Õ8r.   c                  ó  —  G d„ dt         t        «      } t        d¬«      \  }}t        j                  t
        d¬«      5  t         | «       ¬«      j                  ||«       d d d «       t        j                  t
        d¬«      5  t         | «       ¬«      j                  ||d	¬
«      j                  ||«       d d d «       t         | «       ¬«      j                  ||d	¬
«      j                  ||d	¬
«       y # 1 sw Y   Œ–xY w# 1 sw Y   ŒKxY w)Nc                   ó   — e Zd Zdd„Zdd„Zy)ú0test_RFE_fit_score_params.<locals>.TestEstimatorNc                 ó˜   — |€t        d«      ‚t        d¬«      j                  ||«      | _        | j                  j                  | _        | S )Núfit: prop cannot be Nonerj   rk   )Ú
ValueErrorr   r>   Úsvc_r7   ©r+   r<   r=   Úprops       r,   r>   z4test_RFE_fit_score_params.<locals>.TestEstimator.fit{   s@   € Øˆ|Ü Ð!;Ó<Ð<Ü 8Ô,×0Ñ0°°AÓ6ˆDŒIØŸ™Ÿ™ˆDŒJØˆKr.   c                 óT   — |€t        d«      ‚| j                  j                  ||«      S )Núscore: prop cannot be None)r‰   rŠ   rD   r‹   s       r,   rD   z6test_RFE_fit_score_params.<locals>.TestEstimator.score‚   s(   € Øˆ|Ü Ð!=Ó>Ð>Ø—9‘9—?‘? 1 aÓ(Ð(r.   r(   )rS   rT   rU   r>   rD   rC   r.   r,   ÚTestEstimatorr†   z   s   „ ó	ô	)r.   r�   T©Ú
return_X_yrˆ   ©Úmatch©rg   rŽ   Úfoo)rŒ   )	r   r	   r   ÚpytestÚraisesr‰   r   r>   rD   )r�   r<   r=   s      r,   Útest_RFE_fit_score_paramsr˜   w   sÜ   € ô)œ¤ô )ô  Ô%�D€A€qÜ	�‰”zÐ)CÔ	Dñ 1Ü‘m“oÔ&×*Ñ*¨1¨aÔ0÷1ä	�‰”zÐ)EÔ	Fñ IÜ‘m“oÔ&×*Ñ*¨1¨a°eÐ*Ó<×BÑBÀ1ÀaÔH÷Iô ‘-“/Ô"×&Ñ& q¨!°%Ð&Ó8×>Ñ>¸qÀ!È%Ð>ÕP÷1ð 1ú÷Ið Iús   ¿"C6Â4DÃ6C?ÄDc                  óæ  — t        d«      } t        «       }t        j                  |j                  | j                  t        |j                  «      df¬«      f   }|j                  }t        d¬«      }t        |dd¬«      }|j                  ||«       t        |d	d¬«      }|j                  ||«       t        |j                  |j                  «       t        |j                  |j                  «       y )
Nr   r\   r]   rj   rk   rd   re   rf   gš™™™™™Ù?)r"   r   r3   rm   rn   ro   r2   rp   r   r   r>   r   rq   Úsupport_)rs   rt   r<   r=   ru   Úrfe_numÚrfe_percs          r,   Útest_rfe_percent_n_featuresr�   �   s¾   € ä" 1Ó%€IÜ‹;€Dô 	�‰ˆd�i‰i˜×)Ñ)´°D·I±I³ÀÐ/BÐ)ÓCÐCÑD€AØ�‰€Aä
�XÔ
€CÜ˜C°a¸cÔB€GØ‡K�K��1Ôä˜S°sÀÔE€HØ‡L�L��AÔä�x×(Ñ(¨'×*:Ñ*:Ô;Ü�x×(Ñ(¨'×*:Ñ*:Õ;r.   c                  ó   — t        d«      } t        «       }t        j                  |j                  | j                  t        |j                  «      df¬«      f   }|j                  }t        «       }t        |dd¬«      }|j                  ||«       |j                  |«      }|j                  ||«       t        |j                  «      |j                  d   k(  sJ ‚|j                  |j                  j                  k(  sJ ‚y )Nr   r\   r]   rd   re   rf   r0   )r"   r   r3   rm   rn   ro   r2   rp   r&   r   r>   rY   rq   r5   )rs   rt   r<   r=   ru   rv   r   s          r,   Útest_rfe_mockclassifierrŸ   ¤   sÉ   € Ü" 1Ó%€IÜ‹;€Dô 	�‰ˆd�i‰i˜×)Ñ)´°D·I±I³ÀÐ/BÐ)ÓCÐCÑD€AØ�‰€Aô Ó
€CÜ
˜°!¸#Ô
>€CØ‡G�GˆAˆq„MØ
�-‰-˜Ó
€CØ‡G�GˆC�„OÜˆs�|‰|Ó §¡¨¡
Ò*Ð*Ð*Ø�9‰9˜Ÿ	™	Ÿ™Ò'Ð'Ñ'r.   c                 ó6  — t        d«      }t        «       }t        j                  |j                  |j                  t        |j                  «      df¬«      f   }t        |j                  «      }t        t        d¬«      d¬«      }|j                  ||«       |j                  j                  «       D ],  }t        |j                  |   «      |j                  d   k(  rŒ,J ‚ t        |j                  «      |j                  d   k(  sJ ‚|j!                  |«      }t#        ||j                  «       t        t        d¬«      d¬«      } | |«      }	|j                  |	|«       |j!                  |	«      }
t#        |
j%                  «       |j                  «       t'        t(        d¬	«      }t        t        d¬«      d|¬
«      } t+        |j                  «      ||«       |j!                  |«      }t#        ||j                  «       t-        d«      }t        t        d¬«      d|¬
«      }|j                  ||«       |j!                  |«      }t#        ||j                  «       d„ }t        t        d¬«      d|¬
«      }|j                  ||«       |j.                  dk(  sJ ‚t        t        d¬«      d¬«      }|j                  ||«       |j                  j                  «       D ]  }t        |j                  |   «      dk(  rŒJ ‚ t        |j                  «      |j                  d   k(  sJ ‚|j!                  |«      }t#        ||j                  «       t        t        d¬«      d¬«      } | |«      }	|j                  |	|«       |j!                  |	«      }
t#        |
j%                  «       |j                  «       t        t        d¬«      d¬«      } | |«      }	|j                  |	|«       |j!                  |	«      }
t#        |
j%                  «       |j                  «       y )Nr   r\   r]   rj   rk   r0   ©rg   ri   F)Úgreater_is_better)rg   ri   ÚscoringÚaccuracyc                  ó   — y)Ng      ð?rC   )rg   r<   r=   s      r,   Útest_scorerztest_rfecv.<locals>.test_scorerã   rE   r.   r`   çš™™™™™É?)r"   r   r3   rm   rn   ro   r2   Úlistrp   r   r   r>   Úcv_results_Úkeysr5   rq   rY   r   r}   r   r   r#   r   Ún_features_)rz   rs   rt   r<   r=   ÚrfecvÚkeyr   Úrfecv_sparser~   r‚   r£   Úscorerr¦   s                 r,   Ú
test_rfecvr°   ¶   sd  € ä" 1Ó%€IÜ‹;€Dô 	�‰ˆd�i‰i˜×)Ñ)´°D·I±I³ÀÐ/BÐ)ÓCÐCÑD€AÜˆT�[‰[Ó€Aô œC xÔ0°qÔ9€EØ	‡I�Iˆa�„Oð × Ñ ×%Ñ%Ó'ò 9ˆÜ�5×$Ñ$ SÑ)Ó*¨a¯g©g°a©jÓ8Ð8Ð8ð9ô ˆu�~‰~Ó !§'¡'¨!¡*Ò,Ð,Ð,Ø
�/‰/˜!Ó
€Cô �s˜DŸI™IÔ&ô ¤3¨hÔ#7¸aÔ@€LÙ˜QÓ€HØ×Ñ�X˜qÔ!Ø×'Ñ'¨Ó1€JÜ�z×)Ñ)Ó+¨T¯Y©YÔ7ô œ-¸5ÔA€GÜœC xÔ0°qÀ'ÔJ€EØ„O�E—I‘IÓ˜q !Ô$Ø
�/‰/˜!Ó
€CÜ�s˜DŸI™IÔ&ô ˜
Ó#€FÜœC xÔ0°qÀ&ÔI€EØ	‡I�Iˆa�„OØ
�/‰/˜!Ó
€CÜ�s˜DŸI™IÔ&òô œC xÔ0°qÀ+ÔN€EØ	‡I�Iˆa�„Oð ×Ñ Ò!Ð!Ð!ô œC xÔ0°qÔ9€EØ	‡I�Iˆa�„Oà× Ñ ×%Ñ%Ó'ò 0ˆÜ�5×$Ñ$ SÑ)Ó*¨aÓ/Ð/Ð/ð0ô ˆu�~‰~Ó !§'¡'¨!¡*Ò,Ð,Ð,Ø
�/‰/˜!Ó
€CÜ�s˜DŸI™IÔ&ä¤3¨hÔ#7¸aÔ@€LÙ˜QÓ€HØ×Ñ�X˜qÔ!Ø×'Ñ'¨Ó1€JÜ�z×)Ñ)Ó+¨T¯Y©YÔ7ô ¤3¨hÔ#7¸cÔB€LÙ˜QÓ€HØ×Ñ�X˜qÔ!Ø×'Ñ'¨Ó1€JÜ�z×)Ñ)Ó+¨T¯Y©YÕ7r.   c                  ó  — t        d«      } t        «       }t        j                  |j                  | j                  t        |j                  «      df¬«      f   }t        |j                  «      }t        t        «       d¬«      }|j                  ||«       |j                  j                  «       D ],  }t        |j                  |   «      |j                  d   k(  rŒ,J ‚ t        |j                  «      |j                  d   k(  sJ ‚y )Nr   r\   r]   r0   r¡   )r"   r   r3   rm   rn   ro   r2   r¨   rp   r   r&   r>   r©   rª   r5   rq   )rs   rt   r<   r=   r¬   r­   s         r,   Útest_rfecv_mockclassifierr²     sØ   € Ü" 1Ó%€IÜ‹;€DÜ
�‰ˆd�i‰i˜×)Ñ)´°D·I±I³ÀÐ/BÐ)ÓCÐCÑD€AÜˆT�[‰[Ó€Aô œNÓ,°1Ô5€EØ	‡I�Iˆa�„Oð × Ñ ×%Ñ%Ó'ò 9ˆÜ�5×$Ñ$ SÑ)Ó*¨a¯g©g°a©jÓ8Ð8Ð8ð9ô ˆu�~‰~Ó !§'¡'¨!¡*Ò,Ð,Ñ,r.   c                  óÖ  — dd l } ddlm}  |«       | _        t	        d«      }t        «       }t        j                  |j                  |j                  t        |j                  «      df¬«      f   }t        |j                  «      }t        t        d¬«      dd¬«      }|j                  ||«       | j                  }|j!                  d«       t        |j#                  «       «      dkD  sJ ‚y )	Nr   )ÚStringIOr\   r]   rj   rk   r0   )rg   ri   Úverbose)ÚsysÚior´   Ústdoutr"   r   r3   rm   rn   ro   r2   r¨   rp   r   r   r>   ÚseekÚreadline)r¶   r´   rs   rt   r<   r=   r¬   Úverbose_outputs           r,   Útest_rfecv_verbose_outputr¼     sµ   € ãÝá“€C„Jä" 1Ó%€IÜ‹;€DÜ
�‰ˆd�i‰i˜×)Ñ)´°D·I±I³ÀÐ/BÐ)ÓCÐCÑD€AÜˆT�[‰[Ó€AäœC xÔ0°qÀ!ÔD€EØ	‡I�Iˆa�„Oà—Z‘Z€NØ×Ñ˜ÔÜˆ~×&Ñ&Ó(Ó)¨AÒ-Ð-Ñ-r.   c                 ó”  — t        | «      }t        «       }t        j                  |j                  |j                  t        |j                  «      df¬«      f   }t        |j                  «      }ddgddgddgfD ]Ì  \  }}t        t        «       ||¬«      }|j                  ||«       t        j                  |j                  d   |z
  |z  «      dz   }|j                  j                  «       D ]  }	t        |j                  |	   «      |k(  rŒJ ‚ t        |j                   «      |j                  d   k(  sJ ‚|j"                  |k\  rŒÌJ ‚ y )Nr\   r]   r`   r0   é   ©rg   ri   Úmin_features_to_select)r"   r   r3   rm   rn   ro   r2   r¨   rp   r   r&   r>   Úceilr5   r©   rª   rq   r«   )
Úglobal_random_seedrs   rt   r<   r=   ri   rÀ   r¬   Ú	score_lenr­   s
             r,   Útest_rfecv_cv_results_sizerÄ   -  s;  € Ü"Ð#5Ó6€IÜ‹;€DÜ
�‰ˆd�i‰i˜×)Ñ)´°D·I±I³ÀÐ/BÐ)ÓCÐCÑD€AÜˆT�[‰[Ó€Að +,¨Q¨°!°Q°¸!¸Q¸Ð(@ò ;Ñ$ˆÐ$ÜÜ$Ó&ØØ#9ô
ˆð
 	�	‰	�!�QŒä—G‘G˜QŸW™W Q™ZÐ*@Ñ@ÀDÑHÓIÈAÑMˆ	à×$Ñ$×)Ñ)Ó+ò 	<ˆCÜ�u×(Ñ(¨Ñ-Ó.°)Ó;Ð;Ð;ð	<ô �5—>‘>Ó" a§g¡g¨a¡jÒ0Ð0Ð0Ø× Ñ Ð$:Ó:Ð:Ð:ñ;r.   c                  óÈ   — t        t        d¬«      «      } t        | «      sJ ‚t        «       }t	        | |j
                  |j                  «      }|j                  «       dkD  sJ ‚y )Nrj   rk   gffffffæ?)r   r   r
   r   r   rn   rp   Úmin)rv   rt   rD   s      r,   Útest_rfe_estimator_tagsrÇ   F  sP   € Ü
Œc˜Ô"Ó
#€CÜ˜ÔÐÐä‹;€DÜ˜C §¡¨D¯K©KÓ8€EØ�9‰9‹;˜ÒÐÑr.   c                 óæ  — d}t        d|| ¬«      \  }}|j                  \  }}t        d¬«      }t        |d¬«      }|j	                  ||«      }|j
                  j                  «       |dz  k(  sJ ‚t        |d	¬«      }|j	                  ||«      }|j
                  j                  «       |dz  k(  sJ ‚t        |d
¬«      }|j	                  ||«      }|j
                  j                  «       |dz  k(  sJ ‚y )Nr|   é2   ©Ú	n_samplesÚ
n_featuresrb   rj   rk   g{®Gáz„?©ri   r`   r§   é   )r   r5   r    r   r>   rš   Úsum)rÂ   rÌ   r<   r=   rË   rg   ÚselectorÚsels           r,   Útest_rfe_min_steprÒ   O  sî   € Ø€JÜØ Ð:Lô�D€A€qð ŸG™GÑ€IˆzÜ˜8Ô$€Iô �9 4Ô(€HØ
�,‰,�q˜!Ó
€CØ�<‰<×ÑÓ ¨q¡Ò0Ð0Ð0ô �9 4Ô(€HØ
�,‰,�q˜!Ó
€CØ�<‰<×ÑÓ ¨q¡Ò0Ð0Ð0ô �9 1Ô%€HØ
�,‰,�q˜!Ó
€CØ�<‰<×ÑÓ ¨q¡Ò0Ð0Ñ0r.   c                 ó°  — d„ }d„ }ddg}ddg}ddg}t        |||«      D ]Æ  \  }}}t        | «      }	|	j                  d|f¬«      }
|	j                  d«      j	                  «       }t        t        d¬	«      ||¬
«      }|j                  |
|«       t        j                  |j                  «       ||||«      k(  sJ ‚t        j                  |j                  «       ||||«      k(  rŒÆJ ‚ d}ddg}ddg}t        ||«      D ]Õ  \  }}t        | «      }	|	j                  d|f¬«      }
|	j                  d«      j	                  «       }t        t        d¬	«      |¬«      }|j                  |
|«       |j                  j                  «       D ]L  }t        |j                  |   «       ||||«      k(  sJ ‚t        |j                  |   «       ||||«      k(  rŒLJ ‚ Œ× y )Nc                 ó$   — d| |z   |z
  dz
  |z  z   S ©Nr0   rC   ©rÌ   rh   ri   s      r,   Úformula1z4test_number_of_subsets_of_features.<locals>.formula1p  s"   € Ø�Z $Ñ&Ð)=Ñ=ÀÑAÀdÑJÑKÐKr.   c                 óP   — dt        j                  | |z
  t        |«      z  «      z   S rÕ   )r3   rÁ   ÚfloatrÖ   s      r,   Úformula2z4test_number_of_subsets_of_features.<locals>.formula2s  s%   € Ø”2—7‘7˜JÐ)=Ñ=ÄÀtÃÑLÓMÑMÐMr.   é   r¾   r`   éd   r]   rj   rk   rf   r0   r|   r¡   )Úzipr"   ro   ÚrandÚroundr   r   r>   r3   Úmaxrq   r   r©   rª   r2   )rÂ   r×   rÚ   Ún_features_listÚn_features_to_select_listÚ	step_listrÌ   rh   ri   rs   r<   r=   rv   r¬   r­   s                  r,   Ú"test_number_of_subsets_of_featuresrä   g  s  € òLòNð ˜2�h€OØ!" A ÐØ�A�€IÜ25ØÐ2°Ió3ò XÑ.ˆ
Ð(¨$ô 'Ð'9Ó:ˆ	Ø×Ñ 3¨
Ð"3ÐÓ4ˆØ�N‰N˜3Ó×%Ñ%Ó'ˆÜÜ Ô*Ø!5Øô
ˆð
 	�‰��1Œä�v‰v�c—l‘lÓ#¡x°
Ð<PÐRVÓ'WÒWÐWÐWÜ�v‰v�c—l‘lÓ#¡x°
Ð<PÐRVÓ'WÓWÐWÐWðXð2 ÐØ˜2�h€OØ�A�€IÜ °Ó;ò Ñˆ
�DÜ&Ð'9Ó:ˆ	Ø×Ñ 3¨
Ð"3ÐÓ4ˆØ�N‰N˜3Ó×%Ñ%Ó'ˆÜ¤¨8Ô 4¸4Ô@ˆØ�	‰	�!�QŒà×$Ñ$×)Ñ)Ó+ò 	ˆCÜ�u×(Ñ(¨Ñ-Ó.±(ØÐ0°$ó3ò ð ð ô �u×(Ñ(¨Ñ-Ó.±(ØÐ0°$ó3ó ð ð ñ		ñr.   c                 óš  — t        | «      }t        «       }t        j                  |j                  |j                  t        |j                  «      df¬«      f   }|j                  }t        t        d¬«      ¬«      }|j                  ||«       |j                  }|j                  }|j                  d¬«       |j                  ||«       t        |j                  |«       |j                  «       |j                  j                  «       k(  sJ ‚|j                  «       D ],  }||   t!        j"                  |j                  |   «      k(  rŒ,J ‚ y )Nr\   r]   rj   rk   r”   r`   )Ún_jobs)r"   r   r3   rm   rn   ro   r2   rp   r   r   r>   rq   r©   rK   r   rª   r–   Úapprox)	rÂ   rs   rt   r<   r=   r¬   Úrfecv_rankingÚrfecv_cv_results_r­   s	            r,   Útest_rfe_cv_n_jobsrê   ¨  s  € Ü"Ð#5Ó6€IÜ‹;€DÜ
�‰ˆd�i‰i˜×)Ñ)´°D·I±I³ÀÐ/BÐ)ÓCÐCÑD€AØ�‰€AäœC xÔ0Ô1€EØ	‡I�Iˆa�„OØ—N‘N€Mà×)Ñ)Ðà	×Ñ˜AÐÔØ	‡I�Iˆa�„OÜ˜eŸn™n¨mÔ<à×!Ñ!Ó# u×'8Ñ'8×'=Ñ'=Ó'?Ò?Ð?Ð?Ø ×%Ñ%Ó'ò OˆØ  Ñ%¬¯©°u×7HÑ7HÈÑ7MÓ)NÓNÐNÐNñOr.   c            	      ó˜  — t        d«      } t        «       }d}t        j                  t        j                  d|t        |j                  «      «      «      }|j                  }|j                  dkD  j                  t        «      }t        t        | ¬«      ddt        d¬«      ¬«      }|j                  |||¬	«       |j                  dkD  sJ ‚y )
Nr   rd   ©rb   r0   r¤   r`   )Ún_splits)rg   ri   r£   Úcv)Úgroups)r"   r   r3   ÚfloorÚlinspacer2   rp   rn   ÚastypeÚintr   r   r   r>   r«   )rs   rt   Únumber_groupsrï   r<   r=   Ú
est_groupss          r,   Útest_rfe_cv_groupsrö   ½  s¥   € Ü" 1Ó%€IÜ‹;€DØ€MÜ�X‰X”b—k‘k ! ]´C¸¿¹Ó4DÓEÓF€FØ�	‰	€AØ	�‰�q‰× Ñ ¤Ó%€AäÜ(°iÔ@ØØÜ˜qÔ!ô	€Jð ‡N�N�1�a €NÔ'Ø×!Ñ! AÒ%Ð%Ñ%r.   Úimportance_getterzregressor_.coef_zselector, expected_n_featuresrÎ   rd   c                 ó  — t        ddd¬«      \  }}t        d¬«      }t        |t        j                  t        j
                  ¬«      } ||| ¬«      }|j                  ||«      }|j                  j                  «       |k(  sJ ‚y )NrÉ   r|   r   rÊ   rì   ©Ú	regressorÚfuncÚinverse_func©r÷   )	r   r!   r   r3   ÚlogÚexpr>   rš   rÏ   )r÷   rÐ   Úexpected_n_featuresr<   r=   rg   Úlog_estimatorrÑ   s           r,   Útest_rfe_wrapped_estimatorr  Ï  st   € ô  B°2ÀAÔF�D€A€qÜ qÔ)€Iä.Ø¤"§&¡&´r·v±vô€Mñ ˜Ð9JÔK€HØ
�,‰,�q˜!Ó
€CØ�<‰<×ÑÓÐ!4Ò4Ð4Ñ4r.   zimportance_getter, err_typeÚautoÚrandomc                 ó   — | j                   S r(   )Ú
importance)Úxs    r,   ú<lambda>r  ç  s
   € �1—<‘<€ r.   ÚSelectorc                 ó  — t        ddd¬«      \  }}t        «       }t        |t        j                  t        j
                  ¬«      }t        j                  |«      5   ||| ¬«      }|j                  ||«       d d d «       y # 1 sw Y   y xY w)NrÉ   r|   é*   rÊ   rù   rý   )	r   r!   r   r3   rþ   rÿ   r–   r—   r>   )r÷   Úerr_typer	  r<   r=   rg   r  Úmodels           r,   Ú%test_rfe_importance_getter_validationr  â  ss   € ô  B°2ÀBÔG�D€A€qÜ“€IÜ.Ø¤"§&¡&´r·v±vô€Mô 
�‰�xÓ	 ñ Ù˜Ð:KÔLˆØ�	‰	�!�QŒ÷÷ ñ ús   ÁBÂB
rî   c                 ó2  — t        «       }|j                  }|j                  }t        j                  |d   d<   t        j
                  |d   d<   t        «       }| �t        || ¬«      }nt        |¬«      }|j                  ||«       |j                  |«       y )Nr   r0   )rg   rî   r”   )r   rn   rp   r3   ÚnanÚinfr&   r   r   r>   rY   )rî   rt   r<   r=   ru   rv   s         r,   Útest_rfe_allow_nan_inf_in_xr  ÷  s{   € ä‹;€DØ�	‰	€AØ�‰€Aô �f‰f€A€a�Dˆ�GÜ�f‰f€A€a�Dˆ�Gä
Ó
€CØ	€~Ü˜c bÔ)‰ä˜CÔ ˆØ‡G�GˆAˆq„MØ‡M�M�!Õr.   c                  óà   — t        t        «       t        «       «      } t        d¬«      \  }}t	        | dd¬«      }|j                  ||«       |j                  |«      j                  d   dk(  sJ ‚y )NTr�   r`   ú$named_steps.logisticregression.coef_)rh   r÷   r0   )r   r   r   r   r   r>   rY   r5   )Úpipelinern   r=   Úsfms       r,   Útest_w_pipeline_2d_coef_r  
  sh   € Üœ^Ó-Ô/AÓ/CÓD€Hä 4Ô(�G€Dˆ!Ü
ØØØ@ô€Cð ‡G�GˆD�!ÔØ�=‰=˜Ó×$Ñ$ QÑ'¨1Ò,Ð,Ñ,r.   c                 óª  — t        | «      }t        «       }t        j                  |j                  |j                  t        |j                  «      df¬«      f   }|j                  }t        t        d¬«      ¬«      }|j                  ||«       |j                  j                  «       D �cg c]	  }d|v sŒ|‘Œ }}t        j                  |D �cg c]  }|j                  |   ‘Œ c}«      }t        j                  |d¬«      }	t        j                  |d¬«      }
t!        |j                  d	   |	«       t!        |j                  d
   |
«       y c c}w c c}w )Nr\   r]   rj   rk   r”   Úsplitr   ©ÚaxisÚmean_test_scoreÚstd_test_score)r"   r   r3   rm   rn   ro   r2   rp   r   r   r>   r©   rª   ÚasarrayÚmeanÚstdr   )rÂ   rs   rt   r<   r=   r¬   r­   Ú
split_keysÚ	cv_scoresÚexpected_meanÚexpected_stds              r,   Útest_rfecv_std_and_meanr%    s  € Ü"Ð#5Ó6€IÜ‹;€DÜ
�‰ˆd�i‰i˜×)Ñ)´°D·I±I³ÀÐ/BÐ)ÓCÐCÑD€AØ�‰€AäœC xÔ0Ô1€EØ	‡I�Iˆa�„OØ!&×!2Ñ!2×!7Ñ!7Ó!9ÖL˜#¸WÈº^’#ÐL€JÐLÜ—
‘
¸jÖI°s˜E×-Ñ-¨cÓ2ÒIÓJ€IÜ—G‘G˜I¨AÔ.€MÜ—6‘6˜)¨!Ô,€Lä�E×%Ñ%Ð&7Ñ8¸-ÔHÜ�E×%Ñ%Ð&6Ñ7¸ÕFùò MùÚIs   Â*	EÂ4EÃE)rÀ   rÌ   ri   Úcv_results_n_featuresr0   )r0   r`   r¾   rd   )r0   r`   r¾   rd   rÎ   r`   )r0   r`   rd   )r0   r¾   rÎ   r¾   )r0   r`   rÎ   c                 ó  ‡— t        d||d¬«      \  }}t        t        d¬«      || ¬«      Š‰j                  ||«       t	        ‰j
                  d   |«       t        ˆfd„‰j
                  j                  «       D «       «      sJ ‚y )	Nr_   r   )rË   rÌ   Ún_informativeÚn_redundantrj   rk   r¿   rÌ   c              3   óf   •K  — | ](  }t        |«      t        ‰j                  d    «      k(  –— Œ* y­w)rÌ   N)r2   r©   )Ú.0Úvaluer¬   s     €r,   ú	<genexpr>z3test_rfecv_cv_results_n_features.<locals>.<genexpr>I  s2   øè ø€ ò àô 	ˆE‹
”c˜%×+Ñ+¨LÑ9Ó:Õ:ñùs   ƒ.1)r   r   r   r>   r   r©   ÚallÚvalues)rÀ   rÌ   ri   r&  r<   r=   r¬   s         @r,   Ú test_rfecv_cv_results_n_featuresr0  )  sŠ   ø€ ô, Ø ¸:ÐSTô�D€A€qô Ü˜XÔ&ØØ5ô€Eð
 
‡I�Iˆa�„OÜ�u×(Ñ(¨Ñ6Ð8MÔNÜó à×&Ñ&×-Ñ-Ó/ôô ð ñ r.   ÚClsRFEc                 óÒ   — t         j                  j                  d¬«      }t         j                  j                  dd¬«      }t	        d¬«      } | |«      }|j                  ||«       y )N)r|   r¾   r]   r`   )r|   r`   rÎ   )ra   )r3   r  ro   Úrandintr   r>   )r1  r<   r=   ru   Úrfe_tests        r,   Útest_multioutputr5  O  sS   € ä
�	‰	×Ñ˜gÐÓ&€AÜ
�	‰	×Ñ˜! 'ÐÓ*€AÜ
 ¨aÔ
0€CÙ�c‹{€HØ‡L�L��AÕr.   c                 óÊ   — t        d¬«      \  }}t        j                  |d<   t        t	        «       t        «       t        «       «      } | |d¬«      }|j                  ||«       y)z`Check that RFE works with pipeline that accept nans.

    Non-regression test for gh-21743.
    Tr�   )r   r   r  )rg   r÷   N)r   r3   r  r   r   r   r   r>   )r1  r<   r=   ÚpipeÚfss        r,   Útest_pipeline_with_nansr9  X  s[   € ô  Ô%�D€A€qÜ�f‰f€A€d�GäÜ‹ÜÓÜÓó€Dñ 
ØØ@ô
€Bð ‡F�Fˆ1ˆa…Lr.   ÚPLSEstimatorc                 óš   — t        ddd¬«      \  }} |d¬«      } | |d¬«      j                  ||«      }|j                  ||«      dkD  sJ ‚y	)
z�Check the behaviour of RFE with PLS estimators.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/12410
    rÉ   r|   r   rÊ   r0   )Ún_componentsrÍ   g      à?N)r   r>   rD   )r1  r:  r<   r=   rg   rÐ   s         r,   Útest_rfe_plsr=  n  sR   € ô  B°2ÀAÔF�D€A€qÙ¨!Ô,€IÙ�i aÔ(×,Ñ,¨Q°Ó2€HØ�>‰>˜!˜QÓ #Ò%Ð%Ñ%r.   c                  ó¸  — t        «       } t        t        «       ¬«      }d}d}t        j                  t
        |¬«      5 }|j                  | j                  | j                  «      j                  | j                  «       ddd«       t        j                  j                  t
        «      sJ ‚|t        |j                  j                  «      v sJ ‚y# 1 sw Y   ŒSxY w)a  Check 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>   rn   rp   rX   Ú
isinstancer,  Ú	__cause__Ústr)rt   rv   Ú	outer_msgÚ	inner_msgÚ	exec_infos        r,   Ú"test_rfe_estimator_attribute_errorrF  |  sª   € ô ‹;€Dô Ô(Ó*Ô
+€CàA€IØP€IÜ	�‰”~¨YÔ	7ð E¸9Ø�‰�—	‘	˜4Ÿ;™;Ó'×9Ñ9¸$¿)¹)ÔD÷Eä�i—o‘o×/Ñ/´Ô@Ð@Ð@Øœ˜IŸO™O×5Ñ5Ó6Ñ6Ð6Ñ6÷Eð Eús   ¾A CÃCzClsRFE, paramrh   rÀ   c                 óÖ   — t        dd¬«      \  }}t        j                  t        |› d�¬«      5   | d	dt	        «       i|di¤Ž}|j                  ||«       ddd«       y# 1 sw Y   yxY w)
zÞCheck 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
    r_   r   )rÌ   rb   z=21 > n_features=20r’   rg   é   NrC   )r   r–   ÚwarnsÚUserWarningr   r>   )r1  Úparamr<   r=   Úclsrfes        r,   Ú%test_rfe_n_features_to_select_warningrM  ’  si   € ô ¨"¸1Ô=�D€A€qä	�‰”k¨E¨7Ð2EÐ)FÔ	Gñ ñ ÑFÔ"4Ó"6ÐF¸5À"¸+ÑFˆØ�
‰
�1�aÔ÷	÷ ñ ús   ¯'AÁA(c                  óŽ  — t        d¬«      \  } }| j                  d   }t        j                  |«      }d|d|dz   t        j                  | | d|dz   gd¬«      }t        j                  ||d|dz   g«      }t        d¬«      }t        |d¬	«      }|j                  | ||¬
«       t        |d¬	«      }|j                  ||«       t        |j                  |j                  «       t        |d¬	«      }	t        j                  |«      }
|	j                  | ||
¬
«       t        j                  |	j                  |j                  «      rJ ‚y)z4Test that `RFE` works correctly with sample weights.r   rì   r`   Nr  rj   rk   re   r¡   )Úsample_weight)r   r5   r3   Ú	ones_likeÚconcatenater   r   r>   r   rq   Úarray_equal)r<   r=   rË   rO  ÚX2Úy2rg   Úrfe_swrv   Úrfe_sw_2Úsample_weight_2s              r,   Útest_rfe_with_sample_weightrX  £  s   € ä¨AÔ.�D€A€qØ—‘˜‘
€Iô —L‘L “O€MØ&'€MÐ"�I ‘NÐ#ô 
�‰˜˜AÐ. 	¨Q¡Ð/Ð0°qÔ	9€BÜ	�‰˜˜AÐ. 	¨Q¡Ð/Ð0Ó	1€Bä˜8Ô$€Iä˜9¨3Ô/€FØ
‡J�Jˆq�! =€JÔ1ä
˜	¨Ô
,€CØ‡G�GˆB�„Oä�v—‘¨¯©Ô5ô ˜Y¨SÔ1€HÜ—l‘l 1“o€OØ‡L�L��A _€LÔ5ä�~‰~˜h×/Ñ/°·±Ô>Ð>Ð>Ð>r.   c                 ó  — t        | ¬«      \  }}t        «       }t        |d¬«      }|j                  ||«       |j                  }t        d«      5  |j                  ||«       d d d «       t        ||j                  «       y # 1 sw Y   Œ xY w)Nrì   r`   )rg   ræ   Ú	threading)r   r   r   r>   rq   r   r   )rÂ   r<   r=   ru   rv   Úranking_refs         r,   Ú&test_rfe_with_joblib_threading_backendr\  Ä  s{   € ÜÐ,>Ô?�D€A€qä
Ó
€CÜ
ØØô€Cð
 ‡G�GˆAˆq„MØ—,‘,€Kä	˜+Ó	&ñ Ø�‰��1Œ÷ô �{ C§L¡LÕ1÷ð ús   ÁBÂB)ZrV   Úoperatorr   Únumpyr3   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&   ry   ÚmarkÚparametrizerƒ   r˜   r�   rŸ   r°   r²   r¼   rÄ   rÇ   rÒ   rä   rê   rö   r  r‰   r?  r  r  r  r%  Úarrayr0  r5  r9  r=  rF  rM  rX  r\  rC   r.   r,   ú<module>rt     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8òb-ò".ò(;ò2ò1ò0>òBOò*&ð$ ‡�×ÑØ™*Ð%7Ó8Ð:LÐMóð ‡�×ÑÐ8¸CÀ¸8ÀeÈQÀZÐ:PÓQñ5ó Róð5ð ‡�×ÑØ!à	�ÐØ	�>Ð"Ù	 Ð0ðóð ‡�×Ñ˜ c¨5 \Ó2ñ	ó 3óð	ð ‡�×Ñ˜  a˜yÓ)ñó *ðò$-òGð" ‡�×ÑÚMà	
ˆAˆq�(�"—(‘(š<Ó(Ð)Ø	
ˆAˆq�(�"—(‘(š?Ó+Ð,Ø	
ˆAˆq�(�"—(‘(š9Ó%Ð&Ø	
ˆAˆq�(�"—(‘(š9Ó%Ð&Ø	
ˆAˆq�(�"—(‘(˜A˜q˜6Ó"Ð#Ø	
ˆAˆq�(�"—(‘(š9Ó%Ð&Ø	
ˆAˆq�(�"—(‘(˜A˜q˜6Ó"Ð#Ø	
ˆAˆq�(�"—(‘(˜A˜q˜6Ó"Ð#Ø	
ˆAˆq�(�"—(‘(˜A˜3“-Ð Ø	
ˆAˆq�(�"—(‘(˜A˜q˜6Ó"Ð#Ø	
ˆAˆq�(�"—(‘(˜A˜q˜6Ó"Ð#ðóñ ó!ð ð, ‡�×Ñ˜ C¨ <Ó0ñó 1ðð ‡�×Ñ˜ C¨ <Ó0ñó 1ðð* ‡�×Ñ˜ C¨ <Ó0Ø‡�×Ñ˜¨#¨|¸]Ð)KÓLñ	&ó Mó 1ð	&ò7ð, ‡�×ÑØ�sÐ2Ð3°eÐ=UÐ5VÐWóñóðò?óB2r.   