a
    �ù»j~  ã                   @   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jN OdDe&ƒ 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jN OdDe'ƒ 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jN OdDeƒ 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jN Od_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ƒZfd€d�„ Zgd‚dƒ„ Zhd„d…„ Zid†d‡„ Zjdˆd‰„ ZkdŠd‹„ ZldŒd�„ ZmdŽd�„ Znd�d‘„ Zod’d“„ ZpG d”d•„ d•ƒZqG d–d—„ d—eqeƒZrejN Od˜eƒ erƒ g¡d™dš„ ƒZsd›dœ„ ZtejN Od�g dž¢¡dŸd „ ƒZuedEd¡�d¢d£„ ƒZvedEd¡�d¤d¥„ ƒ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   s   || _ || _d S ©N)Úl1Úempty)Úselfr    r!   © r#   ú=E:\soccer\ml_env\Lib\site-packages\sklearn/tests/test_base.pyÚ__init__.   s    zMyEstimator.__init__)r   N©Ú__name__Ú
__module__Ú__qualname__r%   r#   r#   r#   r$   r   -   s   r   c                   @   s   e Zd Zddd„ZdS )ÚKNc                 C   s   || _ || _d S r   )ÚcÚd)r"   r+   r,   r#   r#   r$   r%   4   s    z
K.__init__)NNr&   r#   r#   r#   r$   r*   3   s   r*   c                   @   s   e Zd Zddd„ZdS )ÚTNc                 C   s   || _ || _d S r   )ÚaÚb)r"   r.   r/   r#   r#   r$   r%   :   s    z
T.__init__)NNr&   r#   r#   r#   r$   r-   9   s   r-   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚNaNTagc                    s   t ƒ  ¡ }d|j_|S )NT©ÚsuperÚ__sklearn_tags__Ú
input_tagsÚ	allow_nan©r"   Útags©Ú	__class__r#   r$   r3   @   s    
zNaNTag.__sklearn_tags__©r'   r(   r)   r3   Ú__classcell__r#   r#   r8   r$   r0   ?   s   r0   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚNoNaNTagc                    s   t ƒ  ¡ }d|j_|S ©NFr1   r6   r8   r#   r$   r3   G   s    
zNoNaNTag.__sklearn_tags__r:   r#   r#   r8   r$   r<   F   s   r<   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚOverrideTagc                    s   t ƒ  ¡ }d|j_|S r=   r1   r6   r8   r#   r$   r3   N   s    
zOverrideTag.__sklearn_tags__r:   r#   r#   r8   r$   r>   M   s   r>   c                   @   s   e Zd ZdS )ÚDiamondOverwriteTagN©r'   r(   r)   r#   r#   r#   r$   r?   T   s   r?   c                   @   s   e Zd ZdS )ÚInheritDiamondOverwriteTagNr@   r#   r#   r#   r$   rA   X   s   rA   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   )Úcopyr.   ©r"   r.   r#   r#   r$   r%   b   s    zModifyInitParams.__init__N)r'   r(   r)   Ú__doc__ÚnpÚarrayr%   r#   r#   r#   r$   rB   \   s   rB   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é   ©r.   rD   r#   r#   r$   r%   i   s    zBuggy.__init__)N©r'   r(   r)   rE   r%   r#   r#   r#   r$   rH   f   s   rH   c                   @   s(   e Zd Zdd„ Zddd„Zd	dd„ZdS )
ÚNoEstimatorc                 C   s   d S r   r#   ©r"   r#   r#   r$   r%   n   s    zNoEstimator.__init__Nc                 C   s   | S r   r#   ©r"   ÚXÚyr#   r#   r$   Úfitq   s    zNoEstimator.fitc                 C   s   d S r   r#   ©r"   rO   r#   r#   r$   Úpredictt   s    zNoEstimator.predict)NN)N)r'   r(   r)   r%   rQ   rS   r#   r#   r#   r$   rL   m   s   
rL   c                   @   s   e Zd ZdZdd„ ZdS )ÚVargEstimatorz-scikit-learn estimators shouldn't have vargs.c                 G   s   d S r   r#   )r"   Zvargsr#   r#   r$   r%   {   s    zVargEstimator.__init__NrK   r#   r#   r#   r$   rT   x   s   rT   c                  C   sn   ddl m} m} | |dd�}t|ƒ}||us0J ‚| ¡ | ¡ ksDJ ‚| |t d¡d�}t|ƒ}||usjJ ‚d S )Nr   ©Ú	SelectFprÚ	f_classifçš™™™™™¹?©Úalpha)é
   é   )Úsklearn.feature_selectionrV   rW   r   Ú
