
    h$,faL                     	   d Z ddlZ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mZ ddlmZ ddlZddlZddlZddlmZmZmZ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" ddl#m$Z$m%Z% ddl&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z< ddl=m>Z>m?Z?m@Z@mAZA ddlBmCZCmDZD ddlEmFZFmGZGmHZH ddlImJZJmKZK ddlLmMZMmNZNmOZO ddlPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZa d ZbdTdZcej                  j                  d eecd      dfecdf eecd       df e'd!"      d#f e'dd$d%d&'      d(fg      d)        ZfdUd*Zgd+ Zh ea ei e eg        eh                         d,        Zjd- Zkd. Zld/ Zmej                  j                  d0 em             d1        Znej                  j                  eFd23      eNd4               Zpd5 Zqej                  j                  ej                  d63      d7        Ztd8 Zud9 Zvd: Zw ea ei ew                   d;        Zxej                  j                  d< eg       eR=      d>        Zyej                  j                  d< eg       eR=      d?        Zzd@ Z{ ei e eg        e< e'd"            g ei ew              e{                   Z|ej                  j                  d<e|eR=      dA        Z}dBdCgZ~dD Z egdE      D  cg c]  }  e|       r|  c} Zej                  j                  dEeeR=      dF        Z eg       D  cg c]  }  e| dG      s|  c} Zej                  j                  d<eeR=      dH        Zej                  j                  dI eH       D  cg c]  \  }} | 	 c} }      dJ        Zej                  j                  d< e eg        eh        ev        ew             eR=      dK        Zej                  j                  dIeeee5e6e8e9eCeDeee7e.e-e,g      dL        Z ei e egdE       e< eA        e?              e@dMN       e>dOP      g            Zej                  j                  d<eeR=      dQ        Zej                  j                  d<eeR=      ej                  j                  dRe]eXe^eYg      dS               Zyc c} w c c} w c c} }w )Vz.
General tests for all estimators in sklearn.
    N)partial)isgenerator	signature)chainproduct)Path)OPTICSAffinityPropagationBirch	MeanShiftSpectralClustering)ColumnTransformer)
make_blobs)PCA)ConvergenceWarningFitFailedWarning)enable_halving_search_cvenable_iterative_imputer)LogisticRegressionRidge)LinearClassifierMixin)TSNEIsomapLocallyLinearEmbedding)GridSearchCVHalvingGridSearchCVHalvingRandomSearchCVRandomizedSearchCV)KNeighborsClassifierKNeighborsRegressorLocalOutlierFactorRadiusNeighborsClassifierRadiusNeighborsRegressor)Pipelinemake_pipeline)FunctionTransformerMinMaxScalerOneHotEncoderStandardScaler)LabelPropagationLabelSpreading)_IS_WASMIS_PYPYall_estimators)_DEFAULT_TAGS
_safe_tags)SkipTestignore_warningsset_random_state)_construct_instance_get_check_estimator_ids_set_checking_parameters-check_class_weight_balanced_linear_classifier(check_dataframe_column_names_consistencycheck_estimator!check_get_feature_names_out_error$check_global_output_transform_pandas(check_global_set_output_transform_polars!check_n_features_in_after_fittingcheck_param_validationcheck_set_output_transform!check_set_output_transform_pandas!check_set_output_transform_polars'check_transformer_get_feature_names_out.check_transformer_get_feature_names_out_pandasparametrize_with_checksc                      t               D ]<  \  } }dj                  |       }| j                         j                  d      s7J |        y )NzDBase estimators such as {0} should not be included in all_estimatorsbase)r.   formatlower
startswith)name	Estimatormsgs      9lib/python3.12/site-packages/sklearn/tests/test_common.py test_all_estimator_no_base_classrN   \   sJ    )+ 8iR
&, 	 ::<**627C72	8       c                      y N )xys     rM   _sample_funcrV   e   s    rO   zval, expected)rU   z_sample_func(y=1)rV   worldg       @)CzLogisticRegression(C=2.0)z	newton-cgbalancedT)random_statesolverclass_weight
warm_startz]LogisticRegression(class_weight='balanced',random_state=1,solver='newton-cg',warm_start=True)c                 $    t        |       |k(  sJ y rR   )r5   )valexpecteds     rM   test_get_check_estimator_idsra   i   s    , $C(H444rO   c              #   r   K   t        |       D ]  \  }}	 t        |      }|  y # t        $ r Y $w xY ww)Ntype_filter)r.   r4   r1   )rd   rJ   rK   	estimators       rM   _tested_estimatorsrf      sG     )kB i	+I6I   		s   7(7	4747c               #   v   K   t               t               fD ]  } t        dt               fd| fg         y w)Nscalerfinal_estimator)steps)r   r   r$   r)   )ri   s    rM   _generate_pipelinerk      sE     !G%7%9: 
>+,"O4
 	

s   79c                     t        t        t        t        f      5  t	        |         ||        d d d        y # 1 sw Y   y xY wNcategory)r2   FutureWarningr   UserWarningr6   re   checkrequests      rM   test_estimatorsru      s9     
=2Dk"R	S  +i  s	   9Ac                  H    t        t               d      } t        |       sJ y )NT)generate_only)r9   r   r   )all_instance_gen_checkss    rM   "test_check_estimator_generate_onlyry      s#    -.@.BRVW.///rO   c                  V   t        j                  d       t        j                         } t	        t
        j                        j                  j                  }t        j                  j                  |d      }t        j                  j                  |      st        j                  d       	 t        j                  |       t        j                  }ddgt        _        t        j                          5  t        j"                  dt$               t'        d      5 }t)        |j+                         t-        d             d d d        d d d        |t        _        t        j                  |        y # 1 sw Y   2xY w# 1 sw Y   6xY w# t        _        t        j                  |        w xY w)NCythonzsetup.pyzsetup.py not availableconfigignore__main__)__name__)pytestimportorskiposgetcwdr   sklearn__file__parentpathjoinexistsskipchdirsysargvwarningscatch_warningssimplefilterrq   openexecreaddict)cwd
