o
    ?Hh!z                     @   s<  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
 d dlZd dlmZmZ d dlmZmZmZ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 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, d dl-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3m4Z4 G dd deZ5G dd deZ6G dd deZ7G dd deZ8G dd deZ9G dd de8Z:G dd de8e9Z;G d d! d!e;Z<G d"d# d#eZ=G d$d% d%eZ>G d&d' d'Z?G d(d) d)eZ@d*d+ ZAd,d- ZBd.d/ ZCd0d1 ZDd2d3 ZEd4d5 ZFd6d7 ZGd8d9 ZHd:d; ZId<d= ZJd>d? ZKd@dA ZLdBdC ZMejNOdDe& dEfe e& dFdGdHgidEfe"dIe& fgdEfe"dJe e& dFdGdHgifgdEfe' dKfe e' dFdGdHgidKfe"dLe' fgdKfe"dMe e' dFdGdHgifgdKfgdNdO ZPejNOdDe' dEfe e' dFdGdHgidEfe"dLe' fgdEfe"dMe e' dFdGdHgifgdEfe& dKfe e& dFdGdHgidKfe"dIe& fgdKfe"dJe e& dFdGdHgifgdKfgdPdQ ZQejNOdDe dEfe e dRdSdTgidEfe"dUe fgdEfe"dVe e dRdSdTgifgdEfe& dKfe e& dFdGdHgidKfe"dIe& fgdKfe"dJe e& dFdGdHgifgdKfgdWdX ZRdYdZ ZSd[d\ ZTd]d^ ZUejNOd_e)d`d daejVd dbfe*d`d daejWd dbfgdcdd ZXdedf ZYdgdh ZZdidj Z[G dkdl dle)Z\dmZ]dndo Z^G dpdq dqe)Z_drds Z`dtdu ZaG dvdw dwZbG dxdy dyebeZcdzd{ Zdd|d} ZeG d~d deZfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd ZpG dd dZqG dd deqeZrejNOde er gdd Zsdd ZtejNOdg ddd ZuedEddd ZvedEddd ZwdS )    N)assert_allclose)config_contextdatasets)BaseEstimatorOutlierMixinTransformerMixincloneis_classifieris_clustereris_outlier_detectoris_regressor)KMeans)PCA)IsolationForest)InconsistentVersionWarning)GridSearchCV)Pipeline)StandardScaler)SVCSVR)DecisionTreeClassifierDecisionTreeRegressor)MockDataFrame)_get_output_config)_convert_containerassert_array_equal)_check_n_featuresvalidate_datac                   @   s   e Zd ZdddZdS )MyEstimatorr   Nc                 C      || _ || _d S N)l1empty)selfr!   r"    r$   W/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/sklearn/tests/test_base.py__init__.      
zMyEstimator.__init__)r   N__name__
__module____qualname__r&   r$   r$   r$   r%   r   -       r   c                   @      e Zd ZdddZdS )KNc                 C   r   r    )cd)r#   r/   r0   r$   r$   r%   r&   4   r'   z
K.__init__NNr(   r$   r$   r$   r%   r.   3   r,   r.   c                   @   r-   )TNc                 C   r   r    )ab)r#   r3   r4   r$   r$   r%   r&   :   r'   z
T.__init__r1   r(   r$   r$   r$   r%   r2   9   r,   r2   c                          e Zd Z fddZ  ZS )NaNTagc                       t   }d|j_|S )NTsuper__sklearn_tags__
input_tags	allow_nanr#   tags	__class__r$   r%   r:   @      
zNaNTag.__sklearn_tags__r)   r*   r+   r:   __classcell__r$   r$   r?   r%   r6   ?       r6   c                       r5   )NoNaNTagc                    r7   NFr8   r=   r?   r$   r%   r:   G   rA   zNoNaNTag.__sklearn_tags__rB   r$   r$   r?   r%   rE   F   rD   rE   c                       r5   )OverrideTagc                    r7   rF   r8   r=   r?   r$   r%   r:   N   rA   zOverrideTag.__sklearn_tags__rB   r$   r$   r?   r%   rG   M   rD   rG   c                   @      e Zd ZdS )DiamondOverwriteTagNr)   r*   r+   r$   r$   r$   r%   rI   T       rI   c                   @   rH   )InheritDiamondOverwriteTagNrJ   r$   r$   r$   r%   rL   X   rK   rL   c                   @   s$   e Zd ZdZedgfddZdS )ModifyInitParamsz_Deprecated behavior.
    Equal parameters but with a type cast.
    Doesn't fulfill a is a
    r   c                 C   s   |  | _d S r    )copyr3   r#   r3   r$   r$   r%   r&   b      zModifyInitParams.__init__N)r)   r*   r+   __doc__nparrayr&   r$   r$   r$   r%   rM   \   s    rM   c                   @   s   e Zd ZdZdddZdS )Buggyz9A buggy estimator that does not set its parameters right.Nc                 C   s
   d| _ d S N   r3   rO   r$   r$   r%   r&   i      