get_paramsrF   Zzeros©rV   rW   ÚselectorZnew_selectorr#   r#   r$   Ú
test_cloneƒ   s    ra   c                  C   s<   ddl m} m} | |dd�}d|_t|ƒ}t|dƒr8J ‚d S )Nr   rU   rX   rY   ÚtestÚown_attribute)r]   rV   rW   rc   r   Úhasattrr_   r#   r#   r$   Útest_clone_2•   s
    re   c                  C   sê   t ƒ } d| _t t¡� t| ƒ W d   ƒ n1 s40    Y  tƒ }t t¡� t|ƒ W d   ƒ n1 sl0    Y  tƒ }t t¡� t|ƒ W d   ƒ n1 s¤0    Y  t	ƒ }t t¡� t|ƒ W d   ƒ n1 sÜ0    Y  d S )Nr\   )
rH   r.   ÚpytestÚraisesÚRuntimeErrorr   rL   Ú	TypeErrorrT   rB   )ZbuggyZno_estimatorZvarg_estÚestr#   r#   r$   Útest_clone_buggy£   s    &&&rk   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   rF   rG   r   r   r!   ÚspZ
csr_matrixÚdata©ÚclfZclf2r#   r#   r$   Útest_clone_empty_array·   s    rq   c                  C   s(   t tjd�} t| ƒ}| j|ju s$J ‚d S ©Nrl   )r   rF   Únanr   r!   ro   r#   r#   r$   Útest_clone_nanÂ   s    rt   c                  C   s*   dt ƒ i} t| ƒ}| d |d us&J ‚d S )Nr.   )r   r   )ÚorigZclonedr#   r#   r$   Útest_clone_dictÊ   s    
rv   c                     sn   ‡ fdd„t tƒD ƒ} | D ]N‰ ˆ t d¡ƒ}t|d�}t|ƒ}|jj|jju sRJ ‚t|j 	¡ |j 	¡ ƒ qd S )Nc                    s0   g | ](}|  d ¡rttt|ƒ ‰ ƒtu rˆ ‘qS )Z_matrix)ÚendswithÚtypeÚgetattrrm   )Ú.0Úname©Úclsr#   r$   Ú
<listcomp>Ò   s    þz.test_clone_sparse_matrices.<locals>.<listcomp>é   rl   )
Údirrm   rF   Úeyer   r   r!   r9   r   Ztoarray)Zsparse_matrix_classesZsparse_matrixrp   Z
clf_clonedr#   r|   r$   Útest_clone_sparse_matricesÑ   s    
þ
r‚   c                  C   s&   t t d�} t| ƒ}| j|ju s"J ‚d S rr   )r   r   r!   ro   r#   r#   r$   Útest_clone_estimator_typesà   s    
rƒ   c                  C   s>   d} t jt| d�� ttƒ W d   ƒ n1 s00    Y  d S )Nz8You should provide an instance of scikit-learn estimator©Úmatch)rf   rg   ri   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sPJ ‚d S )NzT(a=K(), b=K())Zlong_paramsiè  rJ   iå  )r   Úreprr-   r*   Úlen)Úmy_estimatorrb   Z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s4J ‚| jdd� | jjdksPJ ‚t t¡� | jdd� W d   ƒ n1 s|0    Y  d S )NÚa__dT)ÚdeepFr\   )rŽ   )Za__a)	r-   r*   r^   Ú
set_paramsr.   r,   rf   rg   Ú
ValueError)rb   r#   r#   r$   Útest_get_params  s    r’   c                   C   sì   t jtdd�� ttƒsJ ‚W d   ƒ n1 s00    Y  t jtdd�� ttƒsVJ ‚W d   ƒ n1 sj0    Y  t jtdd�� ttƒs�J ‚W d   ƒ n1 s¤0    Y  t jtdd�� t	t
ƒsÊJ ‚W d   ƒ n1 sÞ0    Y  d S )Nz!passing a class to.*is deprecatedr„   )rf   ÚwarnsÚFutureWarningr	   r   r   r   r
   r   r   r   r#   r#   r#   r$   Útest_is_estimator_type_class  s    ***r•   zestimator, expected_resultTÚCrX   rI   ÚsvcZsvc_cvFZsvrZsvr_cvc                 C   s   t | ƒ|ksJ ‚d S r   )r	   ©Ú	estimatorZexpected_resultr#   r#   r$   Útest_is_classifier  s    rš   c                 C   s   t | ƒ|ksJ ‚d S r   )r   r˜   r#   r#   r$   Útest_is_regressor/  s    r›   Z
