
    UghO                     
   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 Zfd[dZg G d de          Zheji        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.             Zkd\d/Zld0 Zm eb en e el             em                                          d1             Zod2 Zpd3 Zqd4 Zreji        j                    d5 er                      d6             Zseji        t                    eed78          eNd9                         Zud: Zvd; Zwd< Zxd= Zyd> Zz eb en ez                                d?             Z{eji        j                    d@ el            eRA          dB             Z|eji        j                    d@ el            eRA          dC             Z}dD Z~ en e el             e> e)d&                    g en ez                       e~                                Zeji        j                    d@eeRA          dE             ZdFdGgZdH ZdI  eldJ          D             Zeji        j                    dJeeRA          dK             ZdL  el            D             Zeji        j                    d@eeRA          dM             Zeji        j                    dNdO  eH            D                       dP             Zeji        j                    d@ e el             em             ey             ez                      eRA          dQ             Zeji        j                    dNeeee7e8e:e;eEeFeee9e0e/e.g          dR             Z en e eldJ           e> eC             eA                       eBdST           e@dUV          g                    Zeji        j                    d@eeRA          dW             Zeji        j                    d@eeRA          eji        j                    dXe^eXe_eYg          dY                         Zeji        j                    d@ el            eRA          dZ             ZdS )]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 ]K\  } }d                    |           }|                                                     d          r
J |            Ld S )NzDBase estimators such as {0} should not be included in all_estimatorsbase)r-   formatlower
startswith)name	Estimatormsgs      X/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/tests/test_common.py test_all_estimator_no_base_classrP   _   sg    )++ 8 8iR
&,, 	 ::<<**62277C7777	8 8       c                     d S N )xys     rO   _sample_funcrX   h   s    DrQ   c                       e Zd ZdZd ZdS )CallableEstimatorzqDummy development stub for an estimator.

    This is to make sure a callable estimator passes common tests.
    c                     d S 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                 0    t          |           |k    sJ d S rT   )r4   )valexpecteds     rO   test_get_check_estimator_idsrl   v   s#    . $C((H444444rQ   c              #      K   t          |           D ]*\  }}	 t          |          }n# t          $ r Y "w xY w|V  +d S )Ntype_filter)r-   r3   r0   )ro   rL   rM   	estimators       rO   _tested_estimatorsrq      so      )kBBB  i	+I66II 	 	 	H	  s   )
66c               #      K   t                      t                      fD ]&} t          dt                      fd| fg          V  'd S )Nscalerfinal_estimator)steps)r   r   r%   r*   )rt   s    rO   _generate_pipelinerv      sp      !GG%7%9%9: 
 
>++,"O4
 
 
 	
 	
 	
 	

 
rQ   c                     t          t          t          t          f          5  t	          |             ||            d d d            d S # 1 swxY w Y   d S Ncategory)r1   FutureWarningr   UserWarningr5   rp   checkrequests      rO   test_estimatorsr      s     
=2Dk"R	S	S	S   +++i                 s   AAAc                  b    t          t                      d          } t          |           sJ d S )NT)generate_only)r8   r   r   )all_instance_gen_checkss    rO   "test_check_estimator_generate_onlyr      s8    -.@.B.BRVWWW.///////rQ   c                  8   t          j                    } t          t          j                  j        j        }t           j                            |d          }t           j                            |          st          j
        d           	 t          j        |           t          j        }ddgt          _        t          j                    5  t          j        dt"                     t%          d          5 }t'          |                                t+          d                     d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |t          _        t          j        |            d S # |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&''.5JW\\*j99N7>>.)) .,---