zBuggy.__init__r    r)   r*   r+   rQ   r&   r$   r$   r$   r%   rT   f   s    rT   c                   @   s(   e Zd Zdd ZdddZd	ddZdS )
NoEstimatorc                 C      d S r    r$   r#   r$   r$   r%   r&   n      zNoEstimator.__init__Nc                 C      | S r    r$   r#   Xyr$   r$   r%   fitq   r]   zNoEstimator.fitc                 C   r[   r    r$   r#   r`   r$   r$   r%   predictt   r]   zNoEstimator.predictr1   r    )r)   r*   r+   r&   rb   rd   r$   r$   r$   r%   rZ   m   s    
rZ   c                   @   s   e Zd ZdZdd ZdS )VargEstimatorz-scikit-learn estimators shouldn't have vargs.c                 G   r[   r    r$   )r#   vargsr$   r$   r%   r&   {   r]   zVargEstimator.__init__NrY   r$   r$   r$   r%   re   x   s    re   c                  C   sn   ddl m} m} | |dd}t|}||usJ | | ks"J | |tdd}t|}||us5J d S )Nr   	SelectFpr	f_classif皙?alpha)
      )sklearn.feature_selectionrh   ri   r   
get_paramsrR   zerosrh   ri   selectornew_selectorr$   r$   r%   
test_clone   s   ru   c                  C   s<   ddl m} m} | |dd}d|_t|}t|drJ d S )Nr   rg   rj   rk   testown_attribute)ro   rh   ri   rw   r   hasattrrr   r$   r$   r%   test_clone_2   s
   ry   c                  C   s   t  } d| _tt t|  W d    n1 sw   Y  t }tt t| W d    n1 s6w   Y  t }tt t| W d    n1 sRw   Y  t	 }tt t| W d    d S 1 sow   Y  d S )Nrn   )
rT   r3   pytestraisesRuntimeErrorr   rZ   	TypeErrorre   rM   )buggyno_estimatorvarg_estestr$   r$   r%   test_clone_buggy   s"   



"r   c                  C   s^   t tg d} t| }t| j|j t ttdggd} t| }t| jj|jj d S )Nr"   r   )	r   rR   rS   r   r   r"   sp
csr_matrixdataclfclf2r$   r$   r%   test_clone_empty_array   s   r   c                  C   s(   t tjd} t| }| j|ju sJ d S Nr   )r   rR   nanr   r"   r   r$   r$   r%   test_clone_nan   s   r   c                  C   s*   dt  i} t| }| d |d usJ d S )Nr3   )r   r   )origclonedr$   r$   r%   test_clone_dict   s   
r   c                     sn    fddt tD } | D ]'  td}t|d}t|}|jj|jju s)J t|j	 |j	  qd S )Nc                    s0   g | ]}| d rttt|  tu r qS )_matrix)endswithtypegetattrr   ).0nameclsr$   r%   
<listcomp>   s    z.test_clone_sparse_matrices.<locals>.<listcomp>   r   )
dirr   rR   eyer   r   r"   r@   r   toarray)sparse_matrix_classessparse_matrixr   
clf_clonedr$   r   r%   test_clone_sparse_matrices   s   