n_clustersé   é   ÚkmZkm_cvc                 C   s   t | ƒ|ksJ ‚d S r   )r
   r˜   r#   r#   r$   Útest_is_clusterer@  s    rŸ   c                  C   s€   t dtƒ fgƒ} t t¡� | jdd� W d   ƒ n1 s<0    Y  t t¡� | jdd� W d   ƒ n1 sr0    Y  d S )Nr—   T)Zsvc__stupid_param)Zsvm__stupid_param)r   r   rf   rg   r‘   r�   )rp   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f i |¤Ž |ˆksJ ‚| S r   )r2   r�   )r"   Úkwargs)r9   Úexpected_kwargsr#   r$   r�   h  s    zJtest_set_params_passes_all_parameters.<locals>.TestDecisionTree.set_params)r'   r(   r)   r�   r;   r#   ©r¢   r8   r$   ÚTestDecisionTreeg  s   r¤   r   r\   )Ú	max_depthZmin_samples_leafr™   )Zestimator__max_depthZestimator__min_samples_leaf)r   r   r   r�   )r¤   rj   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™   Zestimator__C)r   r   r�   r   r™   r–   )Zgscvr#   r#   r$   Ú$test_set_params_updates_valid_paramsv  s    r§   ztree,datasetr\   )r¥   Úrandom_state)r¨   c           	      C   sh   t j d¡}|\}}|  ||¡ |jddt|ƒd�}|  ||¡}| j|||d�}d}||ksdJ |ƒ‚d S )Nr   rI   r[   )Úsize)Úsample_weightz5Unweighted and weighted scores are unexpectedly equal)rF   ÚrandomZRandomStaterQ   Úrandintr‰   Úscore)	ÚtreeZdatasetÚrngrO   rP   rª   Zscore_unweightedZ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 ¡ sNJ ‚|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
        -----
        NrI   c                 S   s   || _ || _d S r   )ÚdfÚscalar_param)r"   r±   r²   r#   r#   r$   r%   ª  s    z<test_clone_pandas_dataframe.<locals>.DummyEstimator.__init__c                 S   s   d S r   r#   rN   r#   r#   r$   rQ   ®  s    z7test_clone_pandas_dataframe.<locals>.DummyEstimator.fitc                 S   s   d S r   r#   rR   r#   r#   r$   Ú	transform±  s    z=test_clone_pandas_dataframe.<locals>.DummyEstimator.transform)NrI   )N)r'   r(   r)   rE   r%   rQ   r³   r#   r#   r#   r$   ÚDummyEstimatorš  s   