setup_pathsetup_filenameold_argvfs        rM   test_configurer      s     !
))+Cg&&'..55JWW\\*j9N77>>.),-
88)$$& 	: !!(K8j! :QQVVXtZ89:		: 
	: :		: 	: 
s=   ,AF 2&E:%E.=E:F .E7	3E::F?F "F(c               #   <  K   t        d      } t        j                  d      5  | D ][  \  }}t        |dg       }t	        |      rd |       j                         j                         v sEt        |t              sV||f ] 	 d d d        y # 1 sw Y   y xY ww)N
classifierrc   Trecord_required_parametersr\   )	r.   r   r   getattrlen
get_paramskeys
issubclassr   )classifiersrJ   clazzrequired_parameterss       rM   _tested_linear_classifiersr      s      \:K		 	 	- 
"& 		"KD%")%1G"L&'!3!3!5!:!:!<<,B Ek!		"
" 
" 
"s)   #BAB-B>B	BBBzname, Classifierc                     t        | |       y rR   )r7   )rJ   
Classifiers     rM   -test_class_weight_balanced_linear_classifiersr      s    1$
CrO   z,importlib not supported for Pyodide packages)reasonc                     t         j                  j                  t        j                        g} t        j                  | dd       }|D cg c]  \  }}}|
 }}}|dgz   D ]]  }d|v rd|v rt        r	d|v sd|v rt        |d	
      }t        |dd      D ]%  }t        ||      rJ dj                  ||              _ y c c}}w )Nsklearn.c                      y rR   rS   _s    rM   <lambda>z-test_import_all_consistency.<locals>.<lambda>       rO   )r   prefixonerrorr   z.tests.zsklearn._build_utils_svmlight_format_ioz feature_extraction._hashing_fastdummy)fromlist__all__rS   z#Module '{0}' has no attribute '{1}')r   r   dirnamer   r   pkgutilwalk_packagesr-   
__import__r   hasattrrG   )sklearn_pathpkgsr   modnamesubmodspackagerJ   s          rM   test_import_all_consistencyr      s     GGOOG$4$456L   *nD -11=1gqw1G1i[( !W,!W,1W<Ww7GY3 	D7D) +P+W+W, )	 2s   Cc                     t         j                  j                  t        j                        g} d}t        j                  | d       D ]4  \  }}}d|v s|j                  d      s||v r!|t        j                  v r4J  y )N)utilstestsrF   setupconftestc                      y rR   rS   r   s    rM   r   z3test_root_import_all_completeness.<locals>.<lambda>   r   rO   )r   r   .r   )	r   r   r   r   r   r   r   rI   r   )r   
EXCEPTIONSr   r   s       rM   !test_root_import_all_completenessr      sy    GGOOG$4$456L@J ..> *7A '>W//4:8M'//)))*rO   zwThis test fails with Meson editable installs see https://github.com/mesonbuild/meson-python/issues/557 for more detailsc                     t        j                  d      } h d}t        j                  j	                  t
        j                        g}t        j                  |d      D ci c]	  \  }}}|| }}}}|j                         D cg c]%  \  }}|r||vr| j                  |      s	|dz   |vr|' }}}|g k(  sJ dj                  |             y c c}}}w c c}}w )Nz(?x)
                                      \.externals(\.|$)|
                                      \.tests(\.|$)|
                                      \._
                                      >   sklearn.datasets.datasklearn.datasets.descrsklearn.datasets.imagesr   )r   z.testsz{{0} do not have `tests` subpackages. Perhaps they require __init__.py or an add_subpackage directive in the parent setup.py)recompiler   r   r   r   r   r   r   itemssearchrG   )HAS_TESTS_EXCEPTIONSresource_modulesr   r   rJ   ispkglookupmissing_testss           rM   test_all_tests_are_importabler      s     :: '* +

 GGOOG$4$456L &33LT AtU 	eF  "<<>D%(($++D18O6) 	M  B 	 6-(s   #C*Cc                     d} t        j                  t        |       5  t        t               d d d        t        j                  t        |       5  t        t        g       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)Nz8Passing a class was deprecated.* isn't supported anymore)match)r   raises	TypeErrorr9   r   rD   rL   s    rM   test_class_support_removedr   &  sl     EC	y	, ,*+, 
