
    {KghO                     	   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`maZambZb ddlcmdZdmeZe d ZfdYdZg G d de      Zhej                  j                  d  eegd!      d"fegd#f eegd$      d#f e)d%&      d'f e)dd(d)d*+      d,f eh       d-fg      d.        ZkdZd/Zld0 Zm eb en e el        em                         d1        Zod2 Zpd3 Zqd4 Zrej                  j                  d5 er             d6        Zsej                  j                  eed78      eNd9               Zud: Zvd; Zwd< Zxd= Zyd> Zz eb en ez                   d?        Z{ej                  j                  d@ el       eRA      dB        Z|ej                  j                  d@ el       eRA      dC        Z}dD Z~ en e el        e> e)d&            g en ez              e~                   Zej                  j                  d@eeRA      dE        ZdFdGgZdH Z eldI      D  cg c]  }  e|       r|  c} Zej                  j                  dIeeRA      dJ        Z el       D  cg c]  }  e| dK      s|  c} Zej                  j                  d@eeRA      dL        Zej                  j                  dM eH       D  cg c]  \  }} | 	 c} }      dN        Zej                  j                  d@ e el        em        ey        ez             eRA      dO        Zej                  j                  dMeeee7e8e:e;eEeFeee9e0e/e.g      dP        Z en e eldI       e> eC        eA              eBdQR       e@dST      g            Zej                  j                  d@eeRA      dU        Zej                  j                  d@eeRA      ej                  j                  dVe^eXe_eYg      dW               Zej                  j                  d@ el       eRA      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_inplace_ensure_writeable!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      ]/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/tests/test_common.py test_all_estimator_no_base_classrP   _   sE    )+iR
&, 	 ::<**627C72	 ,       c                      y N )xys     rO   _sample_funcrX   h   s    rQ   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 rT   rU   )selfs    rO   __call__zCallableEstimator.__call__r   s    rQ   N)__name__
__module____qualname____doc__r]   rU   rQ   rO   rZ   rZ   l   s    
rQ   rZ   zval, expected)rW   z_sample_func(y=1)rX   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 rT   )r4   )valexpecteds     rO   test_get_check_estimator_idsrl   v   s    . $C(H444rQ   c              #   r   K   t        |       D ]  \  }}	 t        |      }|  y # t        $ r Y $w xY ww)Ntype_filter)r-   r3   r0   )ro   rL   rM   	estimators       rO   _tested_estimatorsrq      sC     )kBi	+I6I  C  		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*   )rt   s    rO   _generate_pipelinerv      s@     !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   rp   checkrequests      rO   test_estimatorsr      s1     
=2Dk"R	S +i 
T	S	Ss	   9Ac                  H    t        t               d      } t        |       sJ y )NT)generate_only)r8   r   r   )all_instance_gen_checkss    rO   "test_check_estimator_generate_onlyr      s#    -.@.BRVW.///rQ   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        rO   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
classifierrn   Trecord_required_parametersrg   )	r-   r   r   getattrlen
get_paramskeys
issubclassr   )classifiersrL   clazzrequired_parameterss       rO   _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 rT   )r6   )rL   
Classifiers     rO   -test_class_weight_balanced_linear_classifiersr      s    1$
CrQ   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 rT   rU   _s    rO   <lambda>z-test_import_all_consistency.<locals>.<lambda>   s    rQ   )r   prefixonerrorr   z.tests.zsklearn._build_utils_svmlight_format_ioz feature_extraction._hashing_fastdummy)fromlist__all__rU   z#Module '{0}' has no attribute '{1}')r   r   dirnamer   r   pkgutilwalk_packagesrE   
__import__r   hasattrrI   )sklearn_pathpkgsr   modnamesubmodspackagerL   s          rO   test_import_all_consistencyr      s     GGOOG$4$456L   *nD -11D=1gqwDG1i[(!W,!W,1W<Ww7GY3D7D) +P+W+W, ) 4 ) 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testsrH   setupconftestc                      y rT   rU   r   s    rO   r   z3test_root_import_all_completeness.<locals>.<lambda>   s    TrQ   )r   r   .r   )	r   r   r   r   r   r   r   rK   r   )r   
EXCEPTIONSr   r   s       rO   !test_root_import_all_completenessr      st    GGOOG$4$456L@J ..>7A '>W//4:8M'//)))rQ   c                     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searchrI   )HAS_TESTS_EXCEPTIONSresource_modulesr   r   rL   ispkglookupmissing_testss           rO   test_all_tests_are_importabler     s     ::	*
 GGOOG$4$456L &33LTTNAtU 	eT   "<<>)KD%(($++D18O6) 	)   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   rD   rN   s    rO   test_class_support_removedr   +  s\     EC	y	,*+ 
- 
y	,!3 45 
-	, 
-	, 
-	,s   A+A7+A47B c               #   D   K   t        dt               ddgfg       y w)Ntrans1r   rR   )transformers)r   r*   rU   rQ   rO   &_generate_column_transformer_instancesr   7  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?      ?rc   min_resourcessmallestcv   ridge__alphalogisticregression__Craise)error_score)r   r   r   r   r   r   r   
parametersr2   r   r&   r   
set_params)SearchCVrM   
param_gridinit_paramsextra_params	search_cvs         rO   _generate_search_cv_instancesr   ?  sr    -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rx   )r1   r{   r   r|   r   r}   s      rO   test_search_cvr   k  s7    
 
	

 	i
 
 
s   	3<rp   )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)rp   tagsrL   tagcorrect_tagss        rO   test_valid_tag_typesr	  {  sS    
 i DZZ\	cM$/0?"($/L#|,,, "rQ   c                 Z    t        |        t        | j                  j                  |        y rT   )r5   r=   	__class__r^   )rp   s    rO   &test_check_n_features_in_after_fittingr    s"     Y'%i&9&9&B&BINrQ   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_stoppingrR   )r  n_iter_no_change>   MLPRegressorMLPClassifierzMLP still validates in fitr   )marksr  )r  )
rq   setr   r   r  r^   r   parammarkxfail)rp   
est_paramsests      rO   _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)Nry   Tr   z was fitted without feature names)
r5   r1   r{   r   r   r7   r  r^   strmessage)rp   r   warnings      rO   #test_pandas_column_name_consistencyr     s}     Y'	=	2$$D1V4##,,i 2 G5S=QQQQ  
3	211 
3	2s(   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   rR   )r   r_   split"GET_FEATURES_OUT_MODULES_TO_IGNORE)transformermodules     rO   '_include_in_get_feature_names_out_checkr)    s7    {34##))#.q1F;;;rQ   r'  c                     t        |        t        t              5  t        | j                  j
                  |        t        | j                  j
                  |        d d d        y # 1 sw Y   y xY wrx   )r5   r1   r{   rB   r  r^   rC   )r'  s    rO   'test_transformers_get_feature_names_outr+    sT     [)	=	2/!!**K	
 	7!!**K	
	 
3	2	2s   AA&&A/r$  c                 ^    | j                   j                  }t        |        t        ||        y rT   )r  r^   r5   r9   )rp   estimator_names     rO   +test_estimators_get_feature_names_out_errorr.    s'     ((11NY'%ni@rQ   rM   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      @rR   NrU   )r   r   nparrayr   )rM   paramssmoke_test_valuesvaluekey
new_paramsr  s          rO   9test_estimators_do_not_raise_errors_in_init_or_set_paramsr9    s     y!,,FS,#s0Dqc2rR",23FSc5jF
3 %*% 	$$ #3s   
A'c                 ^    | j                   j                  }t        |        t        ||        y rT   )r  r^   r5   r>   rp   rL   s     rO   test_check_param_validationr<    s'     ''DY'4+rQ   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_featuresre   	transformpredict)r   r2  asfortranarrayroundfitr   rB  rC  )rM   Xr   rW   r  s        rO   !test_f_contiguous_array_estimatorrH    s    2 qqADAq
!A
1a4A
+CGGAqMsK asIA rQ   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 APIry   )	r  r^   r   r   r   r5   r1   r{   r?   r;  s     rO   test_set_output_transformrM  H  sp     ''D9l+6tf = 	
 Y'	=	2"9#6#6#?#?K 
3	2	2s   !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 yetry   )r  r^   r   r   r   r5   r1   r{   )rp   rN  rL   s      rO   $test_set_output_transform_configuredrP  W  s}     ''D9l+
++,E$ 8" "	
 Y'	=	29&&//; 
3	2	2s   $BBc                    | j                   j                  }t        | d      r| j                  d       n-t        | d      r| j                  d       nt	        | d      t        |        |dk(  r| j                  dd	
       |dk(  r| j                  d       |dk(  r| j                  d       t        ||        y )NcopyF)rR  copy_X)rS  z! doesn't require writeable input.HDBSCANprecomputedbrute)metric	algorithmr   full)
svd_solver	KernelPCA)kernel)r  r^   r   r   r0   r5   r<   r;  s     rO   #test_check_inplace_ensure_writeabler]  o  s     ''Dy&!%(	H	%E*$@ABBY' yMWEu}/{M2"43rQ   )rR   rT   )ra   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   rD   sklearn.utils.fixesrE   rF   rP   rX   rZ   r  parametrizerl   rq   rv   listr   r   r   r   r   r  r   r   r   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]  )r  rL   s   00rO   <module>r}     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*#L	6)X ;=>? @ #%+C  	-	- #%+C  OO
;* 		)A.	/0*,-')	  '-E  RR & "< "-00.s3 0  .4L  	
	
 &')'C738O+PC') %
 6<T  AA (*+*YT3S*+%	% 	.0%'	 	!  	,	, ! ()(& 	=).*LN;.,?	
	  &,D  	L	L &,D   ),)0		<	< #%+C  44I,)  ,s    S!S0S;S