8($&& 	: 	: !(K888j!! :QQVVXXtZ888999: : : : : : : : : : : : : : :		: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 
 
sU   AE7 *E
61D3'E
3D7	7E
:D7	;E
>E7 
EE7 EE7 7"Fc               #   p  K   t          d          } t          j        d          5  | D ]q\  }}t          |dg           }t	          |          r&d |                                                                            v rt          |t                    r||fV  r	 d d d            d S # 1 swxY w Y   d S )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"L&'' !3!3!5!5!:!:!<!<<<,B B< Ek!!!		"
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
"s   A5B++B/2B/zname, Classifierc                 &    t          | |           d S rT   )r6   )rL   
Classifiers     rO   -test_class_weight_balanced_linear_classifiersr      s    1$
CCCCCrQ   z,importlib not supported for Pyodide packages)reasonc                     t           j                            t          j                  g} t          j        | dd           }d |D             }|dgz   D ]o}d|v rd|v rt          r	d|v sd	|v rt          |d
          }t          |dd          D ]0}t          ||          sJ d                    ||                      1pd S )Nsklearn.c                     d S rT   rU   _s    rO   <lambda>z-test_import_all_consistency.<locals>.<lambda>   s     rQ   )r   prefixonerrorc                     g | ]\  }}}|	S rU   rU   ).0r   modnames      rO   
<listcomp>z/test_import_all_consistency.<locals>.<listcomp>   s    111=1gqw111rQ   r   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pkgssubmodsr   packagerL   s         rO   test_import_all_consistencyr      s&    GOOG$4556L  *nn  D 21D111Gi[(  !W,, 	!W,,1W<<Ww777GY33 	 	D7D))  +P+W+W, ,    	 rQ   c                      t           j                            t          j                  g} d}t          j        | d           D ]4\  }}}d|v s|                    d          s||v r$|t          j        v sJ 5d S )N)utilstestsrH   setupconftestc                     d S rT   rU   r   s    rO   r   z3test_root_import_all_completeness.<locals>.<lambda>   s    T rQ   )r   r   .r   )	r   r   r   r   r   r   r   rK   r   )r   
EXCEPTIONSr   r   s       rO   !test_root_import_all_completenessr      s    GOOG$4556L@J .>>   * *7A '>>W//44>:8M8M'/)))))* *rQ   c                  Z   t          j        d          h dt          j                            t
          j                  g} d t          j        | d          D             fd	                                D             }|g k    sJ d
                    |                      d S )Nz(?x)
                                      \.externals(\.|$)|
                                      \.tests(\.|$)|
                                      \._
                                      >   sklearn.datasets.datasklearn.datasets.descrsklearn.datasets.imagesc                     i | ]	\  }}}||
S rU   rU   )r   r   rL   ispkgs       rO   
<dictcomp>z1test_all_tests_are_importable.<locals>.<dictcomp>  s0       AtU 	e  rQ   r   )r   c                 ^    g | ])\  }}|r"|vr                     |          s	|d z   v'|*S )z.tests)search)r   rL   r   HAS_TESTS_EXCEPTIONSlookupresource_moduless      rO   r   z1test_all_tests_are_importable.<locals>.<listcomp>  sd       D% ((($++D11 )8O6)) 	
 *))rQ   z{{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   itemsrI   )r   missing_testsr   r   r   s     @@@rO   test_all_tests_are_importabler     s     :	*   
 GOOG$4556L %3LTTT  F     !<<>>  M B	 6-(( rQ   c                  *   d} t          j        t          |           5  t          t                     d d d            n# 1 swxY w Y   t          j        t          |           5  t          t          g           d d d            d S # 1 swxY w Y   d S )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	,	,	, 6 6!3 45556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s!   ?AA%BBBc               #   R   K   t          dt                      ddgfg          V  d S )Ntrans1r   rR   )transformers)r   r*   rU   rQ   rO   &_generate_column_transformer_instancesr   7  sJ      
~''!Q0
       rQ   c               #     K   t          t          t          t          t          gt          dddgift
          dddgifg          D ]M\  } \  }}t          |           j        }d|v rddini } |  |            |fddi|}t          |           |V  Nt          t          t          t          t          gt          d	ddgift
          d
ddgifg          D ]{\  } \  }}t          |           j        }d|v rddini } | t          t                       |                      |fddi|                    d          }t          |           |V  |d S )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  ?  s     -4		
 WsCj)*#Sz!23	