r´   r[   rI   )r²   )
r   r   rF   Zaranger   r   r±   ÚvaluesÚallr²   )r´   r,   r±   ÚeZ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%   Ã  s    z5test_clone_protocol.<locals>.FrozenEstimator.__init__c                 S   s   t | j|ƒS r   )ry   r¹   )r"   r{   r#   r#   r$   Ú__getattr__Æ  s    z8test_clone_protocol.<locals>.FrozenEstimator.__getattr__c                 S   s   | S r   r#   rM   r#   r#   r$   Ú__sklearn_clone__É  s    z>test_clone_protocol.<locals>.FrozenEstimator.__sklearn_clone__c                 _   s   | S r   r#   ©r"   Úargsr¡   r#   r#   r$   rQ   Ì  s    z0test_clone_protocol.<locals>.FrozenEstimator.fitc                 _   s   | j j|i |¤ŽS r   )r¹   r³   r¼   r#   r#   r$   Úfit_transformÏ  s    z:test_clone_protocol.<locals>.FrozenEstimator.fit_transformN)r'   r(   r)   r%   rº   r»   rQ   r¾   r#   r#   r#   r$   ÚFrozenEstimatorÂ  s
   r¿   éÿÿÿÿéþÿÿÿéýÿÿÿr\   rœ   é   rI   N)r   rF   rG   r   rQ   Zcomponents_r   r   Zget_feature_names_outZasarrayr¾   r   )r¿   rO   ZpcaÚ
componentsZ
frozen_pcaZX_newZclone_frozen_pcar#   r#   r$   Útest_clone_protocol¿  s    

rÅ   c                  C   sœ   t  ¡ } tƒ  | j| j¡}t |¡}d|v s0J ‚t 	¡ �$ t 
d¡ t |¡}W d   ƒ n1 sb0    Y  | | j| j¡}| | j| j¡}||ks˜J ‚d S )Nó   _sklearn_versionÚerror)r   Ú	load_irisr   rQ   rn   ÚtargetÚpickleÚdumpsÚwarningsÚcatch_warningsÚsimplefilterÚloadsr­   )Úirisr®   Ztree_pickleZtree_restoredZscore_of_originalZscore_of_restoredr#   r#   r$   Ú?test_pickle_version_warning_is_not_raised_with_matching_versionë  s    


(rÑ   c                   @   s   e Zd Zdd„ ZdS )ÚTreeBadVersionc                 C   s   t | j ¡ dd�S )NÚ	something)Ú_sklearn_version)ÚdictÚ__dict__ÚitemsrM   r#   r#   r$   Ú__getstate__ü  s    zTreeBadVersion.__getstate__N©r'   r(   r)   rØ   r#   r#   r#   r$   rÒ   û  s   rÒ   z´Trying 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 sd0    Y  |jd j}t|tƒsˆJ ‚|jdks–J ‚|jdks¤J ‚|jt
jks´J ‚d S )NrÒ   rÓ   ©r™   Zold_versionÚcurrent_versionr„   r   )r   rÈ   rÒ   rQ   rn   rÉ   rÊ   rË   Úpickle_error_messageÚformatÚsklearnÚ__version__rf   r“   ÚUserWarningrÏ   ÚlistÚmessageÚ
isinstancer   Zestimator_nameZoriginal_sklearn_versionZcurrent_sklearn_version)rÐ   r®   Ztree_pickle_otherrâ   Zwarning_recordr#   r#   r$   Ú<test_pickle_version_warning_is_issued_upon_different_version	  s    
ý(rä   c                   @   s   e Zd Zdd„ ZdS )ÚTreeNoVersionc                 C   s   | j S r   )rÖ   rM   r#   r#   r$   rØ     s    zTreeNoVersion.__getstate__NrÙ   r#   r#   r#   r$   rå     s   rå   c                  C   s~   t  ¡ } tƒ  | j| j¡}t |¡}d|vs0J ‚tj	ddt
jd�}tjt|d�� t |¡ W d   ƒ n1 sp0    Y  d S )NrÆ   rå   zpre-0.18rÚ   r„   )r   rÈ   rå   rQ   rn   rÉ   rÊ   rË   rÜ   rÝ   rÞ   rß   rf   r“   rà   rÏ   )rÐ   r®   Útree_pickle_noversionrâ   r#   r#   r$   ÚDtest_pickle_version_warning_is_issued_when_no_version_info_in_pickle!  s    
ýrç   c                  C   s„   t  ¡ } tƒ  | j| j¡}t |¡}zRtj}dt_t	 
¡ �$ t	 d¡ t |¡ W d   ƒ n1 sd0    Y  W |t_n|t_0 d S )NÚ
notsklearnrÇ   )r   rÈ   rå   rQ   rn   rÉ   rÊ   rË   r(   rÌ   rÍ   rÎ   rÏ   )rÐ   r®   ræ   Zmodule_backupr#   r#   r$   ÚCtest_pickle_version_no_warning_is_issued_with_non_sklearn_estimator2  s    