r   c                  C   s&   t t d} t| }| j|ju sJ d S r   )r   r   r"   r   r$   r$   r%   test_clone_estimator_types   s   
r   c                  C   s@   d} t jt| d tt W d    d S 1 sw   Y  d S )Nz8You should provide an instance of scikit-learn estimatormatch)rz   r{   r}   r   r   )msgr$   r$   r%   %test_clone_class_rather_than_instance   s   
"r   c                  C   sT   t  } t|  tt t }t|dksJ tdgd d}tt|dks(J d S )NzT(a=K(), b=K())long_paramsi  rW   i  )r   reprr2   r.   len)my_estimatorrv   some_estr$   r$   r%   	test_repr   s   r   c                  C   s   t  } t|  d S r    )r   str)r   r$   r$   r%   test_str   s   r   c                  C   s   t t t} d| jddv sJ d| jddvsJ | jdd | jjdks(J tt | jdd W d    d S 1 s?w   Y  d S )Na__dT)deepFrn   )r   )a__a)	r2   r.   rp   
set_paramsr3   r0   rz   r{   
ValueError)rv   r$   r$   r%   test_get_params  s   "r   c                   C   s   t jtdd ttsJ W d    n1 sw   Y  t jtdd tts+J W d    n1 s5w   Y  t jtdd ttsHJ W d    n1 sRw   Y  t jtdd t	t
seJ W d    d S 1 spw   Y  d S )Nz!passing a class to.*is deprecatedr   )rz   warnsFutureWarningr	   r   r   r   r
   r   r   r   r$   r$   r$   r%   test_is_estimator_type_class  s   "r   zestimator, expected_resultTCrj   rV   svcsvc_cvFsvrsvr_cvc                 C      t | |ksJ d S r    )r	   	estimatorexpected_resultr$   r$   r%   test_is_classifier     r   c                 C   r   r    )r   r   r$   r$   r%   test_is_regressor/  r   r   
n_clusters      kmkm_cvc                 C   r   r    )r
   r   r$   r$   r%   test_is_clusterer@  r   r   c                  C   s   t dt fg} tt | jdd W d    n1 sw   Y  tt | jdd W d    d S 1 s:w   Y  d S )Nr   T)svc__stupid_param)svm__stupid_param)r   r   rz   r{   r   r   )r   r$   r$   r%   test_set_paramsQ  s   "r   c                     sR   G  fdddt } ddd td|  fgt|  i fD ]	}|jddd qd S )Nc                       s   e Zd Z fddZ  ZS )z?test_set_params_passes_all_parameters.<locals>.TestDecisionTreec                    s"   t  jdi | |ksJ | S )Nr$   )r9   r   )r#   kwargs)r@   expected_kwargsr$   r%   r   h  s   zJtest_set_params_passes_all_parameters.<locals>.TestDecisionTree.set_params)r)   r*   r+   r   rC   r$   r   r?   r%   TestDecisionTreeg  s    r   r   rn   )	max_depthmin_samples_leafr   )estimator__max_depthestimator__min_samples_leaf)r   r   r   r   )r   r   r$   r   r%   %test_set_params_passes_all_parametersc  s   

