
    Q3j                        U d dl Z d dlZd dlZd dl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mZ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mZ d dlm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@mAZAmBZB d dlCmDZD d dlEmFZF d dlGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ d dlRmSZS ej                  j                  d      ZVd\  ZWZXeVj                  eWeX      ZZeVj                  d deW      Z\e\dk\  j                  e^      Z_ ej                  e\      ZaeVj                  d deWdf      Zb ecebj                  d         D  cg c]  } ej                  ebdd| f          c} ZeeVj                  d deW      ZfeVj                  eW      ZgeVj                  d d ehe\            Zig eAddeZebddgd e@dd!eZebddgdd"eeiid#edd!eZe\dgd$d%e?dd!eZebdgd eBddeZebdgd e&d&d'd(d)eZe\d*dd+gd,dgd-e3dd!d.d/d0d1giieZe\dgd$d*dd+gd,dgd2e7dd!d3d/d0d1giieZe\dgd$d*dd+gd,dgd2e5dd!d.d/d0d1giieZe\dgd$d*dd+gd,dgd2e6dd!d3d/d0d1giieZe\dgd$d*dd+gd,dgd2e2dd!eZe_dgd$d%e8dd!eZe_dgd$d*dd+gd,dgd4e<dd!eZe\ddgdd"eaiid#e;dd!eZe\ddgd$dd"eaiid5e=dd!d6dieZe\dgd7edd!eZe\ddgdd"eaiid#e)eZe\d,dgd8e"eZe\d,dgd8e$eZe\d,dgd8e'eZebd,dgd8e(eZebd,dgd8e#eZe\d,dgd8e%eZe\d,dgd8e*ddd9dd:eZe\d$g d;ddd+gid<	e ddd=d&ieZe\dgd7edd!eZe\d&dd>gfd?d@dAdBgd?d@gd?d@gg dCdCdDeddeZe\d&dd>gfd?gdEe,eZe\d*dgdFe+eZe\d*dgdFe,eZe\d*dgd,dgdGe+eZe\d*dgd,dgdGeeZe\d,dgd8eddeZe\dd?gdHeFdd!eZe\dIg dJddd+gidDedd!eZe\dgd*dgd,dgdK