*ré   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Ö   rC   )r"   rn   r#   r#   r$   rØ   C  s    
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$   rê   B  s   rê   c                   @   s   e Zd Zddd„ZdS )ÚMultiInheritanceEstimatorr   c                 C   s   || _ d | _d S r   ©Úattribute_pickledrì   ©r"   rô   r#   r#   r$   r%   N  s    z"MultiInheritanceEstimator.__init__N)r   r&   r#   r#   r#   r$   rò   M  s   rò   c                  C   sJ   t ƒ } d| _t | ¡}t |¡}|jdks.J ‚|jd u s<J ‚|jsFJ ‚d S ©Nú$this attribute should not be pickledr   )rò   rì   rÊ   rË   rÏ   rô   rí   ©r™   Ú
serializedZestimator_restoredr#   r#   r$   Ú3test_pickling_when_getstate_is_overwritten_by_mixinS  s    

rú   c               	   C   sˆ   zvt ƒ } d}|| _t| ƒj}dt| ƒ_|  ¡ }|d ddœks@J ‚d|d< |  |¡ | jdks`J ‚| jsjJ ‚W |t| ƒ_n|t| ƒ_0 d S )Nr÷   rè   r   )rì   rô   rÃ   rô   )rò   rì   rx   r(   rØ   rñ   rô   rí   )r™   ÚtextÚold_modrù   r#   r#   r$   ÚFtest_pickling_when_getstate_is_overwritten_by_mixin_outside_of_sklearn^  s    


rý   c                       s&   e Zd Zddd„Z‡ fdd„Z‡  ZS )ÚSingleInheritanceEstimatorr   c                 C   s   || _ d | _d S r   ró   rõ   r#   r#   r$   r%   r  s    z#SingleInheritanceEstimator.__init__c                    s   t ƒ  ¡ }d |d< |S rë   )r2   rØ   rï   r8   r#   r$   rØ   v  s    
z'SingleInheritanceEstimator.__getstate__)r   )r'   r(   r)   r%   rØ   r;   r#   r#   r8   r$   rþ   q  s   
rþ   c                  C   s@   t ƒ } d| _t | ¡}t |¡}|jdks.J ‚|jd u s<J ‚d S rö   )rþ   rì   rÊ   rË   rÏ   rô   rø   r#   r#   r$   ÚCtest_pickling_works_when_getstate_is_overwritten_in_the_child_class|  s    

rÿ   c                  C   sr   t ƒ } tƒ }|  ¡ jjsJ ‚| ¡ jjr,J ‚tƒ }| ¡ jjrBJ ‚tƒ }| ¡ jjsXJ ‚tƒ }| ¡ jjsnJ ‚d S r   )r0   r<   r3   r4   r5   r>   r?   rA   )Znan_tag_estZno_nan_tag_estZredefine_tags_estZdiamond_tag_estZinherit_diamond_tag_estr#   r#   r$   Útest_tag_inheritance†  s    r   c                  C   sT   G dd„ dt ƒ} | ƒ }d}tjt|d�� | ¡  W d   ƒ n1 sF0    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   s   d S r   r#   )r"   Úparamr#   r#   r$   r%   š  s    zEtest_raises_on_get_params_non_attribute.<locals>.MyEstimator.__init__Nc                 S   s   | S r   r#   rN   r#   r#   r$   rQ   �  s    z@test_raises_on_get_params_non_attribute.<locals>.MyEstimator.fit)r   )N)r'   r(   r)   r%   rQ   r#   r#   r#   r$   r   ™  s   
r   z-'MyEstimator' object has no attribute 'param'r„   )r   rf   rg   ÚAttributeErrorr^   )r   rj   r†   r#   r#   r$   Ú'test_raises_on_get_params_non_attribute˜  s
    r  c                  C   st   t ƒ } |  ¡ }d|v sJ ‚d|v s&J ‚tdd��0 |  ¡ }d|v sFJ ‚d|vsRJ ‚W d   ƒ n1 sf0    Y  d S )Nz
text/plainz	text/htmlrû   ©Ú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��J d}tjt|d�� |  ¡ }W d   ƒ n1 sV0    Y  W d   ƒ n1 st0    Y  d S )Nz<style>rû   r  z _repr_html_ is only defined whenr„   )r   Z_repr_html_r   rf   rg   r  )r®   r  r†   r#   r#   r$   Útest_repr_html_wraps´  s    r	  c                  C   sv   t ƒ } g d¢g d¢g}t| |dd� | jdks2J ‚d}tjt|d�� t| dd	d� W d
  ƒ n1 sh0    Y  d
S )z>Check that `_check_n_features` validates data when reset=False)rI   r\   rœ   )rÃ   r   é   T©Úresetrœ   zHX does not contain any features, but MyEstimator is expecting 3 featuresr„   ú	invalid XFN)r   r   Ún_features_in_rf   rg   r‘   )rj   ZX_trainr†   r#   r#   r$   Útest_n_features_in_validationÁ  s    r  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.r  Tr  r  FN)r   r   rd   )rj   r#   r#   r$   Ú test_n_features_in_no_validationÎ  s    r  c               	   C   s�  t  d¡} t ¡ }|j}| j||jd�}G dd„ dttƒ}|ƒ  	|¡}t
|j|jƒ | 	|¡ t|dƒrlJ ‚| 	|¡ d}| j||jddd… d�}t jt|d	�� | |¡ W d  ƒ n1 sÂ0    Y  d
}t jt|d	�� | |¡ W d  ƒ n1 sþ0    Y  d}|ƒ  	|¡}t jt|d	�� | |¡ W d  ƒ n1 �sH0    Y  |  |¡}|ƒ }t ¡ �& t dt¡ | 	|¡ W d  ƒ n1 �s˜0    Y  ||g}	|	D ]F}
t ¡ �& t dt¡ | |
¡ W d  ƒ n1 �sè0    Y  �q®| j|g d¢d�}|ƒ }t d¡}t jt|d	�� | 	|¡ W d  ƒ n1 �sH0    Y  t jt|d	�� | |¡ W d  ƒ n1 �s‚0    Y  dS )z;Check that feature_name_in are recorded by `_validate_data`Úpandas©Úcolumnsc                   @   s   e Zd Zddd„Zdd„ ZdS )z.test_feature_names_in.<locals>.NoOpTransformerNc                 S   s   t | |ƒ | S r   ©r   rN   r#   r#   r$   rQ   â  s    
z2test_feature_names_in.<locals>.NoOpTransformer.fitc                 S   s   t | |dd� |S ©NFr  r  rR   r#   r#   r$   r³   æ  s    z8test_feature_names_in.<locals>.NoOpTransformer.transform)N©r'   r(   r)   rQ   r³   r#   r#   r#   r$   ÚNoOpTransformerá  s   
r  Ú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Ç   )r.   r/   rI   r\   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.)rf   Úimportorskipr   rÈ   rn   Ú	DataFrameÚfeature_namesr   r   rQ   r   r  r  rd   rg   r‘   r³   r“   rà   rÌ   rÍ   rÎ   ÚreÚescaperi   )ÚpdrÐ   ZX_npr±   r  Ztransr†   Údf_badZdf_int_namesZXsrO   Zdf_mixedr#   r#   r$   Útest_feature_names_inÚ  sR    



(ÿ(*

*
.ÿ*r   c                  C   s–  t  d¡} t ¡ }| j|j|jd�}|  |j¡}G dd„ dt	t
ƒ}|ƒ }t||dd�}t|tjƒsfJ ‚t|| ¡ ƒ t||dd�}||u sŽJ ‚t||dd�}t|tjƒs¬J ‚t|| ¡ ƒ t||dd�}	|	|u sÔJ ‚t|||dd�\}}t|tjƒsøJ ‚t|| ¡ ƒ t|tjƒ�sJ ‚t|| ¡ ƒ t|||dd�\}}	||u �sHJ ‚|	|u �sVJ ‚d	}
t jt|
d
�� t|ƒ W d  ƒ n1 �sˆ0    Y  dS )z0Check skip_check_array option of _validate_data.r  r  c                   @   s   e Zd ZdS )z<test_validate_data_skip_check_array.<locals>.NoOpTransformerNr@   r#   r#   r#   r$   r  0  s   r  F)Úskip_check_arrayT)rP   r!  z*Validation should be done on X, y or both.r„   N)rf   r  r   rÈ   r  rn   r  ZSeriesrÉ   r   r   r   rã   rF   Zndarrayr   Zto_numpyrg   r‘   )r  rÐ   r±   rP   r  Úno_opZX_np_outZX_df_outZy_np_outZy_series_outr†   r#   r#   r$   Ú#test_validate_data_skip_check_array(  s6    
r#  c                  C   s:   t ƒ jdd�} td| ƒ}t| ƒ}td|ƒ}||ks6J ‚dS )z-Check that clone keeps the set_output config.r  )r³   r³   N)r   Z
set_outputr   r   )ÚssÚconfigZss_cloneZconfig_cloner#   r#   r$   Útest_clone_keeps_output_configQ  s
    

r&  c                   @   s   e Zd ZdS )Ú_EmptyNr@   r#   r#   r#   r$   r'  \  s   r'  c                   @   s   e Zd ZdS )ÚEmptyEstimatorNr@   r#   r#   r#   r$   r(  `  s   r(  r™   c                 C   s4   |   ¡ }dtji}||ksJ ‚t t tƒ ¡¡ dS )zàCheck 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 sR0    Y  tjt|d�� t |ƒ ¡ W d  ƒ n1 sŒ0    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                   @   s   e Zd ZdS )zDtest_estimator_getstate_using_slots_error_message.<locals>.EstimatorNr@   r#   r#   r#   r$   Ú	Estimatorz  s   r.  zRYou cannot use `__slots__` in objects inheriting from `sklearn.base.BaseEstimator`r„   N)r   rf   rg   ri   rØ   rÊ   rË   )r-  r.  r†   r#   r#   r$   Ú1test_estimator_getstate_using_slots_error_messaget  s    ÿ(r/  zconstructor_name, minversion))Z	dataframez1.5.0)Úpyarrowz12.0.0)Z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rrt||ƒ g d¢}t || |d	�}	tj	t
d
d�� | |	¡ W d  ƒ n1 s¶0    Y  dS )z:Uses the dataframe exchange protocol to get feature names.)rI   rÃ   r\   )rœ   rœ   r
  )Zcol_0Zcol_1Zcol_2)Úcolumns_nameÚ