r   c                  C   s0   t t i } | jt dd | jjdksJ d S )Ng      E@)r   estimator__C)r   r   r   r   r   r   )gscvr$   r$   r%   $test_set_params_updates_valid_paramsv  s   r   ztree,datasetrn   )r   random_state)r   c           	      C   sh   t jd}|\}}| || |jddt|d}| ||}| j|||d}d}||ks2J |d S )Nr   rV   rm   )size)sample_weightz5Unweighted and weighted scores are unexpectedly equal)rR   randomRandomStaterb   randintr   score)	treedatasetrngr`   ra   r   score_unweightedscore_weightedr   r$   r$   r%   test_score_sample_weight~  s   r   c                  C   sb   G dd dt t} td}t|}| |dd}t|}|j|jkj s'J |j	|j	ks/J d S )Nc                   @   s,   e Zd ZdZd
ddZdddZdd	 ZdS )z3test_clone_pandas_dataframe.<locals>.DummyEstimatora,  This is a dummy class for generating numerical features

        This feature extractor extracts numerical features from pandas data
        frame.

        Parameters
        ----------

        df: pandas data frame
            The pandas data frame parameter.

        Notes
        -----
        NrV   c                 S   r   r    )dfscalar_param)r#   r   r   r$   r$   r%   r&     r'   z<test_clone_pandas_dataframe.<locals>.DummyEstimator.__init__c                 S   r[   r    r$   r_   r$   r$   r%   rb     r]   z7test_clone_pandas_dataframe.<locals>.DummyEstimator.fitc                 S   r[   r    r$   rc   r$   r$   r%   	transform  r]   z=test_clone_pandas_dataframe.<locals>.DummyEstimator.transformrU   r    )r)   r*   r+   rQ   r&   rb   r   r$   r$   r$   r%   DummyEstimator  s
    

r   rm   rV   )r   )
r   r   rR   aranger   r   r   valuesallr   )r   r0   r   ecloned_er$   r$   r%   test_clone_pandas_dataframe  s   
r   c                  C   s   G dd dt } tddgddgddgg}t |}|j}| |}t|j| t| |  t	ddgddgd	dgg}|| t|j| |
| t|j| t|}||u s`J t|j| d
S )z:Checks that clone works with `__sklearn_clone__` protocol.c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )z,test_clone_protocol.<locals>.FrozenEstimatorc                 S   s
   || _ d S r    )fitted_estimator)r#   r   r$   r$   r%   r&     rX   z5test_clone_protocol.<locals>.FrozenEstimator.__init__c                 S   s   t | j|S r    )r   r   )r#   r   r$   r$   r%   __getattr__  s   z8test_clone_protocol.<locals>.FrozenEstimator.__getattr__c                 S   r^   r    r$   r\   r$   r$   r%   __sklearn_clone__  r]   z>test_clone_protocol.<locals>.FrozenEstimator.__sklearn_clone__c                 _   r^   r    r$   r#   argsr   r$   r$   r%   rb     r]   z0test_clone_protocol.<locals>.FrozenEstimator.fitc                 _   s   | j j|i |S r    )r   r   r   r$   r$   r%   fit_transform     z:test_clone_protocol.<locals>.FrozenEstimator.fit_transformN)r)   r*   r+   r&   r   r   rb   r   r$   r$   r$   r%   FrozenEstimator  s    r   rn   r      rV   N)r   rR   rS   r   rb   components_r   r   get_feature_names_outasarrayr   r   )r   r`   pca
components
frozen_pcaX_newclone_frozen_pcar$   r$   r%   test_clone_protocol  s   

r  c                  C   s   t  } t | j| j}t|}d|v sJ t	  t
d t|}W d    n1 s1w   Y  || j| j}|| j| j}||ksLJ d S )N   _sklearn_versionerror)r   	load_irisr   rb   r   targetpickledumpswarningscatch_warningssimplefilterloadsr   )irisr   tree_pickletree_restoredscore_of_originalscore_of_restoredr$   r$   r%   ?test_pickle_version_warning_is_not_raised_with_matching_version  s   


r  c                   @      e Zd Zdd ZdS )TreeBadVersionc                 C   s   t | j ddS )N	something)_sklearn_version)dict__dict__itemsr\   r$   r$   r%   __getstate__  r   zTreeBadVersion.__getstate__Nr)   r*   r+   r  r$   r$   r$   r%   r        r  zTrying to unpickle estimator {estimator} from version {old_version} when using version {current_version}. This might lead to breaking code or invalid results. Use at your own risk.c                  C   s   t  } t | j| j}t|}tj	ddt
jd}tjt|d}t| W d    n1 s2w   Y  |jd j}t|tsDJ |jdksKJ |jdksRJ |jt
jksZJ d S )Nr  r  r   old_versioncurrent_versionr   r   )r   r  r  rb   r   r  r	  r
  pickle_error_messageformatsklearn__version__rz   r   UserWarningr  listmessage
