`L iNfddlZddlmZddlmZddlZddlmZddl m Z m Z m Z m Z mZmZddlmZmZddlmZddlmZdd lmZdd lmZmZmZdd lmZd2d Ze fd Z!eedZ"d3dZ#dZ$Gdde%Z&Gdde e Z'Gdde e Z(Gdde e Z)Gdde e Z*Gdde*Z+Gdde*Z,Gd d!e*Z-Gd"d#ee Z.Gd$d%e Z/Gd&d'eZ0Gd(d)eeZ1Gd*d+e e e Z2Gd,d-e e e Z3Gd.d/e e e Z4Gd0d1e ee Z5y)4N) defaultdict)partial)assert_array_equal) BaseEstimatorClassifierMixinMetaEstimatorMixinRegressorMixinTransformerMixinclone)_Scorermean_squared_error)BaseCrossValidator)GroupsConsumerMixin)SIMPLE_METHODS)MetadataRouter MethodMappingprocess_routing)_check_partial_fit_first_callc dtj}|dj}|dj}t|dst d|_|s8|j Dcic]\}}t|tr|dk7r||}}}|j ||j|ycc}}w)zUtility function to store passed metadata to a method of obj. If record_default is False, kwargs whose values are "default" are skipped. This is so that checks on keyword arguments whose default was not changed are skipped. _recordsc ttSN)rlistk/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sklearn/tests/metadata_routing_common.pyz!record_metadata..*s ;t+<rdefaultN) inspectstackfunctionhasattrrritems isinstancestrappend)objrecord_defaultkwargsr"calleecallerkeyvals rrecord_metadatar0s MMOE 1X  F 1X  F 3 #"#<= #LLN Sc3'C9,< H  LL ''/  s%"B,c ^t|dtj|tj|t}|D]}t |j t |j k(s)Jd|j d|j |j D]r\}}||} ||vr)| 'tj| |jr6Jt| tjr t| |_| |urdJd| d|d|y)aCheck whether the expected metadata is passed to the object's method. Parameters ---------- obj : estimator object sub-estimator to check routed params for method : str sub-estimator's method where metadata is routed to, or otherwise in the context of metadata routing referred to as 'callee' parent : str the parent method which should have called `method`, or otherwise in the context of metadata routing referred to as 'caller' split_params : tuple, default=empty specifies any parameters which are to be checked as being a subset of the original values **kwargs : dict passed metadata rz Expected z vs Nz . Method: ) getattrdictgetrsetkeysr%npisinallr&ndarrayr) r)methodparent split_paramsr+ all_recordsrecordr.valuerecorded_values rcheck_recorded_metadatarB4s#( Z(,,VTV<@@P6;;=!S%77  d6;;=/ : 7!,,. JC#C[Nl"~'Aww~u599;;;nbjj9&~u=)U2#N#34wjQ2  rF)r*c Xt|tr0|D]*\}}| ||vr||}nd}t|j|,y|gn|}tD]U}||vrt ||}|j jDcgc]\}}t|ts||} }}| sUJycc}}w)aCheck if a metadata request dict is empty. One can exclude a method or a list of methods from the check using the ``exclude`` parameter. If metadata_request is a MetadataRouter, then ``exclude`` can be of the form ``{"object" : [method, ...]}``. N)exclude) r&rassert_request_is_emptyrouterrr2requestsr%r') metadata_requestrDname route_mapping_excluder;mmrpropaliaspropss rrErEbs"N3#3 L D-"tw"4= #M$8$8( K  L ObG  W  &/ #||113 e%%):   y  s>B&c|jD]"\}}t||}|j|k(r"JtDcgc] }||vs| }}|D]#}t t||js#Jycc}wr)r%r2rGrlen)request dictionaryr;rGrL empty_methodss rassert_request_equalrUs&,,.(gv&||x'''(+9UF*eZdZdZd dZdZd dZdZdZdZ d Z y) NonConsumingClassifier5A classifier which accepts no metadata on any method.c||_yr)alpha)rYrs rrizNonConsumingClassifier.__init__s  rcntj||_tj||_|Sr)r7uniqueclasses_ ones_likecoef_rYrsrts rrxzNonConsumingClassifier.fits% !  \\!_  rNc|Srr)rYrsrtclassess rruz"NonConsumingClassifier.partial_fitr\rc$|j|Sr)r}rYrss rdecision_functionz(NonConsumingClassifier.decision_functions||Arctjt|f}d|dt|dzd|t|dzd|S)Nrzrrr)r7emptyrQ)rYrsy_preds rr}zNonConsumingClassifier.predictsCQ * !}Q1 !s1v{} rc2tjt|t|jftj}tj j tjt|jt||dd|S)Nr{dtypersize)r7rrQrfloat32random dirichletones)rYrsy_probas r predict_probaz$NonConsumingClassifier.predict_probasc((#a&#dmm*tjt|Sr)r7rrQrs rr}zNonConsumingRegressor.predictswws1vrN)r`rarbrrxrur}rrrrrs?rrcReZdZdZd dZ d dZd dZd dZd dZd dZ d d Z d d Z y)ConsumingClassifieraA classifier consuming metadata. Parameters ---------- registry : list, default=None If a list, the estimator will append itself to the list in order to have a reference to the estimator later on. Since that reference is not required in all tests, registration can be skipped by leaving this value as None. alpha : float, default=0 This parameter is only used to test the ``*SearchCV`` objects, and doesn't do anything. Nc ||_||_yr)rrg)rYrgrs rrizConsumingClassifier.__init__s   rc|j|jj|t|||t|||Srl)rgr(rqr)rYrsrtrrnros rruzConsumingClassifier.partial_fits@ == $ MM  &#    &dG4 rc|j|jj|t|||tj||_tj ||_|Srl)rgr(rqr7rrrrrrs rrxzConsumingClassifier.fitsR == $ MM  &#    !  \\!_  rct|||tjt|fd}d|t|dzdd|dt|dz|S)Nrmint8rrrrrqr7rrQrYrsrnroy_scores rr}zConsumingClassifier.predict sV#   ((#a&&9!"A! !" #a&A+rcNt|||tjt|t|jftj }tj jtjt|jt||dd|S)Nrmrr) rqr7rrQrrrrr)rYrsrnrors rrz!ConsumingClassifier.predict_proba)st#   ((#a&#dmm*BBnn(?..eE.JC  rNr`rarbrrirxrrrrrrs2#Rrrc,eZdZdZddZddZdZdZy)WeightedMetaRegressorz*A meta-regressor which is also a consumer.Nc ||_||_yrrrgrYrrgs rrizWeightedMetaRegressor.__init__"  rc |j|jj|t||t|dfd|i|}t |j j ||fi|j j |_|SNrrxrnrgr(r0rr rrxr)rYrsrtrnrrs rrxzWeightedMetaRegressor.fitss == $ MM  &M: uXMXZX3%/33AqQFs> {G6FG*t  **1M0B0B0L0LMMrct|jjj|jt jddjddS)Nrrxr r)r&r )rrr`r r&rr^s rrz$MetaTransformer.get_metadata_routingBsTDNN$;$;<@@(((? SeS , S KS 8 A  rr)r`rarbrrirxrrrrrr$r$3s$' N rr$)Tr)6r! collectionsr functoolsrnumpyr7 numpy.testingr sklearn.baserrrr r r sklearn.metrics._scorerr r sklearn.model_selectionrsklearn.model_selection._splitr sklearn.utils._metadata_requestsrsklearn.utils.metadata_routingrrrsklearn.utils.multiclassrr0tuplerBrqrErUrrWrdrrrrrrrrrrrrrr$rrrr8sa#,@6> C0,?Dg(V&oeL::  ++\ %_m %F NM Q/=Qh N-@ N R0C R R)< R /+]/d*UgU"+-?6& $. D/-8 (*:M r