minversionc                   @   s   e Zd Zddd„Zdd„ ZdS )z0test_dataframe_protocol.<locals>.NoOpTransformerNc                 S   s   t | |ƒ | S r   r  rN   r#   r#   r$   rQ   š  s    
z4test_dataframe_protocol.<locals>.NoOpTransformer.fitc                 S   s   t | |dd�S r  r  rR   r#   r#   r$   r³   ž  s    z:test_dataframe_protocol.<locals>.NoOpTransformer.transform)Nr  r#   r#   r#   r$   r  ™  s   
r  r0  )r.   r/   r+   )r1  zThe feature names should matchr„   N)r   r   r   rQ   r   r  r³   r   rf   rg   r‘   )
Zconstructor_namer2  rn   r  r±   r  r"  ZX_outZ	bad_namesr  r#   r#   r$   Útest_dataframe_protocol‰  s     
ÿ


r3  )Zenable_metadata_routingc                  C   s¼   G dd„ dt tƒ} tjtdd��0 | ƒ jdd�jdggdgdd� W d  ƒ n1 sV0    Y  tjdd	��<}| ƒ jdd� dggdg¡ t	|ƒd
ksšJ ‚W d  ƒ n1 s®0    Y  dS )zkTest that having a transformer with metadata for transform raises a
    warning when calling fit_transform.c                   @   s    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   s   | S r   r#   ©r"   rO   rP   Úpropr#   r#   r$   rQ   ·  s    zXtest_transformer_fit_transform_with_metadata_in_transform.<locals>.CustomTransformer.fitc                 S   s   |S r   r#   ©r"   rO   r5  r#   r#   r$   r³   º  s    z^test_transformer_fit_transform_with_metadata_in_transform.<locals>.CustomTransformer.transform)NN)Nr  r#   r#   r#   r$   ÚCustomTransformer¶  s   