isinstancer   estimator_nameoriginal_sklearn_versioncurrent_sklearn_version)r  r   tree_pickle_otherr(  warning_recordr$   r$   r%   <test_pickle_version_warning_is_issued_upon_different_version	  s    
r/  c                   @   r  )TreeNoVersionc                 C   s   | j S r    )r  r\   r$   r$   r%   r    s   zTreeNoVersion.__getstate__Nr  r$   r$   r$   r%   r0    r  r0  c                  C   s   t  } t | j| j}t|}d|vsJ tj	ddt
jd}tjt|d t| W d    d S 1 s9w   Y  d S )Nr  r0  zpre-0.18r  r   )r   r  r0  rb   r   r  r	  r
  r"  r#  r$  r%  rz   r   r&  r  )r  r   tree_pickle_noversionr(  r$   r$   r%   Dtest_pickle_version_warning_is_issued_when_no_version_info_in_pickle!  s   
"r2  c                  C   s   t  } t | j| j}t|}z0tj}dt_t	
  t	d t| W d    n1 s2w   Y  W |t_d S W |t_d S |t_w )N
notsklearnr  )r   r  r0  rb   r   r  r	  r
  r*   r  r  r  r  )r  r   r1  module_backupr$   r$   r%   Ctest_pickle_version_no_warning_is_issued_with_non_sklearn_estimator2  s   



r5  c                   @   s   e Zd Zdd Zdd ZdS )DontPickleAttributeMixinc                 C   s   | j  }d |d< |S N_attribute_not_pickled)r  rN   )r#   r   r$   r$   r%   r  C  rA   z%DontPickleAttributeMixin.__getstate__c                 C   s   d|d< | j | d S )NT	_restored)r  updater#   stater$   r$   r%   __setstate__H  s   z%DontPickleAttributeMixin.__setstate__N)r)   r*   r+   r  r=  r$   r$   r$   r%   r6  B  s    r6  c                   @   s   e Zd ZdddZdS )MultiInheritanceEstimatorr   c                 C      || _ d | _d S r    attribute_pickledr8  r#   rA  r$   r$   r%   r&   N  r'   z"MultiInheritanceEstimator.__init__Nr   r(   r$   r$   r$   r%   r>  M  r,   r>  c                  C   sJ   t  } d| _t| }t|}|jdksJ |jd u sJ |js#J d S N$this attribute should not be pickledr   )r>  r8  r	  r
  r  rA  r9  r   
serializedestimator_restoredr$   r$   r%   3test_pickling_when_getstate_is_overwritten_by_mixinS  s   

rI  c               	   C   s   z<t  } d}|| _t| j}dt| _|  }|d ddks J d|d< | | | jdks0J | js5J W |t| _d S |t| _w )NrE  r3  r   )r8  rA  r   rA  )r>  r8  r   r*   r  r=  rA  r9  )r   textold_modrG  r$   r$   r%   Ftest_pickling_when_getstate_is_overwritten_by_mixin_outside_of_sklearn^  s   


rL  c                       s&   e Zd ZdddZ fddZ  ZS )SingleInheritanceEstimatorr   c                 C   r?  r    r@  rB  r$   r$   r%   r&   r  r'   z#SingleInheritanceEstimator.__init__c                    s   t   }d |d< |S r7  )r9   r  r;  r?   r$   r%   r  v  rA   z'SingleInheritanceEstimator.__getstate__rC  )r)   r*   r+   r&   r  rC   r$   r$   r?   r%   rM  q  s    
rM  c                  C   s@   t  } d| _t| }t|}|jdksJ |jd u sJ d S rD  )rM  r8  r	  r
  r  rA  rF  r$   r$   r%   Ctest_pickling_works_when_getstate_is_overwritten_in_the_child_class|  s   