. .  ))9j  ))4-<-K-K_j))QS 	 HYY[[*KKKlKK	###-4!		
 ^c3Z01"9C:!FG	
. .  ))9j  ))4-<-K-K_j))QS 	 H#%%--z
 
>?
CO
 

**
)
) 	 	###) rQ   c                     t          t          t          t          t          f          5   ||            d d d            d S # 1 swxY w Y   d S rx   )r1   r{   r   r|   r   r}   s      rO   test_search_cvr  k  s    
 
	

 
 
   	i                 s   AA	Arp   )idsc                     t          |           }|                                D ]@\  }}t          t          |                   }|dk    r	|t          f}t          ||          sJ AdS )z$Check that estimator tags are valid._xfail_checksN)r/   r   typer.   r   
isinstance)rp   tagsrL   tagcorrect_tagss        rO   test_valid_tag_typesr  {  sv    
 i  DZZ\\ - -	cM$/00?""($/L#|,,,,,,- -rQ   c                 X    t          |            t          | j        j        |            d S rT   )r5   r=   	__class__r^   )rp   s    rO   &test_check_n_features_in_after_fittingr    s.     Y'''%i&9&BINNNNNrQ   c               #     K   t                      D ]} t          |                                           }d|v r|                     dd          V  Ad|v ra|                     dd          }|j        j        dv r7t          j        |t          j        	                    d	          
          V  |V  d|v r|                     d          V  d S )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0
*$$&&&FFFFFF++&&dQ&OOC}%)JJJlv{005Q0RR       				:--&&&:::::; ;rQ   c                 J   t          |            t          t                    5  t          j        d          5 }t          | j        j        |            d d d            n# 1 swxY w Y   |D ]}dt          |j	                  vsJ 	 d d d            d S # 1 swxY w Y   d S )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&    sU    Y'''	=	2	2	2 R R$D111 	V4#,i  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  	R 	RG5S=Q=QQQQQQ	RR R R R R R R R R R R R R R R R R Rs4   BA"B"A&	&B)A&	* BBBensemblekernel_approximationc                 x    t          | d          rdS | 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/    sA    {344 t#))#..q1F;;;rQ   c                 0    g | ]}t          |          |S rU   )r/  r   r   s     rO   r   r     s6       .s33  rQ   r-  c                     t          |            t          t                    5  t          | j        j        |            t          | j        j        |            d d d            d S # 1 swxY w Y   d S rx   )r5   r1   r{   rB   r  r^   rC   )r-  s    rO   'test_transformers_get_feature_names_outr3    s     [)))	=	2	2	2 
 
/!*K	
 	
 	
 	7!*K	
 	
 	
	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   5A''A+.A+c                 2    g | ]}t          |d           |S )r*  )r   r1  s     rO   r   r     s8     ) ) )738O+P+P)) ) )rQ   c                 \    | j         j        }t          |            t          ||            d S rT   )r  r^   r5   r9   )rp   estimator_names     rO   +test_estimators_get_feature_names_out_errorr7    s3     (1NY'''%ni@@@@@rQ   rM   c                     g | ]\  }}|S rU   rU   )r   rL   r   s      rO   r   r     s    +++YT3S+++rQ   c                     t          |           j        }dddt          j        ddg          dgi g g}|D ]%fd|D             } | d	i |} |j        d	i | &dS )
z3Check that init or set_param does not raise errors.g      @
helloworldr   g      @rR   c                     i | ]}|S rU   rU   )r   keyvalues     rO   r   zMtest_estimators_do_not_raise_errors_in_init_or_set_params.<locals>.<dictcomp>  s    333Sc5333rQ   NrU   )r   r   nparrayr   )rM   paramssmoke_test_values
new_paramsr   r>  s        @rO   9test_estimators_do_not_raise_errors_in_init_or_set_paramsrD    s     y!!,FS,#s0D0Dqc2rR" % %3333F333
 i%%*%% 	$$$$$$% %rQ   c                 \    | j         j        }t          |            t          ||            d S rT   )r  r^   r5   r>   rp   rL   s     rO   test_check_param_validationrG    s3     'DY'''4+++++rQ   c                 l   t          ddd          \  }}t          j        |          }t          j        |d d df                   } |             }|                    ||           t          |d          r|                    |           t          |d          r|                    |           d S d S )NP      r   )	n_samples