ed!deZe\g d;dHed!ddgd,dgd*dd+geZe\dL
eDeZe\d,dMgd8ZjekeldN<   	 ejD cg c]  } em|dO   j                         c}Zo e        e       gZpdP ZqdQ ZrdIdRdSZsej                  j                  dep       edIT      dU               Zvej                  j                  dep       edIT      dV               Zw edIT      dW        Zxej                  j                  dOejeoX       edIT      dY               Zyej                  j                  dOejeoX       edIT      dZ               Zzej                  j                  dOejeoX       edIT      d[               Z{ej                  j                  dOejeoX       edIT      d\               Z|ej                  j                  dOejeoX       edIT      d]               Z}ej                  j                  dOejeoX       edIT      d^               Z~ej                  j                  dOejeoX       edIT      d_               Zyc c} w c c}w )`    N)config_context)BaseEstimatoris_classifier)CalibratedClassifierCV)TransformedTargetRegressor)GraphicalLassoCV)AdaBoostClassifierAdaBoostRegressorBaggingClassifierBaggingRegressor)UnsetMetadataPassedError)enable_halving_search_cvenable_iterative_imputer)RFERFECVSelectFromModelSequentialFeatureSelector)IterativeImputer)ElasticNetCVLarsCVLassoCVLassoLarsCVLogisticRegressionCVMultiTaskElasticNetCVMultiTaskLassoCVOrthogonalMatchingPursuitCVRANSACRegressorRidgeClassifierCVRidgeCV)mean_squared_error)make_scorer)FixedThresholdClassifierGridSearchCV
GroupKFoldHalvingGridSearchCVHalvingRandomSearchCVRandomizedSearchCVTunedThresholdClassifierCVcross_validate)OneVsOneClassifierOneVsRestClassifierOutputCodeClassifier)ClassifierChainMultiOutputClassifierMultiOutputRegressorRegressorChain)TargetEncoder)SelfTrainingClassifier)
ConsumingClassifierConsumingRegressorConsumingScorerConsumingSplitter)ConsumingSplitterInheritingFromGroupKFoldNonConsumingClassifierNonConsumingRegressor	_Registryassert_request_is_emptycheck_recorded_metadata)MetadataRouter*   )d         )size   
   	estimator	regressorfitpartial_fit)metaestimatorestimator_namerE   Xyestimator_routing_methods
classifierclasses)rI   rJ   rE   rK   rL   rM   method_argssubset)rI   rJ   rE   rK   rL   rM   preserves_metadataF)r   neg_log_loss)use_legacy_attributes	l1_ratiosscoringrV   scorecv)rI   	init_argsrK   rL   scorer_namescorer_routing_methodscv_namecv_routing_methods
param_gridalphag?g?)rI   rJ   rE   rY   rK   rL   rM   rR   rZ   r[   r\   r]   param_distributions)rI   rJ   rE   rK   rL   rM   rR   rZ   r[   r\   r]   )rI   rJ   rE   rK   rL   rM   rR   rP   random_state)rI   rJ   rE   rY   rK   rL   rM   )rI   rK   rL   r\   r]   g      ?)min_samples
max_trials)rG   predictrW   )	rI   rJ   rE   rY   rK   rL   rR   rM   method_mappingskip_completemetadatard   predict_probapredict_log_probadecision_function)rd   rh   ri   )rI   rJ   rE   rK   rL   rR   rM   re   )rI   rJ   rE   rK   rL   rR   rM   )rI   rK   rL   rZ   r[   )rI   rK   rL   rZ   r[   r\   r]   )rI   rE   rJ   rK   rL   rM   T)rG   rd   rh   ri   rj   rW   )
rI   rJ   rE   rK   rL   rM   rZ   r[   r\   r]   )
rI   rE   rJ   rM   r\   r]   rZ   r[   rK   rL   fit_transformMETAESTIMATORSrI   c                 &   | j                  di       j                         }d\  }}d\  }}d\  }}d| v rs| d   }	t               }| d   }
|r-|
dk(  rt        |      }nG|
dk(  rt	        |      }n6t        d      |
dk(  rt               }n|
dk(  rt               }nt        d      |||	<   d| v r | d   }t               }t        |	      }|||<   d
| v r8| d
   }t               }| d   t        u rt        |	      }nt        |	      }|||<   |||f||f||ffS )a=  Get the init args for a metaestimator

    This is a helper function to get the init args for a metaestimator from
    the METAESTIMATORS list. It returns an empty dict if no init args are
    required.

    Parameters
    ----------
    metaestimator_info : dict
        The metaestimator info from METAESTIMATORS

    sub_estimator_consumes : bool
        Whether the sub-estimator consumes metadata or not.

    Returns
    -------
    kwargs : dict
        The init args for the metaestimator.

    (estimator, estimator_registry) : (estimator, registry)
        The sub-estimator and the corresponding registry.

    (scorer, scorer_registry) : (scorer, registry)
        The scorer and the corresponding registry.

    (cv, cv_registry) : (CV splitter, registry)
        The CV splitter and the corresponding registry.
    rY   )NNrE   rJ   rF   rN   z!Unpermitted `sub_estimator_type`.rZ   )registryr\   rI   )getcopyr:   r4   r3   
ValueErrorr9   r8   r5   r1   r7   r6   )metaestimator_infosub_estimator_consumeskwargsrE   estimator_registryscorerscorer_registryrX   cv_registryrJ   sub_estimator_typerZ   r\   s                _/DATA/.local/lib/python3.12/site-packages/sklearn/tests/test_metaestimators_metadata_routing.pyget_init_argsr{     si   >  ##K499;F$.!I!(FO OB((+,<=&[/<!![0./AB	#|3/0BC	 !DEE![013	#|324	 !DEE!*~**(7#+ /:${&&$Y/ko.-?:KPB"K8Bw 		&'	!	[	     c                 j    t               }| D ]#  }t        |t              r|}ddg}n|\  }}|||<   % |S )a  Process estimator_routing_methods and return a dict.

    Parameters
    ----------
    estimator_routing_methods : list of str or tuple
        The estimator_routing_methods info from METAESTIMATORS.

    Returns
    -------
    routing_methods : dict
        The dictionary is of the form {"method": ["metadata", ...]}.
        It specifies the list of metadata keys for each routing method.
        By default the list includes `sample_weight` and `metadata`.
    sample_weightrg   )dict
isinstancestr)rM   resmethod_specmethodrg   s        rz   "filter_metadata_in_routing_methodsr   S  sH     &C0k3' F'4H*FHF 1 Jr|   )valuec                    |D ]`  }|j                  ||g      D ]H  }t        | d| d      } |di ||i t        | t              s.t	        |       s:|dk(  s@ |d       J b y)a  Call `set_{method}_request` on a list of methods from the sub-estimator.

    Parameters
    ----------
    obj : BaseEstimator
        The object for which `set_{method}_request` methods are called.

    method_mapping : dict
        The method mapping in the form of `{caller: [callee, ...]}`.
        If a "caller" is not present in the method mapping, a one-to-one mapping is
        assumed.

    methods : list of str
        The list of methods as "caller"s for which the request for the child should
        be set.

    metadata_name : str
        The name of the metadata to be routed, usually either `"metadata"` or
        `"sample_weight"` in our tests.

    value : None, bool, or str
        The request value to be set, by default it's `True`
    set__requestrH   TrO   N )ro   getattrr   r   r   )objre   methodsmetadata_namer   callercalleeset_request_for_methods           rz   set_requestsr   m  so    0 $((&:F%,SD2I%J""<mU%;<3.!#&m+&t4 ; r|   )enable_metadata_routingc                     t        j                  t              5  | j                          ddd       y# 1 sw Y   yxY w)zvTest that get_metadata_routing is not implemented on meta-estimators for
    which we haven't implemented routing yet.N)pytestraisesNotImplementedErrorget_metadata_routingrE   s    rz   0test_unsupported_estimators_get_metadata_routingr     s)    
 
*	+&&( 
,	+	+s   4=c                     t        j                  t              5  	 | j                  dggdgdg       	 ddd       y# t        $ r t        w xY w# 1 sw Y   yxY w)zTest that fit raises NotImplementedError when metadata routing is
    enabled and a metadata is passed on meta-estimators for which we haven't
    implemented routing yet.rC   r~   N)r   r   r   rG   	TypeErrorr   s    rz   -test_unsupported_estimators_fit_with_metadatar     sZ     
*	+	&MMA3%!QCM8 
,	+  	& &%	& 
,	+s   A>AAAc                      t               } t               }| |usJ | t        j                  |       u sJ | t        j                  |       u sJ y )N)r:   rp   deepcopy)abs     rz   test_registry_copyr     sK     	AAA::		!a    r|   )idsc                     | d   }t        | d      ^}} |di |}d| v rddgi}nd }t        |j                         |       t        |j                         t              sJ y )	NrI   Trs   r\   splittersplit)excluder   )r{   r;   r   r   r=   )rI   metaestimator_classrt   _instancer   s         rz   test_default_requestr     ss     (8}TJJFQ",V,HM! y)H99;WMh335~FFFr|   c           
         d| vry | d   }| d   }| d   }t        | d         }|j                         D ]  \  }}|D ]  }t        | d      ^}\  }	}
