
    MtfL                     	   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 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/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z; ddl<m=Z=m>Z> ddl?m@Z@mAZAmBZBmCZC ddlDmEZEmFZF ddlGmHZH ddlImJZJmKZK ddlLmMZMmNZNmOZO ddlPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZa ddlbmcZcmdZd d ZedYdZf G d de      Zgej                  j                  d  eefd!      d"fefd#f eefd$      d#f e)d%&      d'f e)dd(d)d*+      d,f eg       d-fg      d.        ZjdZd/Zkd0 Zl ea em e ek        el                         d1        Znd2 Zod3 Zpd4 Zqej                  j                  d5 eq             d6        Zrej                  j                  edd78      eNd9               Ztd: Zuej                  j                  ej                  d;8      d<        Zxd= Zyd> Zzd? Z{ ea em e{                   d@        Z|ej                  j                  dA ek       eRB      dC        Z}ej                  j                  dA ek       eRB      dD        Z~dE Z em e ek        e> e)d&            g em e{              e                   Zej                  j                  dAeeRB      dF        ZdGdHgZdI Z ekdJ      D  cg c]  }  e|       r|  c} Zej                  j                  dJeeRB      dK        Z ek       D  cg c]  }  e| dL      s|  c} Zej                  j                  dAeeRB      dM        Zej                  j                  dN eH       D  cg c]  \  }} | 	 c} }      dO        Zej                  j                  dA e ek        el        ez        e{             eRB      dP        Zej                  j                  dNeeee7e8e:e;eEeFeee9e0e/e.g      dQ        Z em e ekdJ       e> eC        eA              eBdRS       e@dTU      g            Zej                  j                  dAeeRB      dV        Zej                  j                  dAeeRB      ej                  j                  dWe]eXe^eYg      dX               Zyc c} w c c} w c c} }w )[z.
General tests for all estimators in sklearn.
    N)partial)isgenerator	signature)chainproduct)Path)BaseEstimator)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)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_checks)_IS_PYPY_IS_WASMc                      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      c/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/sklearn/tests/test_common.py test_all_estimator_no_base_classrO   ^   sJ    )+ 8iR
&, 	 ::<**627C72	8       c                      y N )xys     rN   _sample_funcrW   g   s    rP   c                       e Zd ZdZd Zy)CallableEstimatorzqDummy development stub for an estimator.

    This is to make sure a callable estimator passes common tests.
    c                      y rS   rT   )selfs    rN   __call__zCallableEstimator.__call__q   s    rP   N)__name__
__module____qualname____doc__r\   rT   rP   rN   rY   rY   k   s    
rP   rY   zval, expected)rV   z_sample_func(y=1)rW   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)zCallableEstimator()c                 $    t        |       |k(  sJ y rS   )r4   )valexpecteds     rN   test_get_check_estimator_idsrk   u   s    . $C(H444rP   c              #   r   K   t        |       D ]  \  }}	 t        |      }|  y # t        $ r Y $w xY ww)Ntype_filter)r-   r3   r0   )rn   rK   rL   	estimators       rN   _tested_estimatorsrp      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*   )rs   s    rN   _generate_pipelineru      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)r1   FutureWarningr   UserWarningr5   ro   checkrequests      rN   test_estimatorsr      s9     
=2Dk"R	S  +i  s	   9Ac                  H    t        t               d      } t        |       sJ y )NT)generate_only)r8   r   r   )all_instance_gen_checkss    rN   "test_check_estimator_generate_onlyr      s#    -.@.BRVW.///rP   c                  ,   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)Nzsetup.pyzsetup.py not availabler}   ignore__main__)r]   )osgetcwdr   sklearn__file__parentpathjoinexistspytestskipchdirsysargvwarningscatch_warningssimplefilterr{   openexecreaddict)cwd
setup_pathsetup_filenameold_argvfs        rN   test_setup_py_checkr      s    ))+Cg&&'..55JWW\\*j9N77>>.),-
88($$& 	: !!(K8j! :QQVVXtZ89:		: 
	: :		: 	: 
s=   AE1 &E%%E(E%0E1 E"	E%%E.*E1 1"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
classifierrm   Trecord_required_parametersrf   )	r-   r   r   getattrlen
get_paramskeys
issubclassr   )classifiersrK   clazzrequired_parameterss       rN   _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 rS   )r6   )rK   
Classifiers     rN   -test_class_weight_balanced_linear_classifiersr      s    1$
CrP   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 rS   rT   _s    rN   <lambda>z-test_import_all_consistency.<locals>.<lambda>       rP   )r   prefixonerrorr   z.tests.zsklearn._build_utils_svmlight_format_ioz feature_extraction._hashing_fastdummy)fromlist__all__rT   z#Module '{0}' has no attribute '{1}')r   r   dirnamer   r   pkgutilwalk_packagesrD   
__import__r   hasattrrH   )sklearn_pathpkgsr   modnamesubmodspackagerK   s          rN   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testsrG   setupconftestc                      y rS   rT   r   s    rN   r   z3test_root_import_all_completeness.<locals>.<lambda>   r   rP   )r   r   .r   )	r   r   r   r   r   r   r   rJ   r   )r   
EXCEPTIONSr   r   s       rN   !test_root_import_all_completenessr      sy    GGOOG$4$456L@J ..> *7A '>W//4:8M'//)))*rP   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searchrH   )HAS_TESTS_EXCEPTIONSresource_modulesr   r   rK   ispkglookupmissing_testss           rN   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	TypeErrorr8   r   rC   rM   s    rN   test_class_support_removedr   1  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   rQ   )transformers)r   r*   rT   rP   rN   &_generate_column_transformer_instancesr   =  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?      ?rb   min_resourcessmallestcv   ridge__alphalogisticregression__Craise)error_score)r   r   r   r   r   r   r   
parametersr2   r   r&   r   
set_params)SearchCVrL   
param_gridinit_paramsextra_params	search_cvs         rN   _generate_search_cv_instancesr   E  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rw   )r1   rz   r   r{   r   r|   s      rN   test_search_cvr   q  s<    
 
	

  	i  s   	3<ro   )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)r/   r   typer.   r   