rN  c                  C   sr   t  } t }|  jjsJ | jjrJ t }| jjr!J t }| jjs,J t }| jjs7J d S r    )r6   rE   r:   r;   r<   rG   rI   rL   )nan_tag_estno_nan_tag_estredefine_tags_estdiamond_tag_estinherit_diamond_tag_estr$   r$   r%   test_tag_inheritance  s   rT  c                  C   sV   G dd dt } |  }d}tjt|d |  W d    d S 1 s$w   Y  d S )Nc                   @   s    e Zd ZdddZdddZdS )	z<test_raises_on_get_params_non_attribute.<locals>.MyEstimatorr   c                 S   r[   r    r$   )r#   paramr$   r$   r%   r&     r]   zEtest_raises_on_get_params_non_attribute.<locals>.MyEstimator.__init__Nc                 S   r^   r    r$   r_   r$   r$   r%   rb     r]   z@test_raises_on_get_params_non_attribute.<locals>.MyEstimator.fitrC  r    )r)   r*   r+   r&   rb   r$   r$   r$   r%   r         
r   z-'MyEstimator' object has no attribute 'param'r   )r   rz   r{   AttributeErrorrp   )r   r   r   r$   r$   r%   'test_raises_on_get_params_non_attribute  s   
"rX  c                  C   sv   t  } |  }d|v sJ d|v sJ tdd |  }d|v s#J d|vs)J W d    d S 1 s4w   Y  d S )Nz
text/plainz	text/htmlrJ  display)r   _repr_mimebundle_r   )r   outputr$   r$   r%   test_repr_mimebundle_  s   "r]  c               	   C   s   t  } |  }d|v sJ tdd. d}tjt|d |  }W d    n1 s+w   Y  W d    d S W d    d S 1 sCw   Y  d S )Nz<style>rJ  rY  z _repr_html_ is only defined whenr   )r   _repr_html_r   rz   r{   rW  )r   r\  r   r$   r$   r%   test_repr_html_wraps  s   
"r_  c                  C   sx   t  } g dg dg}t| |dd | jdksJ d}tjt|d t| dd	d W d
   d
S 1 s5w   Y  d
S )z>Check that `_check_n_features` validates data when reset=False)rV   rn   r   )r   r      Tresetr   zHX does not contain any features, but MyEstimator is expecting 3 featuresr   	invalid XFN)r   r   n_features_in_rz   r{   r   )r   X_trainr   r$   r$   r%   test_n_features_in_validation  s   "rf  c                  C   s4   t  } t| ddd t| drJ t| ddd dS )z]Check that `_check_n_features` does not validate data when
    n_features_in_ is not defined.rc  Tra  rd  FN)r   r   rx   )r   r$   r$   r%    test_n_features_in_no_validation  s   rg  c               	   C   s  t d} t }|j}| j||jd}G dd dtt}| 	|}t
|j|j |	| t|dr6J |	| d}| j||jddd d}t jt|d	 || W d   n1 saw   Y  d
}t jt|d	 || W d   n1 sw   Y  d}| 	|}t jt|d	 || W d   n1 sw   Y  | |}| }t  tdt |	| W d   n1 sw   Y  ||g}	|	D ]!}
t  tdt ||
 W d   n1 sw   Y  q| j|g dd}| }td}t jt|d	 |	| W d   n	1 s w   Y  t jt|d	 || W d   dS 1 s>w   Y  dS )z;Check that feature_name_in are recorded by `_validate_data`pandascolumnsc                   @      e Zd ZdddZdd ZdS )z.test_feature_names_in.<locals>.NoOpTransformerNc                 S      t | | | S r    r   r_   r$   r$   r%   rb        