y	, 6!3 456 6, ,6 6s   A+A7+A47B c               #   D   K   t        dt               ddgfg       y w)Ntrans1r   rP   )transformers)r   r)   rS   rO   rM   &_generate_column_transformer_instancesr   2  s)     
~'!Q0
 s    c               #   P  K   t        t        t        t        t        gt        dddgift
        dddgifg      D ]G  \  } \  }}t        |       j                  }d|v rddini } |  |       |fddi|}t        |       | I t        t        t        t        t        gt        d	ddgift
        d
ddgifg      D ]i  \  } \  }}t        |       j                  }d|v rddini } | t        t                |             |fddi|j                  d      }t        |       | k y w)Nalphag?      ?rX   min_resourcessmallestcv   ridge__alphalogisticregression__Craise)error_score)r   r   r   r   r   r   r   
parametersr3   r   r%   r   
set_params)SearchCVrK   
param_gridinit_paramsextra_params	search_cvs         rM   _generate_search_cv_instancesr   :  s|    -4		
 WsCj)*#Sz!23	
. ))9j  )44-<-K_j)QS 	 Y[*KKlK	#%( .5!		
 ^c3Z01"9C:!FG	
. ))9j  )44-<-K_j)QS 	 #%-z
>?
CO

**
) 	 	#)s   D$D&c                 ~    t        t        t        t        t        f      5   ||        d d d        y # 1 sw Y   y xY wrm   )r2   rp   r   rq   r   rr   s      rM   test_search_cvr   f  s<    
 
	

  	i  s   	3<re   )idsc                     t        |       }|j                         D ]2  \  }}t        t        |         }|dk(  r|t        f}t        ||      r2J  y)z$Check that estimator tags are valid._xfail_checksN)r0   r   typer/   r   
isinstance)re   tagsrJ   tagcorrect_tagss        rM   test_valid_tag_typesr  v  sX    
 i DZZ\ -	cM$/0?"($/L#|,,,-rO   c                 Z    t        |        t        | j                  j                  |        y rR   )r6   r=   	__class__r   )re   s    rM   &test_check_n_features_in_after_fittingr    s"     Y'%i&9&9&B&BINrO   c               #     K   t               D ]  } t        | j                               }d|v r| j                  dd       6d|v rh| j                  dd      }|j                  j
                  dv r8t        j                  |t        j                  j                  d	      
       | d|v s| j                  d        y w)N	oob_scoreT)r  	bootstrapearly_stoppingrP   )r
  n_iter_no_change>   MLPRegressorMLPClassifierzMLP still validates in fitr   )marksr  )r  )
rf   setr   r   r  r   r   parammarkxfail)re   
est_paramsests      rM   _estimators_that_predict_in_fitr    s     ') ;	--/0
*$&&&FF+&&dQ&OC}}%%)JJllv{{005Q0R  	:-&&&::;s   B1C4Cc                 <   t        |        t        t              5  t        j                  d      5 }t        | j                  j                  |        d d d        D ]  }dt        |j                        vrJ  	 d d d        y # 1 sw Y   3xY w# 1 sw Y   y xY w)Nrn   Tr   z was fitted without feature names)
r6   r2   rp   r   r   r8   r  r   strmessage)re   r   warnings      rM   #test_pandas_column_name_consistencyr    s     Y'	=	2 R$$D1 	V4##,,i	  	RG5S=QQQQ	RR R	 	R Rs(   B!B$B9BB	BBensemblekernel_approximationc                 h    t        | d      ry| j                  j                  d      d   }|t        vS )Nget_feature_names_outTr   rP   )r   
__module__split"GET_FEATURES_OUT_MODULES_TO_IGNORE)transformermodules     rM   '_include_in_get_feature_names_out_checkr$    s7    {34##))#.q1F;;;rO   r"  c                     t        |        t        t              5  t        | j                  j
                  |        t        | j                  j
                  |        d d d        y # 1 sw Y   y xY wrm   )r6   r2   rp   rB   r  r   rC   )r"  s    rM   'test_transformers_get_feature_names_outr&    s]     [)	=	2 