\  }}
}
|r |j                  di |di t        t
        d|   }||i} |di |}d	| d
|	j                  j                   d| }t        j                  t        t        j                  |            5  t        ||      }d|vr4t        |	| j                  di       dg|        |j                   ||fi | t        |	| j                  di       dg|d        	  |||fi | d d d         ! y # t"        $ r  ||fi | Y #w xY w# 1 sw Y   <xY w)NrE   rI   rK   rL   rM   Tr   r~   rg   [zJ] are passed but are not explicitly set as requested or not requested for .)matchrG   re   re   r   r   )re   r   r   r   r   )r   itemsr{   set_score_requestr~   rg   	__class____name__r   r   r   reescaper   r   ro   rG   r   )rI   r   rK   rL   routing_methodsmethod_namemetadata_keyskeyrt   rE   r   rv   valmethod_kwargsr   msgr   s                    rz   0test_error_on_missing_requests_for_sub_estimatorr     s   
 -' 	'8cAcA812O '6&;&;&="] C6Cd73FNYKVQ! (((7C;7$1xHMC #JM*4V4HC5 ""+"5"5">">!?qO  7ryy~N ;7+ !'4'8'89I2'N!&&)	 !HLLA77 #0#4#45Er#J"G"%/1a1=13 ON ! '>P ! /1../5 ONs+   A&E.=