z2test_feature_names_in.<locals>.NoOpTransformer.fitc                 S   s   t | |dd |S NFra  rm  rc   r$   r$   r%   r     s   z8test_feature_names_in.<locals>.NoOpTransformer.transformr    r)   r*   r+   rb   r   r$   r$   r$   r%   NoOpTransformer      
rq  feature_names_in_z5The feature names should match those that were passedNr   r   zVX does not have valid feature names, but NoOpTransformer was fitted with feature nameszIX has feature names, but NoOpTransformer was fitted without feature namesr  )r3   r4   rV   rn   a  Feature names are only supported if all input features have string names, but your input has ['int', 'str'] as feature name / column name types. If you want feature names to be stored and validated, you must convert them all to strings, by using X.columns = X.columns.astype(str) for example. Otherwise you can remove feature / column names from your input data, or convert them all to a non-string data type.)rz   importorskipr   r  r   	DataFramefeature_namesr   r   rb   r   rs  rj  rx   r{   r   r   r   r&  r  r  r  reescaper}   )pdr  X_npr   rq  transr   df_baddf_int_namesXsr`   df_mixedr$   r$   r%   test_feature_names_in  sb   






$r  c                  C   s  t d} t }| j|j|jd}| |j}G dd dt	t
}| }t||dd}t|tjs3J t||  t||dd}||u sGJ t||dd}t|tjsVJ t||  t||dd}	|	|u sjJ t|||dd\}}t|tjs|J t||  t|tjsJ t||  t|||dd\}}	||u sJ |	|u sJ d	}
t jt|
d
 t| W d   dS 1 sw   Y  dS )z0Check skip_check_array option of _validate_data.rh  ri  c                   @   rH   )z<test_validate_data_skip_check_array.<locals>.NoOpTransformerNrJ   r$   r$   r$   r%   rq  0  rK   rq  F)skip_check_arrayT)ra   r  z*Validation should be done on X, y or both.r   N)rz   rt  r   r  ru  r   rv  Seriesr  r   r   r   r)  rR   ndarrayr   to_numpyr{   r   )ry  r  r   ra   rq  no_opX_np_outX_df_outy_np_outy_series_outr   r$   r$   r%   #test_validate_data_skip_check_array(  s8   

"r  c                  C   s:   t  jdd} td| }t| }td|}||ksJ dS )z-Check that clone keeps the set_output config.rh  )r   r   N)r   
set_outputr   r   )ssconfigss_cloneconfig_cloner$   r$   r%   test_clone_keeps_output_configQ  s
   

r  c                   @   rH   )_EmptyNrJ   r$   r$   r$   r%   r  \  rK   r  c                   @   rH   )EmptyEstimatorNrJ   r$   r$   r$   r%   r  `  rK   r  r   c                 C   s4   |   }dtji}||ksJ ttt  dS )zCheck that ``__getstate__`` returns an empty ``dict`` with an empty
    instance.

    Python 3.11+ changed behaviour by returning ``None`` instead of raising an
    ``AttributeError``. Non-regression test for gh-25188.
    r  N)r  r$  r%  r	  r  r
  r   )r   r<  expectedr$   r$   r%   "test_estimator_empty_instance_dictd  s   
r  c                  C   s   G dd d} G dd dt | }d}tjt|d |   W d   n1 s)w   Y  tjt|d t|  W d   dS 1 sGw   Y  dS )z:Using a `BaseEstimator` with `__slots__` is not supported.c                   @   s   e Zd ZdZdS )zDtest_estimator_getstate_using_slots_error_message.<locals>.WithSlots)xN)r)   r*   r+   	__slots__r$   r$   r$   r%   	WithSlotsw  s    r  c                   @   rH   )zDtest_estimator_getstate_using_slots_error_message.<locals>.EstimatorNrJ   r$   r$   r$   r%   	Estimatorz  rK   r  zRYou cannot use `__slots__` in objects inheriting from `sklearn.base.BaseEstimator`r   N)r   rz   r{   r}   r  r	  r
  )r  r  r   r$   r$   r%   1test_estimator_getstate_using_slots_error_messaget  s   "r  zconstructor_name, minversion))	dataframez1.5.0)pyarrowz12.0.0)polarsz0.20.23c           
      C   s   g dg dg}g d}t || ||d}G dd dtt}| }|| t|j| ||}| dkr9t|| g d}t || |d	}	tj	t