isinstance)ro   tagsrK   tagcorrect_tagss        rN   test_valid_tag_typesr	    sX    
 i DZZ\ -	cM$/0?"($/L#|,,,-rP   c                 Z    t        |        t        | j                  j                  |        y rS   )r5   r<   	__class__r]   )ro   s    rN   &test_check_n_features_in_after_fittingr    s"     Y'%i&9&9&B&BINrP   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_stoppingrQ   )r  n_iter_no_change>   MLPRegressorMLPClassifierzMLP still validates in fitr   )marksr  )r  )
rp   setr   r   r  r]   r   parammarkxfail)ro   
est_paramsests      rN   _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)Nrx   Tr   z was fitted without feature names)
r5   r1   rz   r   r   r7   r  r]   strmessage)ro   r   warnings      rN   #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   rQ   )r   r^   split"GET_FEATURES_OUT_MODULES_TO_IGNORE)transformermodules     rN   '_include_in_get_feature_names_out_checkr)    s7    {34##))#.q1F;;;rP   r'  c                     t        |        t        t              5  t        | j                  j
                  |        t        | j                  j
                  |        d d d        y # 1 sw Y   y xY wrw   )r5   r1   rz   rA   r  r]   rB   )r'  s    rN   'test_transformers_get_feature_names_outr+    s]     [)	=	2 
/!!**K	
 	7!!**K	
	
 
 
s   AA&&A/r$  c                 ^    | j                   j                  }t        |        t        ||        y rS   )r  r]   r5   r9   )ro   estimator_names     rN   +test_estimators_get_feature_names_out_errorr.    s'     ((11NY'%ni@rP   rL   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      @rQ   NrT   )r   r   nparrayr   )rL   paramssmoke_test_valuesvaluekey
new_paramsr  s          rN   9test_estimators_do_not_raise_errors_in_init_or_set_paramsr9    s     y!,,FS,#s0Dqc2rR" %,23Sc5j3
3 %*% 	$$%3s   
A'c                 ^    | j                   j                  }t        |        t        ||        y rS   )r  r]   r5   r=   ro   rK   s     rN   test_check_param_validationr<    s'     ''DY'4+rP   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_featuresrd   	transformpredict)r   r2  asfortranarrayroundfitr   rB  rC  )rL   Xr   rV   r  s        rN   !test_f_contiguous_array_estimatorrH    s    2 qqADAq
!A
1a4A
+CGGAqMsK asIA rP   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 APIrx   )	r  r]   r   r   r   r5   r1   rz   r>   r;  s     rN   test_set_output_transformrM  N  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)NrL  z	Skipping z for z%: Does not support set_output API yetrx   )r  r]   r   r   r   r5   r1   rz   )ro   rN  rK   s      rN   $test_set_output_transform_configuredrP  ]  s     ''D9l+
++,E$ 8" "	
 Y'	=	2 <9&&//;< < <s   $BB)rQ   rS   )r`   r   r   r   r   r   	functoolsr   inspectr   r   	itertoolsr   r   pathlibr   numpyr2  r   r   sklearn.baser	   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-   sklearn.utils._tagsr.   r/   sklearn.utils._testingr0   r1   r2   sklearn.utils.estimator_checksr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   sklearn.utils.fixesrD   rE   rO   rW   rY   r  parametrizerk   rp   ru   listr   r   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.  r9  r<  rH  SET_OUTPUT_ESTIMATORSrM  rP  )r  rK   s   00rN   <module>rr     s   
  	 
   * $     &  . ' % C ; < A A   5  E ( 9 
    & 38	  		#%89	~&	w	'8	c	"$?@"'	6	
 
	34#,5-,5
 e$6$8:L:NOPQ R0
0"  +-G-IJD KD 8$RS  T4* 	R  ##L	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   S	SS#S