n_featuresre   	transformpredict)r   r?  asfortranarrayroundfitr   rM  rN  )rM   Xr   rW   r   s        rO   !test_f_contiguous_array_estimatorrS    s    2 qqAAADAq
!A
111a4A
)++CGGAqMMM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            d S # 1 swxY w Y   d S )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?   rF  s     rO   test_set_output_transformrX  H  s     'D9l++ 
t   	
 	
 	
 Y'''	=	2	2	2 L L"9#6#?KKKL L L L L L L L L L L L L L L L L Ls   BBB
check_funcc                 $   | j         j        }t          | d          s t          j        d|j         d| d           t          |            t          t                    5   || j         j        |            d d d            d S # 1 swxY w Y   d S )NrW  z	Skipping z for z%: Does not support set_output API yetry   )r  r^   r   r   r   r5   r1   r{   )rp   rY  rL   s      rO   $test_set_output_transform_configuredr[  W  s     'D9l++ 
"
+ " "$ " " "	
 	
 	
 Y'''	=	2	2	2 < <
9&/;;;< < < < < < < < < < < < < < < < < <s   !BB	B	c                    | j         j        }t          | d          r|                     d           n9t          | d          r|                     d           nt	          | d          t          |            |dk    r|                     dd	
           |dk    r|                     d           |dk    r|                     d           t          ||            d S )NcopyF)r]  copy_X)r^  z! doesn't require writeable input.HDBSCANprecomputedbrute)metric	algorithmr   full)
svd_solver	KernelPCA)kernel)r  r^   r   r   r0   r5   r<   rF  s     rO   #test_check_inplace_ensure_writeablerh  o  s    'Dy&!! C%((((	H	%	% CE****$AAABBBY''' yMWEEEu}}///{M222"433333rQ   )rR   rT   )ra   r   r   r   r   r   	functoolsr   inspectr   r   	itertoolsr   r   pathlibr   numpyr?  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_ESTIMATORSr3  %ESTIMATORS_WITH_GET_FEATURE_NAMES_OUTr7  rD  rG  rS  SET_OUTPUT_ESTIMATORSrX  r[  rh  rU   rQ   rO   <module>r     s    
			  				 



        * * * * * * * * $ $ $ $ $ $ $ $             & & & & & &              . - - - - - ' ' ' ' ' ' % % % % % % C C C C C C C C        ; : : : : : : : < < < < < < A A A A A A A A A A                         5 4 4 4 4 4 4 4            E D D D D D D D ( ( ( ( ( ( 9 9 9 9 9 9 9 9         
                                       ( 3 2 2 2 2 2 2 28 8 8	 	 	 	        		#	#	#%89	~&	w	'	'8		c	"	"	"$?@"'	  6	
 
			34# ,5 5- ,5   
 
 
 ee$6$6$8$8:L:L:N:NOOPPQQ  RQ0 0 0
  0" " "  +-G-G-I-IJJD D KJD 8$RSS   TS4* * *# # #L	6 	6 	6  ) ) )X ;;==>>??  @? ##%%+C   	- 	- 	- ##%%+C   O O O
; ; ;* 	E	))A...	/	/0**,,--''))	    '-E   R R R & "< < < !!-00    .4L   	
 	
 	
) )%%'') ) ) %
 6<T   A A A ++..**+++ % %	 % 	E..00%%''	  	!  	 	, ,	 	, !  ( ) (& 	E=))M..**LLNN;;M...,???	
 	 	  &,D   	L 	L 	L &,D    ),)0	 	< 	<  	< ##%%+C   4 4 4 4 4rQ   