d
d ||	 W d   dS 1 s\w   Y  dS )z:Uses the dataframe exchange protocol to get feature names.)rV   r   rn   )r   r   r`  )col_0col_1col_2)columns_name
minversionc                   @   rk  )z0test_dataframe_protocol.<locals>.NoOpTransformerNc                 S   rl  r    rm  r_   r$   r$   r%   rb     rn  z4test_dataframe_protocol.<locals>.NoOpTransformer.fitc                 S   s   t | |ddS ro  rm  rc   r$   r$   r%   r     rP   z:test_dataframe_protocol.<locals>.NoOpTransformer.transformr    rp  r$   r$   r$   r%   rq    rr  rq  r  )r3   r4   r/   )r  zThe feature names should matchr   N)r   r   r   rb   r   rs  r   r   rz   r{   r   )
constructor_namer  r   rj  r   rq  r  X_out	bad_namesr|  r$   r$   r%   test_dataframe_protocol  s"   



"r  )enable_metadata_routingc                  C      G dd dt t} tjtdd |  jddjdggdgdd W d   n1 s+w   Y  tjdd	}|  jdddggdg t	|d
ksMJ W d   dS 1 sXw   Y  dS )zkTest that having a transformer with metadata for transform raises a
    warning when calling fit_transform.c                   @       e Zd ZdddZdddZdS )zTtest_transformer_fit_transform_with_metadata_in_transform.<locals>.CustomTransformerNc                 S   r^   r    r$   r#   r`   ra   propr$   r$   r%   rb     r]   zXtest_transformer_fit_transform_with_metadata_in_transform.<locals>.CustomTransformer.fitc                 S      |S r    r$   r#   r`   r  r$   r$   r%   r     r]   z^test_transformer_fit_transform_with_metadata_in_transform.<locals>.CustomTransformer.transformr1   r    rp  r$   r$   r$   r%   CustomTransformer  rV  r  z*`transform` method which consumes metadatar   Tr  rV   Nrecordr   )
r   r   rz   r   r&  set_transform_requestr   r  r  r   )r  r  r$   r$   r%   9test_transformer_fit_transform_with_metadata_in_transform     	"r  c                  C   r  )ziTest that having an OutlierMixin with metadata for predict raises a
    warning when calling fit_predict.c                   @   r  )zVtest_outlier_mixin_fit_predict_with_metadata_in_predict.<locals>.CustomOutlierDetectorNc                 S   r^   r    r$   r  r$   r$   r%   rb     r]   zZtest_outlier_mixin_fit_predict_with_metadata_in_predict.<locals>.CustomOutlierDetector.fitc                 S   r  r    r$   r  r$   r$   r%   rd     r]   z^test_outlier_mixin_fit_predict_with_metadata_in_predict.<locals>.CustomOutlierDetector.predictr1   r    )r)   r*   r+   rb   rd   r$   r$   r$   r%   CustomOutlierDetector  rV  r  z(`predict` method which consumes metadatar   Tr  rV   Nr  r   )
r   r   rz   r   r&  set_predict_requestfit_predictr  r  r   )r  r  r$   r$   r%   7test_outlier_mixin_fit_predict_with_metadata_in_predict  r  r  )xr	  rw  r  numpyrR   rz   scipy.sparsesparser   numpy.testingr   r$  r   r   sklearn.baser   r   r   r   r	   r
   r   r   sklearn.clusterr   sklearn.decompositionr   sklearn.ensembler   sklearn.exceptionsr   sklearn.model_selectionr   sklearn.pipeliner   sklearn.preprocessingr   sklearn.svmr   r   sklearn.treer   r   sklearn.utils._mockingr   sklearn.utils._set_outputr   sklearn.utils._testingr   r   sklearn.utils.validationr   r   r   r.   r2   r6   rE   rG   rI   rL   rM   rT   rZ   re   ru   ry   r   r   r   r   r   r   r   r   r   r   r   markparametrizer   r   r   r   r   r   make_classificationmake_regressionr   r   r  r  r  r"  r/  r0  r2  r5  r6  r>  rI  rL  rM  rN  rT  rX  r]  r_  rf  rg  r  r  r  r  r  r  r  r  r  r  r$   r$   r$   r%   <module>   s  (

	  
  
  





&,	
N)

 