r7  z*`transform` method which consumes metadatar„   T©r5  rI   N©Úrecordr   )
r   r   rf   r“   rà   Zset_transform_requestr¾   rÌ   rÍ   r‰   )r7  r:  r#   r#   r$   Ú9test_transformer_fit_transform_with_metadata_in_transform±  s    	ÿ$r;  c                  C   s¼   G dd„ dt tƒ} tjtdd��0 | ƒ jdd�jdggdgdd� W d  ƒ n1 sV0    Y  tjdd	��<}| ƒ jdd� dggdg¡ t	|ƒd
ksšJ ‚W d  ƒ n1 s®0    Y  dS )ziTest that having an OutlierMixin with metadata for predict raises a
    warning when calling fit_predict.c                   @   s    e Zd Zddd„Zddd„ZdS )zVtest_outlier_mixin_fit_predict_with_metadata_in_predict.<locals>.CustomOutlierDetectorNc                 S   s   | S r   r#   r4  r#   r#   r$   rQ   Ñ  s    zZtest_outlier_mixin_fit_predict_with_metadata_in_predict.<locals>.CustomOutlierDetector.fitc                 S   s   |S r   r#   r6  r#   r#   r$   rS   Ô  s    z^test_outlier_mixin_fit_predict_with_metadata_in_predict.<locals>.CustomOutlierDetector.predict)NN)N)r'   r(   r)   rQ   rS   r#   r#   r#   r$   ÚCustomOutlierDetectorÐ  s   
