`L i҂ dZddlZddlmZddlZddlZddlmZddl m Z ddl m Z ddl mZmZmZmZddlmZmZmZmZmZmZdd lmZmZdd lmZmZmZm Z dd l!m"Z"m#Z#dd l$m%Z%m&Z&m'Z'm(Z(dd l)m*Z*m+Z+m,Z,ddl-m.Z.ddl/m0Z0ddl1m2Z2ddl3m4Z4m5Z5m6Z6ddl7m8Z8m9Z9m:Z:m;Z;ddlm?Z?m@Z@mAZAddlBmCZCmDZDmEZEeZFeFjeFjcZIZJeZKeKjeKjcZLZMedd\ZNZOedd\ZPZQejjdde+dddgejjddedgejjdd dgd!ZTd"ZUd#ZVd$ZWejjdde*dddgejjd%difedifed&difgejjdd dgd'ZXejjd(eCeDzeEzd)ZYejjd(eCeDzeEzd*ZZd+Z[Gd,d-eeZ\Gd.d/eeZ]ejjd0eMd1gie^d2feMd3e&fd4e4d56fgd7d8e^d9feMd1d3e&fd:e]fgie_d;feMd3e&fd:e5d56fge]d<e_d;fgd=Z`ejjd0eJd1gie^d2feJd1d3e%fd:e\fgie_d;feJd3e%fd:e6fge\d<e_d;fgd>Zaejjd?ed3e&dfd4e5dfg@eLddAeMddAfe d3e%fd4e6dfg@eIeJfgdBdCgDdEZbdFZcejjdGed3e&fd4e5dfge&e*ddHIgedJe d3e%fd4e6dfge%e*ddHIeIeJfgdBdCgDdKZddLZeejjdMejjdGed3e&fd4e5dfge&<gedJe d3e%fd4e6dfge%<eIeJfgdBdCgDdNZgejjdOeed7e&deLeMfe edPe%eIeJfgdQZhejjdGed3e&fd4e4fgdRSeLeMfe d3e%fd4e6fgdRSeIeJfgdTZiejjdUeee&fee e%fgdVZjejjdWe0dedgdXdYgDdZZkd[Zlejjd\d]dPgejjdd dgd^Zmejjd_ed3e&dfd4e5dfg@eKjeLeMgd`fed3e&dfdad4e5dfg@eKjeLddAeMddAdbdcgfe d3e%fd4e6dfg@eFjeIeJdddegfggdfDejjddd gdgZodhZpdiZqejjdjee8fe e9fgdkZrejjdjee8fe e9fge dldmZsejjdjee8fe e9fgejjdndoejeLjdfdpge dldqZvejjdjee8fe e9fge dldrZwy)sz+Test the stacking classifier and regressor.N)Mock)assert_array_equal)sparse)config_context) BaseEstimatorClassifierMixinRegressorMixinclone)load_breast_cancer load_diabetes load_irismake_classificationmake_multilabel_classificationmake_regression)DummyClassifierDummyRegressor)RandomForestClassifierRandomForestRegressorStackingClassifierStackingRegressor)ConvergenceWarningNotFittedError)LinearRegressionLogisticRegressionRidgeRidgeClassifier)KFoldStratifiedKFoldtrain_test_split)KNeighborsClassifier) MLPClassifier)scale)SVC LinearSVC LinearSVR)ConsumingClassifierConsumingRegressor _Registrycheck_recorded_metadata)CheckingClassifier)assert_allcloseassert_allclose_dense_sparseignore_warnings)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERS*) n_classes random_statecvT)n_splitsshuffler4final_estimatorr4 passthroughFctttttd\}}}}dt fdt fg}t ||||}|j|||j||j||j||dkDsJ|j|} |rdnd} | jd | k(sJ|rt|| ddd df|jd |j|||j||j|||j||j|} |rd nd} | jd | k(sJ|rt|| ddd dfyy)Nr2stratifyr4lrsvc estimatorsr9r6r;皙? dropr?r1)rr"X_irisy_irisrr$rfitpredict predict_probascore transformshaper+ set_paramsdecision_function) r6r9r;X_trainX_testy_trainy_testrBclfX_transexpected_column_countexpected_column_count_drops j/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sklearn/ensemble/tests/test_stacking.pytest_stacking_classifier_irisr^Csv(8 f vR($GVWf+-. 0DEJ '   C GGGWKKf 99VV $s ** *mmF#G"-B1 == 4 44 4230NNfNGGGWKKf f%mmF#G&1q == 9 99 9230ctd\}}tt|||d\}}}}dtfdt dfg}t |d }|j |||j|}|jd d k(sJdtfd tfg}|j| |j |||j|}|jd d k(sJy)NT return_X_yr2r=r?rfr:r1rBr6rFr5r@rB) r rr"rrrrMrQrRr$rS) XyrUrVrW_rBrYrZs r]:test_stacking_classifier_drop_column_binary_classificationriqs  .DAq"2 a!ab#GVWa !#$ %267J  q 9CGGGWmmF#G == q  +-. 0DEJNNjN)GGGWmmF#G == q  r_c&tttttd\}}}}ddt dfg}t dd}t dt dfg|d }t ||d }|j|||j||t|j||j|t|j||j|t|j||j|y) Nr2r=r?rHr@rr:rD n_estimatorsr4rBr9r6) rr"rKrLr$rrrMr+rNrOrQ)rUrVrWrhrBrcrYclf_drops r]'test_stacking_classifier_drop_estimatorrqs#3 f vR#GVWa!5)*C"DEJ Rb AB I1567  C "ZPQRHGGGW LL'"CKK')9)9&)ABC%%f-x/E/Ef/MNCMM&)8+=+=f+EFr_cttttd\}}}}ddt dfg}t dd}t dt dfg|d }t ||d }|j|||j||t|j||j|t|j||j|y) Nr2r:rksvrrrDrlrnro) rr" X_diabetes y_diabetesr%rrrMr+rNrQ)rUrVrWrhrBrcregreg_drops r]&test_stacking_regressor_drop_estimatorrxs#3 j:B#GVWa!5)*C"DEJ BR @B I1567  C !JqQHGGGW LL'"CKK')9)9&)ABCMM&)8+=+=f+EFr_zfinal_estimator, predict_params return_stdcttttd\}}}}dt fdt fg}t ||||} | j||| j|fi|} |rdnd} |rt| | k(sJ| j|} |rdnd} | jd| k(sJ|rt|| ddd df| jd | j||| j|| j|} |rd nd}| jd|k(sJ|rt|| ddd dfyy) Nr2r:r?rsrAr5rF rHrI )rr"rtrurr%rrMrNlenrQrRr+rS)r6r9predict_paramsr;rUrVrWrhrBrvresultexpected_result_lengthrZr[r\s r] test_stacking_regressor_diabetesrsW#3 j:B#GVWa)+,uik.BCJ '   C GGGW S[[ 2> 2F"0Qa6{4444mmF#G"-B1 == 4 44 434 01NNfNGGGWKKmmF#G'2 == 9 99 934 01r_sparse_containerct|tttd\}}}}dt fdt fg}t dd}t||dd }|j|||j|}t||ddd dftj|sJ|j|jk(sJy) Nr2r:r?rsrDrlrnTrAr|)rr"rtrurr%rrrMrQr,rissparseformat rrUrVrWrhrBrcrYrZs r]*test_stacking_regressor_sparse_passthroughrs #3z*+Zb#GVWa)+,uik.BCJ BR @B raT CGGGWmmF#G CD)9: ??7 ## # ==GNN ** *r_ct|tttd\}}}}dt fdt fg}t dd}t||dd }|j|||j|}t||ddd dftj|sJ|j|jk(sJy) Nr2r:r?r@rDrlrnTrArG)rr"rKrLrr$rrrMrQr,rrrrs r]+test_stacking_classifier_sparse_passthroughrs #3v'b#GVWa+-. 0DEJ Rb AB raT CGGGWmmF#G BC9 ??7 ## # ==GNN ** *r_cttddtdd}}dtfdt fg}t |}|j |||j|}|jddk(sJy)Ndr?rcrerFr5) r"rKrLrrrrMrQrR)X_y_rBrYX_metas r])test_stacking_classifier_drop_binary_probr su 6$3< &#,B+-.7M7O0PQJ  3CGGBO ]]2 F <<?a  r_ceZdZdZdZy)NoWeightRegressorcXt|_|jj||SN)rrvrMselfrfrgs r]rMzNoWeightRegressor.fits!!#xx||Aq!!r_cFtj|jdS)Nr)nponesrR)rrfs r]rNzNoWeightRegressor.predict swwqwwqz""r_N)__name__ __module__ __qualname__rMrNr_r]rrs "#r_rceZdZdZy)NoWeightClassifierc\td|_|jj||S)N stratified)strategy)rrYrMrs r]rMzNoWeightClassifier.fit%s#"L9xx||Aq!!r_N)rrrrMrr_r]rr$s"r_rzy, params, type_err, msg_errrBzInvalid 'estimators' attribute,r?svmiPmax_iterrO)rB stack_methodz+does not implement the method predict_probacorzdoes not support sample weightrBr9c tj||5tdi|ddi}|jt t |t jt jddddy#1swYyxYwNmatchr6r1r sample_weightr) pytestraisesrrMr"rKrrrR)rgparamstype_errmsg_errrYs r]test_stacking_classifier_errorr*seT xw /J 060a0 f q Q0HIJJJ AA66A?c tj||5tdi|ddi}|jt t |t jt jddddy#1swYyxYwr) rrrrMr"rtrrrR)rgrrrrvs r]test_stacking_regressor_errorrYsh2 xw /R/&/Q/ j!1BGGJ*A!BB;K 1!;7GVWa!4a "4 5& GW%&v. "4 5L GWBGGGMM4J KL 0$&89 "4 5I GW4G HIOOF+M 66"]2 3 7 7 9A == =&&LL IIs$!E2E*E6E'*E36E?ctdtdfgtd}|jttt j tjdy)Nr?T)expected_sample_weightrrr)rr*rMrKrLrrrR)rs r]0test_stacking_classifier_sample_weight_fit_paramrsJ -TJKL*$GG KKbggfll1o.FKGr_z-ignore::sklearn.exceptions.ConvergenceWarningct|}t|}|jd|jd|j|||j||t|j|jD]%\}}t |j |j 'tjtd5t |jj |jj dddy#1swYyxYw)Nr1rrnz Not equalr) r rSrMzip estimators_r+coef_rrAssertionErrorfinal_estimator_)rrfrg stacker_cv_3 stacker_cv_5est_cv_3est_cv_5s r]test_stacking_cv_influencersB>L>Lq!q!QQ",":":Lz'test_stacking_prefit..ZsRy}}''1,Rs#%N) rrMrgetattrrsetattrrallassert_called_with)Stacker Estimatorrr9rfrgX_train1X_train2y_train1y_train2rBrhr stack_funcpredict_method_mockedrstack_func_mocks r]test_stacking_prefitr*s<..> 12.*Hh( y{x23 y{x23J #@ 9%( Y 5 $ <*6& <)>?@(OG KK(#   "LI9"L LL L Rg>Q>QR RR R((5 !)\:**845 #Ms; Drrdctjt5|j||dddy#1swYyxYwr)rrrrM)rrfrgs r]test_stacking_prefit_errorrbs36 ~ & Aqs6?z!make_dataset, Stacking, EstimatorcGdd|}|dd\}}|d|fg}|jd}tjt| 5|jddd|j ||d }tjt| 5|jdddy#1swYNxYw#1swYyxYw) Nc"eZdZdZfdZxZS)8test_stacking_without_n_features_in..MyEstimatorz Estimator without n_features_in_c*t||||`yr)superrMn_features_in_)rrfrg __class__s r]rMz.MyEstimator.fits GK1 #r_)rrr__doc__rM __classcell__)rs@r] MyEstimatorrs. $ $r_rrr)r4 n_samplesr?rez' object has no attribute n_features_in_rz6'MyEstimator' object has no attribute 'n_features_in_')rrrAttributeErrorrrM) make_datasetStackingrrrfrgrmsgs r]#test_stacking_without_n_features_inr s$i$ Q# 6DAqD+-#8"9:G    F GC ~S 1 KK1 BC ~S 1s B. B:.B7:Crr!rcttttd\}}}}d}d|fg}t|t dj ||}|j |}|j|jd|fk(sJttj|jd d rJ|j|} | j|jk(sJy ) zCheck the behaviour for the multilabel classification case and the `predict_proba` stacking method. Estimators are not consistent with the output arrays and we need to ensure that we handle all cases. r2r=r1estrOrBr9rrrF)axisg?N) r X_multilabel y_multilabelrr rMrQrRanyriscloserrN) rrUrVrWrX n_outputsrBrrZy_preds r]1test_stacking_classifier_multilabel_predict_probars$(8l\($GVWfI)$%J ,.$ c'7  'G ==V\\!_i8 88 82::gkkqk13788 8 __V $F <<6<< '' 'r_chttttd\}}}}d}dtfg}t |t dj ||}|j|}|j|jd|fk(sJ|j|}|j|jk(sJy) zCheck the behaviour for the multilabel classification case and the `decision_function` stacking method. Only `RidgeClassifier` supports this case. r2r=r1r rTr rN) rrrrrr rMrQrRrN) rUrVrWrXrrBrrZrs r]5test_stacking_classifier_multilabel_decision_functionrs (8l\($GVWfI/+,-J ,.( c'7  'G ==V\\!_i8 88 8 __V $F <<6<< '' 'r_rautocttttd\}}}}|j}d}dt dfdt dfdt fg}t} t|| ||j||} t||| j|} | j|jk(sJ|d k(rgd } nd gt|z} | j| k(sJ|t|z} |r| |jd z } | j|}|j|jd | fk(sJt| j t#j$d d gg|zy)zCheck the behaviour for the multilabel classification case for stack methods supported for all estimators or automatically picked up. r2r=r1mlpr:rcridge)rBr9r;rr)rOrOrTrNrFrN)rrrcopyr!rrr rrMrrNrRr~ stack_method_rQclasses_rr)rr;rUrVrWrXy_train_before_fitrrBr9rYrexpected_stack_methodsn_features_X_transrZs r]0test_stacking_classifier_multilabel_auto_predictr!so (8l\($GVWf!I  2./ %267 /#$J +,O '!    c'7 )73 [[ F <<6<< '' 'v!X"+s:!>    6 66 6"S_4gmmA..mmF#G ==V\\!_.@A AA As||bhh1v&6%7)%CDr_z,stacker, feature_names, X, y, expected_names)stackingclassifier_lr0stackingclassifier_lr1stackingclassifier_lr2stackingclassifier_svm0stackingclassifier_svm1stackingclassifier_svm2)otherrHstackingclassifier_lrstackingclassifier_svmstackingregressor_lrstackingregressor_svm)StackingClassifier_multiclassStackingClassifier_binaryrc|j||jt|||rtj||f}|j |}t ||y)z/Check get_feature_names_out works for stacking.)r;N)rSrMr"r concatenateget_feature_names_outr)r feature_namesrfrgexpected_namesr; names_outs r]test_get_feature_names_outr5sXD ;/ KKa!(GH--mThis 'StackingClassifier' has no attribute 'decision_function'zD'RandomForestClassifier' object has no attribute 'decision_function'rN) rrrrrrrrMrT isinstancevalue __cause__str)rfrgrBr9rY outer_msg inner_msg exec_infos r]-test_stacking_final_estimator_attribute_errorr@hs B /DAq !#$ %12FGJ -!"MO 1 CQIVI ~Y 7+9 1 ''*+ ioo// @@ @ IOO556 66 6++s %"CC"zEstimator, Childctjtd5|d|gjtt gdddddy#1swYyxYw)zTest that the right error message is raised when metadata is passed while not supported when `enable_metadata_routing=False`.z1is only supported if enable_metadata_routing=TruerrY)rFrFrFrFrFarmetadataN)rr ValueErrorrMrKrL)rChilds r]*test_routing_passed_metadata_not_supportedrGsU M   5%'"#'' F/C (    s -AA)enable_metadata_routingcD|d|fg}|jy)Nsub_est)get_metadata_routing)rrFr s r]%test_get_metadata_routing_without_fitrLs$ i)* +Cr_zprop, prop_valuer)rDrBc |d|tjd i|difd|tjd i|difg|tjd i|di}|jtt fi||i|j tt fi||i|jtfi||i|jD]7}|dj}t|sJ|D]}td |dd|d||i9|jj}t|sJtd |d d d |d||iy ) z5Test that metadata is routed correctly for Stacking*.sub_est1)registryTsub_est2)r9rFrM)objmethodparent split_paramsrNNr) r(set_fit_requestset_predict_requestrMrKrL fit_transformrNrBrOr~r)r)rrFprop prop_valuer rrOrJs r]-test_metadata_routing_for_stacking_estimatorsr[s ;y{+;;KtTlK  ;y{+;;KtTlK  Hy{3GGW4QU,W C CGGFF1tZ01Cff;z(:;CKK-4,-^^  Q<((8}} G # "   $    ##,,H x== RL    r_cTtjtjdd}}|d|fg}d|jd}t j ttj|5|jtt||dddy#1swYyxYw) zCTest that the right error is raised when metadata is not requested.rrBrJzb[sample_weight, metadata] are passed but are not explicitly set as requested or not requested for z.fitrrCN) rrrKrRrrrrEreescaperMrL)rrFrrDr  error_messages r]3test_metadata_routing_error_for_stacking_estimatorsr`s!ggfll1o68M i)* +C !!& 0 6 z=)A BP mhOPPPs 7BB')xrr] unittest.mockrnumpyrr numpy.testingrscipyrsklearnr sklearn.baserrr r sklearn.datasetsr r r rrr sklearn.dummyrrsklearn.ensemblerrrrsklearn.exceptionsrrsklearn.linear_modelrrrrsklearn.model_selectionrrrsklearn.neighborsr sklearn.neural_networkr!sklearn.preprocessingr" sklearn.svmr#r$r%%sklearn.tests.metadata_routing_commonr&r'r(r)sklearn.utils._mockingr*sklearn.utils._testingr+r,r-sklearn.utils.fixesr.r/r0diabetesdatatargetrtruirisrKrLrrX_binaryy_binarymark parametrizer^rirqrxrrrrrrrE TypeErrorrrrrrrfilterwarningsrrrr rrr!r2r5r7r@rGrLrrRr[r`rr_r]rs 1   ,"NN: B ML20'11 6 ON ?! J{DKK;b l)12F(1oq$RH I4"EF 6$17$1N!6G,G*5!TPR#STU% r B /4  L$/0 6!27V!2H7.H++"7.H++"  # #"-" " ,#Z1RS -/0C01!0    9  -/0.01   ,  -/0Iv67$6#7    , 3%(RJS(RJ " lB'5VW  T#3#56@Q@S8TU V  ,   +-.IK($5#6    , 0R10R  -1=>I156  4CL 4CL  +-.I156    , 231454(  -/0I267!3 4B7    4 0  +-.I267!1 2B7     2 237:>;:>:HKL -/0I267!3 4    4 0  +-.I267!1 2     . 2336 7M8 2=    B /             * 5+* 5F !#5#785#%.I      +-.IK(     010' 02DE +-=>4 2& B/  23 ( (8(0&))<= 6*E7>*EZ2 -1=>I156        ( -1=>%I156     4CL 4CL'(  " +-.I156   " "  &'  I3h m;xu 6 27y;z 2 +7B 01 ./     01 ./-.  01 .//72776<<?+CDFWX-+.+\ 01 ./- P. Pr_