EE+	(E.*E+	+E..E8c           
         d| vry | d   }| d   }| d   }t        | d         }| j                  di       }| j                  dd      }|j                         D ]  \  }}|D ]  }	t        t        d	|	   }
|	|
i}t        | d
      \  }\  }}\  }}\  }}|rt        |i dg|	       |r|j                  dd       t        |||g|	        |di |}t        ||      }| j                  di       j                  |i       }d|vr|j                  ||       	  |||fi || |sJ |dk(  r|j                         nd}|D ]  }t        |f|||d|    y # t        $ r  ||fi || Y Mw xY w)NrE   rI   rK   rL   rM   re   rR   Tr   r   rW   r   groupsrg   rP   rG   rQ   r   )r   parentsplit_params)r   ro   r   r~   rg   r{   r   set_split_requestr   rG   r   keysr<   )rI   r   rK   rL   r   re   rR   r   r   r   r   r   rt   rE   rn   rv   r   rX   r   r   extra_method_argsr   s                         rz   3test_setting_request_on_sub_estimator_removes_errorr     s    
 -' 	'8cAcA812O #&&'7<N&**+?F&5&;&;&="] C$1xHMC #JMBOdC?F)Y;FAQ 2yPS $$D4$@ -$!	 +4V4HX{3F - 1 1- D H HR! K'Q"@q!B}B0AB O8(:h(F""$B  &	'&&!-	
 $ &U ! '>D  @q?M?->?@s   EE/.E/c                    d| vry d }| d   }| d   }| d   }t        | d         }|D ]  }t        | d      \  }\  }}	\  }	}	\  }	}	 |di |}
 |||       t        |
|      }| j                  d	i       j                  |i       }d
|vr |
j                  ||fi | 	  |||fi |  y # t
        $ r  ||fi | Y w xY w)NrE   c                 L    t        |       r|dk(  r| j                  d       y y y )NrH   Tr   )r   set_partial_fit_request)rE   r   s     rz   set_requestz7test_non_consuming_estimator_works.<locals>.set_requestT  s+    #}(D--d-; )E#r|   rI   rK   rL   rM   Fr   rP   rG   r   )r   r{   r   ro   rG   r   )rI   r   r   rK   rL   r   r   rt   rE   r   r   r   r   s                rz   "test_non_consuming_estimator_worksr   I  s    -' 	<
 (8cAcA812O '1>%2
.AAA '00I{+;/)--mR@DD[RTU#HLLA3!23	+1a-,- '  	+1*)*	+s   
B++C ?C c           
         d| vry| d   }| d   }| d   }| d   }| j                  di       }|D ]  }t        | d	      \  }\  }}	\  }
}\  }}	|
j                  d
       |r|j                  dd       |t	        |||gd        |di |}t        ||      }dt        i}d|vr|j                  ||        |||fi | |sJ |D ]  }t        d|d|d
d|   y)ziTest that any requested metadata is correctly routed to the underlying
    scorers in CV estimators.
    rZ   NrK   rL   rI   r[   re   Tr   r   r   r~   r   rG   rW   )r   r   r   r   r   )	ro   r{   r   r   r   r   r~   rG   r<   )rI   rK   rL   r   r   re   r   rt   rE   r   rv   rn   rX   r   r   r   _scorers                    rz   +test_metadata_is_routed_correctly_to_scorerr   q  s>    M)cAcA'8#$<=O"&&'7<N&>K$?
;A 2GR 	  t 4  t < -$-	 '00;/(-8#LLAq!%}%xG# "/	
    - 'r|   c           	      ~   d| vry| d   }| d   }| d   }| d   }|D ]  }t        | d      \  }\  }}\  }	}\  }
}|r|j                  dd	       |	r|	j                  dd	       |
j                  dd
        |di |}t        t
        d
}t        ||      } |||fi | |sJ |D ]  }t        d|d|d|   y)zkTest that any requested metadata is correctly routed to the underlying
    splitters in CV estimators.
    r]   NrI   rK   rL   Tr   Fr   r   r   )r   r   r   r   )r{   set_fit_requestr   r   r   rg   r   r<   )rI   r   r   X_y_r   rt   rE   r   rv   rX   rn   r   r   r   	_splitters                   rz   -test_metadata_is_routed_correctly_to_splitterr     s    =0'8#$89O	s	B	s	B&>K$?