/!!**K	
 	7!!**K	
	
 
 
s   AA&&A/r  c                 ^    | j                   j                  }t        |        t        ||        y rR   )r  r   r6   r:   )re   estimator_names     rM   +test_estimators_get_feature_names_out_errorr)    s'     ((11NY'%ni@rO   rK   c                     t        |       j                  }dddt        j                  ddg      dgi g g}|D ],  }|D ci c]  }|| }} | di |} |j                  di | . yc c}w )	z3Check that init or set_param does not raise errors.g      @
helloworldr   g      @rP   NrS   )r   r   nparrayr   )rK   paramssmoke_test_valuesvaluekey
new_paramsr  s          rM   9test_estimators_do_not_raise_errors_in_init_or_set_paramsr4    s     y!,,FS,#s0Dqc2rR" %,23Sc5j3
3 %*% 	$$%3s   
A'c                 ^    | j                   j                  }t        |        t        ||        y rR   )r  r   r6   r>   re   rJ   s     rM   test_check_param_validationr7     s'     ''DY'4+rO   c                 0   t        ddd      \  }}t        j                  |      }t        j                  |d d df         } |        }|j	                  ||       t        |d      r|j                  |       t        |d      r|j                  |       y y )NP      r   )	n_samples
n_featuresrZ   	transformpredict)r   r-  asfortranarrayroundfitr   r=  r>  )rK   Xr   rU   r  s        rM   !test_f_contiguous_array_estimatorrC    s    2 qqADAq
!A
1a4A
+CGGAqMsK asIA rO   F)sparse_outputz
one-to-one)feature_names_outc                    | j                   j                  }t        | d      st        j                  d| d       t        |        t        t              5  t        | j                   j                  |        d d d        y # 1 sw Y   y xY w)N
set_outputz(Skipping check_set_output_transform for z!: Does not support set_output APIrn   )	r  r   r   r   r   r6   r2   rp   r?   r6  s     rM   test_set_output_transformrH  C  s}     ''D9l+6tf = 	
 Y'	=	2 L"9#6#6#?#?KL L Ls   !BB

check_funcc                 .   | j                   j                  }t        | d      s&t        j                  d|j                   d| d       t        |        t        t              5   || j                   j                  |        d d d        y # 1 sw Y   y xY w)NrG  z	Skipping z for z%: Does not support set_output API yetrn   )r  r   r   r   r   r6   r2   rp   )re   rI  rJ   s      rM   $test_set_output_transform_configuredrK  R  s     ''D9l+
++,E$ 8" "	
 Y'	=	2 <9&&//;< < <s   $BB)rP   rR   )__doc__r   r   r   r   r   	functoolsr   inspectr   r   	itertoolsr   r   pathlibr   numpyr-  r   r   sklearn.clusterr	   r
   r   r   r   sklearn.composer   sklearn.datasetsr   sklearn.decompositionr   sklearn.exceptionsr   r   sklearn.experimentalr   r   sklearn.linear_modelr   r   sklearn.linear_model._baser   sklearn.manifoldr   r   r   sklearn.model_selectionr   r   r   r   sklearn.neighborsr   r    r!   r"   r#   sklearn.pipeliner$   r%   sklearn.preprocessingr&   r'   r(   r)   sklearn.semi_supervisedr*   r+   sklearn.utilsr,   r-   r.   sklearn.utils._tagsr/   r0   sklearn.utils._testingr1   r2   r3   sklearn.utils.estimator_checksr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rN   rV   r  parametrizera   rf   rk   listru   ry   r   r   r   r  r   r   skipif_BUILT_WITH_MESONr   r   r   r   r   r  r  r  column_name_estimatorsr  r!  r$  GET_FEATURES_OUT_ESTIMATORSr&  r   %ESTIMATORS_WITH_GET_FEATURE_NAMES_OUTr)  r4  r7  rC  SET_OUTPUT_ESTIMATORSrH  rK  )r  rJ   s   00rM   <module>rl     s   
  	 
   * $      . ' % C ; < A A   5  E ; ; 9 
    *8	 		#%89	~&	w	'8	c	"$?@"'	6	
*5+*5
 e$6$8:L:NOPQ R0
8"  +-G-IJD KD 8$RS  T4* 	R  !!H	6)X ;=>? @ #%+C  	-	- #%+C  OO
;* 		)A.	/0*,-')	  '-E  RR & "< "-0.s3   .4L  	
	
 &')738O+PC) %
 6<T  AA (*+YT3S+%	% 	.0%'	 	!  	,	, ! ()(& 	=).*LN;.,?	
	  &,D  	L	L &,D   ),)0		<	<k,)  ,s   +R5,R:;R:R?