r<  z(`predict` method which consumes metadatar„   Tr8  rI   Nr9  r   )
r   r   rf   r“   rà   Zset_predict_requestZfit_predictrÌ   rÍ   r‰   )r<  r:  r#   r#   r$   Ú7test_outlier_mixin_fit_predict_with_metadata_in_predictË  s    	ÿ$r=  )xrÊ   r  rÌ   ÚnumpyrF   rf   Zscipy.sparseÚsparserm   Znumpy.testingr   rÞ   r   r   Zsklearn.baser   r   r   r   r	   r
   r   r   Zsklearn.clusterr   Zsklearn.decompositionr   Zsklearn.ensembler   Zsklearn.exceptionsr   Zsklearn.model_selectionr   Zsklearn.pipeliner   Zsklearn.preprocessingr   Zsklearn.svmr   r   Zsklearn.treer   r   Zsklearn.utils._mockingr   Zsklearn.utils._set_outputr   Zsklearn.utils._testingr   r   Zsklearn.utils.validationr   r   r   r*   r-   r0   r<   r>   r?   rA   rB   rH   rL   rT   ra   re   rk   rq   rt   rv   r‚   rƒ   r‡   r‹   r�   r’   r•   ÚmarkZparametrizerš   r›   rŸ   r    r¦   r§   Zmake_classificationZmake_regressionr°   r¸   rÅ   rÑ   rÒ   rÜ   rä   rå   rç   ré   rê   rò   rú   rý   rþ   rÿ   r   r  r  r	  r  r  r   r#  r&  r'  r(  r*  r/  r3  r;  r=  r#   r#   r#   r$   Ú<module>   s  (

	  øþ
  øþ
  øþ


þ

þûþ
&,ÿ	
N)
þ
 