;A^b( %%EE%J$$55$I
D48&00#)x@;/r2''x!I# gkER " 'r|   c                     d| vry| d   }| d   }| d   }t        | d      ^}}|j                  dd        |ddt        d	
      i|}t        |||dt        it        d	
      t        t        d             y)zTest that groups are routed correctly if group splitter of CV estimator is used
    within cross_validate. Regression test for issue described in PR #29634 to test that
    `ValueError: The 'groups' parameter should not be None.` is not raised.r]   NrI   rK   rL   Tr   rX      )n_splitsr   rd   )response_method)paramsrX   rV   r   )r{   popr$   r)   r   r!   r    )rI   r   r   r   rt   r   r   s          rz   &test_metadata_routed_to_group_splitterr     s     =0'8	s	B	s	B}TJJFQ
JJtT"Gj!&<GGH

&!q!.	Jr|   )rp   r   numpynpr   sklearnr   sklearn.baser   r   sklearn.calibrationr   sklearn.composer   sklearn.covariancer   sklearn.ensembler	   r
   r   r   sklearn.exceptionsr   sklearn.experimentalr   r   sklearn.feature_selectionr   r   r   r   sklearn.imputer   sklearn.linear_modelr   r   r   r   r   r   r   r   r   r   r   sklearn.metrics._regressionr    sklearn.metrics._scorerr!   sklearn.model_selectionr"   r#   r$   r%   r&   r'   r(   r)   sklearn.multiclassr*   r+   r,   sklearn.multioutputr-   r.   r/   r0   sklearn.preprocessingr1   sklearn.semi_supervisedr2   %sklearn.tests.metadata_routing_commonr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   sklearn.utils.metadata_routingr=   randomRandomStaterngNMrandrK   randintrL   astypeinty_binaryuniquerO   y_multirangeshapeclasses_multirg   r~   lenr   rl   list__annotations__r   r   METAESTIMATOR_IDSUNSUPPORTED_ESTIMATORSr{   r   r   markparametrizer   r   r   r   r   r   r   r   r   r   )irows   00rz   <module>r     s
    	   " 5 6 6 /  8  ,    ; /	 	 	 
  0 :   :iiB1HHQNKK11KF??3
"))A,
++a!Q+
(38q9I3JK3Ja71a4=)3JK;;q"1;%	QQ	(v-% &+]%;v /%!&+]%;%	='ABv& 0%!&+W&%v8 )%!&+W7vH (% &+WGvX . &+%

  #('"2$gWvv &%!"WsCj$9:&+W& #('"2$guvR ,%!+gSz-BC&+W& #('"2$gQvn -%!"WsCj$9:&+W& #('"2$gmvJ /%!+gSz-BC&+W& #('"2$gIvf 2%!&+W&evx 4%!&+W& #('"2$gwvR -%!&+]%;%	7';<Qvd ,%!&+]%;&%	7';<	cvx .%!$b)&+WwvJ )%!&+]%;%	7';<Iv\ 5$g[vj &$givx !$gwvF /$gEvT *$gSvb  $gavp %$gov~ )% %(;&%@ 5'"23
}vT *% %u-&+WSvf +%!#ZL!&
 "?3'9!R
evN *% #',zl&;Y%GMv` ! #('_vn + #('mv| ! #('$g{vN	 + #('$gM	v`	 *$g_	vn	 4 %&+Y%7m	v~	 0%!"&
 !5'"23}	v`
 3%!&+W #('$g_
vx
 !%%@w
vH !%&+W$g #('"2Gv` './_v vn&R DRR>CS_-667>R   IX4 HL !5H &<=-) . >) &<=-
& . >
& -! .! .>OP-G . QG .>OP-8/ . Q8/v .>OP-C . QCL .>OP-#+ . Q#+L .>OP-+ . Q+\ .>OP- . QB .>OP- . Q[ LL Ss   1W/:W4