U
    _»{j_b  ã                   @   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 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# d dl$m%Z% d dl&m'Z'm(Z(m)Z) G dd„ deƒZ*G dd„ deƒZ+G dd„ deƒZ,G dd„ deƒZ-G dd„ deƒZ.G dd„ de-ƒZ/G dd„ de-e.ƒZ0G dd„ de0ƒZ1G dd „ d eƒZ2G d!d"„ d"eƒZ3G d#d$„ d$ƒZ4G d%d&„ d&eƒZ5d'd(„ Z6d)d*„ Z7d+d,„ Z8d-d.„ Z9d/d0„ Z:d1d2„ Z;d3d4„ Z<d5d6„ Z=d7d8„ Z>d9d:„ Z?d;d<„ Z@d=d>„ ZAd?d@„ ZBdAdB„ ZCdCdD„ ZDdEdF„ ZEejF GdGe dHd dI�ejHd dJ�fe!dHd dI�ejId dJ�fg¡dKdL„ ƒZJdMdN„ ZKdOdP„ ZLdQdR„ ZMG dSdT„ dTe ƒZNdUZOdVdW„ ZPG dXdY„ dYe ƒZQdZd[„ ZRd\d]„ ZSG d^d_„ d_ƒZTG d`da„ daeTeƒZUdbdc„ ZVddde„ ZWG dfdg„ dgeƒZXe)eYdh�didj„ ƒZZdkdl„ Z[dmdn„ Z\dodp„ Z]dqdr„ Z^dsdt„ Z_dudv„ Z`dwdx„ Zadydz„ Zbd{d|„ ZcG d}d~„ d~ƒZdG dd€„ d€edeƒZeejF Gd�eƒ eeƒ g¡d‚dƒ„ ƒZfd„d…„ ZgdS )†é    N)Úassert_allclose)Úconfig_contextÚdatasets)ÚBaseEstimatorÚTransformerMixinÚcloneÚis_classifier)ÚPCA)ÚInconsistentVersionWarning)ÚGridSearchCV)ÚPipeline)ÚStandardScaler)ÚSVC)ÚDecisionTreeClassifierÚDecisionTreeRegressor)ÚMockDataFrame)Ú_get_output_config)Úassert_array_equalÚassert_no_warningsÚignore_warningsc                   @   s   e Zd Zddd„ZdS )ÚMyEstimatorr   Nc                 C   s   || _ || _d S ©N)Úl1Úempty)Úselfr   r   © r   úV/var/www/html/bwave/python/venv/lib/python3.8/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   )   s    z
K.__init__)NNr   r   r   r   r   r"   (   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%   .   s   r%   c                   @   s   e Zd Zdd„ ZdS )ÚNaNTagc                 C   s   ddiS )NÚ	allow_nanTr   ©r   r   r   r   Ú
_more_tags5   s    zNaNTag._more_tagsN©r   r    r!   r+   r   r   r   r   r(   4   s   r(   c                   @   s   e Zd Zdd„ ZdS )ÚNoNaNTagc                 C   s   ddiS ©Nr)   Fr   r*   r   r   r   r+   :   s    zNoNaNTag._more_tagsNr,   r   r   r   r   r-   9   s   r-   c                   @   s   e Zd Zdd„ ZdS )ÚOverrideTagc                 C   s   ddiS r.   r   r*   r   r   r   r+   ?   s    zOverrideTag._more_tagsNr,   r   r   r   r   r/   >   s   r/   c                   @   s   e Zd Zdd„ ZdS )ÚDiamondOverwriteTagc                 C   s   t ƒ S r   )Údictr*   r   r   r   r+   D   s    zDiamondOverwriteTag._more_tagsNr,   r   r   r   r   r0   C   s   r0   c                   @   s   e Zd ZdS )ÚInheritDiamondOverwriteTagN©r   r    r!   r   r   r   r   r2   H   s   r2   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   R   s    zModifyInitParams.__init__N)r   r    r!   Ú__doc__ÚnpÚarrayr   r   r   r   r   r4   L   s   r4   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&   r6   r   r   r   r   Y   s    zBuggy.__init__)N©r   r    r!   r7   r   r   r   r   r   r:   V   s   r:   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   ^   s    zNoEstimator.__init__Nc                 C   s   | S r   r   ©r   ÚXÚyr   r   r   Úfita   s    zNoEstimator.fitc                 C   s   d S r   r   ©r   r@   r   r   r   Úpredictd   s    zNoEstimator.predict)NN)N)r   r    r!   r   rB   rD   r   r   r   r   r>   ]   s   
r>   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   k   s    zVargEstimator.__init__Nr=   r   r   r   r   rE   h   s   rE   c                  C   sn   ddl m} m} | |dd�}t|ƒ}||k	s0t‚| ¡ | ¡ ksDt‚| |t d¡d�}t|ƒ}||k	sjt‚d S )Nr   ©Ú	SelectFprÚ	f_classifçš™™™™™¹?©Úalpha)é
   é   )Úsklearn.feature_selectionrG   rH   r   ÚAssertionErrorÚ
get_paramsr8   Zzeros©rG   rH   ÚselectorZnew_selectorr   r   r   Ú
test_clones   s    rS   c                  C   s<   ddl m} m} | |dd�}d|_t|ƒ}t|dƒr8t‚d S )Nr   rF   rI   rJ   ÚtestÚown_attribute)rN   rG   rH   rU   r   ÚhasattrrO   rQ   r   r   r   Útest_clone_2…   s
    rW   c               	   C   sš   t ƒ } d| _t t¡� t| ƒ W 5 Q R X tƒ }t t¡� t|ƒ W 5 Q R X tƒ }t t¡� t|ƒ W 5 Q R X t	ƒ }t t¡� t|ƒ W 5 Q R X d S )NrM   )
r:   r&   ÚpytestÚraisesÚRuntimeErrorr   r>   Ú	TypeErrorrE   r4   )ZbuggyZno_estimatorZ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   r8   r9   r   r   r   ÚspZ
csr_matrixÚdata©ÚclfZclf2r   r   r   Útest_clone_empty_array§   s    rc   c                  C   s(   t tjd�} t| ƒ}| j|jks$t‚d S ©Nr^   )r   r8   Únanr   r   rO   ra   r   r   r   Útest_clone_nan²   s    rf   c                  C   s*   dt ƒ i} t| ƒ}| d |d k	s&t‚d S )Nr&   )r   r   rO   )ÚorigZclonedr   r   r   Útest_clone_dictº   s    
rh   c                     sn   ‡ fdd„t tƒD ƒ} | D ]N‰ ˆ t d¡ƒ}t|d�}t|ƒ}|jj|jjksRt‚t	|j 
¡ |j 
¡ ƒ qd S )Nc                    s0   g | ](}|  d ¡rttt|ƒ ‰ ƒtkrˆ ‘qS )Z_matrix)ÚendswithÚtypeÚgetattrr_   )Ú.0Úname©Úclsr   r   Ú
<listcomp>Â   s   
 þz.test_clone_sparse_matrices.<locals>.<listcomp>é   r^   )Údirr_   r8   Úeyer   r   r   Ú	__class__rO   r   Ztoarray)Zsparse_matrix_classesZsparse_matrixrb   Z
clf_clonedr   rn   r   Útest_clone_sparse_matricesÁ   s    
þ
ru   c                  C   s&   t t d�} t| ƒ}| j|jks"t‚d S rd   )r   r   r   rO   ra   r   r   r   Útest_clone_estimator_typesÐ   s    
rv   c               	   C   s*   d} t jt| d�� ttƒ W 5 Q R X d S )Nz8You should provide an instance of scikit-learn estimator©Úmatch)rX   rY   r[   r   r   )Úmsgr   r   r   Ú%test_clone_class_rather_than_instanceÙ   s    rz   c                  C   sT   t ƒ } t| ƒ ttƒ tƒ ƒ}t|ƒdks,t‚tdgd d�}tt|ƒƒdksPt‚d S )NzT(a=K(), b=K())Zlong_paramsiè  r<   iå  )r   Úreprr%   r"   rO   Úlen)Úmy_estimatorrT   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   sv   t tƒ tƒ} d| jdd�ks t‚d| jdd�ks4t‚| jdd� | jjdksPt‚t t	¡� | jdd� W 5 Q R X d S )NÚa__dT)ÚdeepFrM   )r�   )Za__a)
r%   r"   rP   rO   Ú
set_paramsr&   r$   rX   rY   Ú
ValueError)rT   r   r   r   Útest_get_paramsò   s    r…   c                  C   sj   t ƒ } t| ƒst‚tt| dddgiƒƒs,t‚ttd| fgƒƒsBt‚ttdt| dddgiƒfgƒƒsft‚d S )NÚCrI   r;   ÚsvcZsvc_cv)r   r   rO   r   r   )r‡   r   r   r   Útest_is_classifierÿ   s
    rˆ   c               	   C   sX   t dtƒ fgƒ} t t¡� | jdd� W 5 Q R X t t¡� | jdd� W 5 Q R X d S )Nr‡   T)Zsvc__stupid_param)Zsvm__stupid_param)r   r   rX   rY   r„   rƒ   )rb   r   r   r   Útest_set_params  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 |Ž |ˆkst‚| S r   )Úsuperrƒ   rO   )r   Úkwargs)rt   Úexpected_kwargsr   r   rƒ     s    zJtest_set_params_passes_all_parameters.<locals>.TestDecisionTree.set_params)r   r    r!   rƒ   Ú__classcell__r   ©rŒ   )rt   r   ÚTestDecisionTree  s   r�   rq   rM   )Ú	max_depthZmin_samples_leafÚ	estimator)Zestimator__max_depthZestimator__min_samples_leaf)r   r   r   rƒ   )r�   r\   r   rŽ   r   Ú%test_set_params_passes_all_parameters  s    

þr’   c                  C   s0   t tƒ i ƒ} | jtƒ dd� | jjdks,t‚d S )Ng      E@)r‘   Zestimator__C)r   r   rƒ   r   r‘   r†   rO   )Zgscvr   r   r   Ú$test_set_params_updates_valid_params,  s    r“   ztree,datasetrM   )r�   Úrandom_state)r”   c           	      C   sh   t j d¡}|\}}|  ||¡ |jddt|ƒd�}|  ||¡}| j|||d�}d}||ksdt|ƒ‚d S )Nr   r;   rL   )Úsize)Úsample_weightz5Unweighted and weighted scores are unexpectedly equal)r8   ÚrandomZRandomStaterB   Úrandintr|   ÚscorerO   )	ÚtreeZdatasetÚrngr@   rA   r–   Zscore_unweightedZscore_weightedry   r   r   r   Útest_score_sample_weight4  s    rœ   c                  C   sb   G dd„ dt tƒ} t d¡}t|ƒ}| |dd�}t|ƒ}|j|jkj ¡ sNt	‚|j
|j
ks^t	‚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
        -----
        Nr;   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   r?   r   r   r   rB   d  s    z7test_clone_pandas_dataframe.<locals>.DummyEstimator.fitc                 S   s   d S r   r   rC   r   r   r   Ú	transformg  s    z=test_clone_pandas_dataframe.<locals>.DummyEstimator.transform)Nr;   )N)r   r    r!   r7   r   rB   rŸ   r   r   r   r   ÚDummyEstimatorP  s   

r    rL   r;   )rž   )r   r   r8   Zaranger   r   r�   ÚvaluesÚallrO   rž   )r    r$   r�   ÚeZcloned_er   r   r   Útest_clone_pandas_dataframeO  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|ƒ}||ksÀt‚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   y  s    z5test_clone_protocol.<locals>.FrozenEstimator.__init__c                 S   s   t | j|ƒS r   )rk   r¥   )r   rm   r   r   r   Ú__getattr__|  s    z8test_clone_protocol.<locals>.FrozenEstimator.__getattr__c                 S   s   | S r   r   r*   r   r   r   Ú__sklearn_clone__  s    z>test_clone_protocol.<locals>.FrozenEstimator.__sklearn_clone__c                 _   s   | S r   r   ©r   Úargsr‹   r   r   r   rB   ‚  s    z0test_clone_protocol.<locals>.FrozenEstimator.fitc                 _   s   | j j||Ž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§   rB   rª   r   r   r   r   ÚFrozenEstimatorx  s
   r«   éÿÿÿÿéþÿÿÿéýÿÿÿrM   é   é   r;   N)r   r8   r9   r	   rB   Zcomponents_r   r   Zget_feature_names_outZasarrayrª   r   rO   )r«   r@   ZpcaÚ
componentsZ
frozen_pcaZX_newZclone_frozen_pcar   r   r   Útest_clone_protocolu  s    

r²   c                  C   sl   t  ¡ } tƒ  | j| j¡}t |¡}d|ks0t‚t	tj
|ƒ}| | j| j¡}| | j| j¡}||ksht‚d S )Nó   version)r   Ú	load_irisr   rB   r`   ÚtargetÚpickleÚdumpsrO   r   Ú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)r1   Ú__dict__Úitemsr*   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 5 Q R X |jd j}t|tƒstt‚|jdks‚t‚|jdks�t‚|jt
jks t‚d S )Nr»   r¼   ©r‘   Zold_versionÚcurrent_versionrw   r   )r   r´   r»   rB   r`   rµ   r¶   r·   Úpickle_error_messageÚformatÚsklearnÚ__version__rX   ÚwarnsÚUserWarningr¸   ÚlistÚmessageÚ
isinstancer
   rO   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¾   r*   r   r   r   rÀ   Ð  s    zTreeNoVersion.__getstate__NrÁ   r   r   r   r   rÎ   Ï  s   rÎ   c               	   C   sj   t  ¡ } tƒ  | j| j¡}t |¡}d|ks0t‚t	j
ddtjd�}tjt|d�� t |¡ W 5 Q R X d S )Nr³   rÎ   zpre-0.18rÂ   rw   )r   r´   rÎ   rB   r`   rµ   r¶   r·   rO   rÄ   rÅ   rÆ   rÇ   rX   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   sN   t  ¡ } tƒ  | j| j¡}t |¡}ztj}dt_t	tj
|ƒ W 5 |t_X d S )NÚ
notsklearn)r   r´   rÎ   rB   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_estimatorå  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¾   r5   ©r   r`   r   r   r   rÀ   ò  s    
z%DontPickleAttributeMixin.__getstate__c                 C   s   d|d< | j  |¡ d S )NTÚ	_restored)r¾   Úupdate)r   Ústater   r   r   Ú__setstate__÷  s    z%DontPickleAttributeMixin.__setstate__N)r   r    r!   rÀ   rÛ   r   r   r   r   rÓ   ñ  s   rÓ   c                   @   s   e Zd Zddd„ZdS )ÚMultiInheritanceEstimatorrq   c                 C   s   || _ d | _d S r   ©Úattribute_pickledrÕ   ©r   rÞ   r   r   r   r   ý  s    z"MultiInheritanceEstimator.__init__N)rq   r   r   r   r   r   rÜ   ü  s   rÜ   c                  C   sJ   t ƒ } d| _t | ¡}t |¡}|jdks.t‚|jd ks<t‚|jsFt‚d S ©Nú$this attribute should not be pickledrq   )rÜ   rÕ   r¶   r·   r¸   rÞ   rO   rØ   ©r‘   Ú
serializedZestimator_restoredr   r   r   Ú3test_pickling_when_getstate_is_overwritten_by_mixin  s    

rä   c               	   C   s~   zltƒ }d}||_t |ƒj} dt |ƒ_| ¡ }|d ddœks@t‚d|d< | |¡ |jdks`t‚|jsjt‚W 5 | t |ƒ_X d S )Nrá   rÑ   rq   )rÕ   rÞ   r°   rÞ   )	rj   r    rÜ   rÕ   rÀ   rO   rÛ   rÞ   rØ   )Úold_modr‘   Útextrã   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dd„ ZdS )ÚSingleInheritanceEstimatorrq   c                 C   s   || _ d | _d S r   rÝ   rß   r   r   r   r   !  s    z#SingleInheritanceEstimator.__init__c                 C   s   | j  ¡ }d |d< |S rÔ   rÖ   r×   r   r   r   rÀ   %  s    
z'SingleInheritanceEstimator.__getstate__N)rq   )r   r    r!   r   rÀ   r   r   r   r   rè      s   
rè   )Úcategoryc                  C   s@   t ƒ } d| _t | ¡}t |¡}|jdks.t‚|jd ks<t‚d S rà   )rè   rÕ   r¶   r·   r¸   rÞ   rO   râ   r   r   r   ÚCtest_pickling_works_when_getstate_is_overwritten_in_the_child_class+  s    

rê   c                  C   sr   t ƒ } tƒ }|  ¡ d st‚| ¡ d r,t‚tƒ }| ¡ d rBt‚tƒ }| ¡ d sXt‚tƒ }| ¡ d snt‚d S )Nr)   )r(   r-   Z	_get_tagsrO   r/   r0   r2   )Znan_tag_estZno_nan_tag_estZredefine_tags_estZdiamond_tag_estZinherit_diamond_tag_estr   r   r   Útest_tag_inheritance6  s    rë   c               	   C   s@   G dd„ dt ƒ} | ƒ }d}tjt|d�� | ¡  W 5 Q R X 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>.MyEstimatorrq   c                 S   s   d S r   r   )r   Úparamr   r   r   r   J  s    zEtest_raises_on_get_params_non_attribute.<locals>.MyEstimator.__init__Nc                 S   s   | S r   r   r?   r   r   r   rB   M  s    z@test_raises_on_get_params_non_attribute.<locals>.MyEstimator.fit)rq   )N)r   r    r!   r   rB   r   r   r   r   r   I  s   
r   z-'MyEstimator' object has no attribute 'param'rw   )r   rX   rY   ÚAttributeErrorrP   )r   r\   ry   r   r   r   Ú'test_raises_on_get_params_non_attributeH  s
    rî   c               	   C   s`   t ƒ } |  ¡ }d|kst‚d|ks&t‚tdd��& |  ¡ }d|ksFt‚d|ksRt‚W 5 Q R X d S )Nz
text/plainz	text/htmlræ   ©Údisplay)r   Ú_repr_mimebundle_rO   r   )rš   Úoutputr   r   r   Útest_repr_mimebundle_W  s    ró   c               
   C   sZ   t ƒ } |  ¡ }d|kst‚tdd��, d}tjt|d�� |  ¡ }W 5 Q R X W 5 Q R X d S )Nz<style>ræ   rï   z _repr_html_ is only defined whenrw   )r   Z_repr_html_rO   r   rX   rY   rí   )rš   rò   ry   r   r   r   Útest_repr_html_wrapsd  s    rô   c               	   C   sf   t ƒ } dddgdddgg}| j|dd� | jdks6t‚d	}tjt|d
�� | jddd� W 5 Q R X dS )z>Check that `_check_n_features` validates data when reset=Falser;   rM   r¯   r°   rq   é   T©ÚresetzHX does not contain any features, but MyEstimator is expecting 3 featuresrw   ú	invalid XFN)r   Ú_check_n_featuresÚn_features_in_rO   rX   rY   r„   )r\   ZX_trainry   r   r   r   Útest_n_features_in_validationq  s    rû   c                  C   s4   t ƒ } | jddd� t| dƒr"t‚| j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ù   rV   rO   )r\   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ƒrlt‚| 	|¡ d}| j||jddd… d�}t jt|d	�� | |¡ W 5 Q R X d
}t jt|d	�� | |¡ W 5 Q R X d}|ƒ  	|¡}t jt|d	�� | |¡ W 5 Q R X |  |¡}|ƒ }t ¡ � t dt¡ | 	|¡ W 5 Q R X ||g}	|	D ]0}
t ¡ � t dt¡ | |
¡ W 5 Q R X �qZ| j|ddddgd�}|ƒ }t d¡}t jt|d	�� | 	|¡ W 5 Q R X t jt|d	�� | |¡ W 5 Q R X 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   |   |¡ | S r   ©Ú_validate_datar?   r   r   r   rB   ’  s    
z2test_feature_names_in.<locals>.NoOpTransformer.fitc                 S   s   | j |dd� |S )NFrö   r   rC   r   r   r   rŸ   –  s    z8test_feature_names_in.<locals>.NoOpTransformer.transform)N)r   r    r!   rB   rŸ   r   r   r   r   ÚNoOpTransformer‘  s   
r  Úfeature_names_in_z5The feature names should match those that were passedNr¬   rw   zVX does not have valid feature names, but NoOpTransformer was fitted with feature nameszIX has feature names, but NoOpTransformer was fitted without feature namesÚerrorr&   r'   r;   rM   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.)rX   Úimportorskipr   r´   r`   Ú	DataFrameÚfeature_namesr   r   rB   r   r  rÿ   rV   rO   rY   r„   rŸ   rÈ   rÉ   ÚwarningsÚcatch_warningsÚsimplefilterÚreÚescaper[   )Úpdr¹   ZX_npr�   r  Ztransry   Zdf_badZdf_int_namesZXsr@   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
ƒ}|ƒ }|j|dd�}t|tjƒsft‚t|| ¡ ƒ |j|dd�}||ksŽt‚|j|dd�}t|tjƒs¬t‚t|| ¡ ƒ |j|dd�}	|	|ksÔt‚|j||dd�\}}t|tjƒsøt‚t|| ¡ ƒ t|tjƒ�st‚t|| ¡ ƒ |j||dd�\}}	||k�sHt‚|	|k�sVt‚d	}
t jt|
d
�� | ¡  W 5 Q R X dS )z/Check cast_to_ndarray option of _validate_data.rý   rþ   c                   @   s   e Zd ZdS )z;test_validate_data_cast_to_ndarray.<locals>.NoOpTransformerNr3   r   r   r   r   r  à  s   r  T)Úcast_to_ndarrayF)rA   r  z*Validation should be done on X, y or both.rw   N)rX   r  r   r´   r  r`   r  ZSeriesrµ   r   r   r  rÌ   r8   ZndarrayrO   r   Zto_numpyrY   r„   )r  r¹   r�   rA   r  Zno_opZX_np_outZX_df_outZy_np_outZy_series_outry   r   r   r   Ú"test_validate_data_cast_to_ndarrayØ  s6    
r  c                  C   s:   t ƒ jdd�} td| ƒ}t| ƒ}td|ƒ}||ks6t‚dS )z-Check that clone keeps the set_output config.rý   )rŸ   rŸ   N)r   Z
set_outputr   r   rO   )ÚssÚconfigZss_cloneZconfig_cloner   r   r   Útest_clone_keeps_output_config  s
    

r  c                   @   s   e Zd ZdS )Ú_EmptyNr3   r   r   r   r   r    s   r  c                   @   s   e Zd ZdS )ÚEmptyEstimatorNr3   r   r   r   r   r    s   r  r‘   c                 C   s4   |   ¡ }dtji}||kst‚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Ç   rO   r¶   r¸   r·   r   )r‘   rÚ   Úexpectedr   r   r   Ú"test_estimator_empty_instance_dict  s    
r  c               	   C   sr   G dd„ dƒ} G dd„ dt | ƒ}d}tjt|d�� |ƒ  ¡  W 5 Q R X tjt|d�� t |ƒ ¡ W 5 Q R X 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   Ú	WithSlots'  s   r  c                   @   s   e Zd ZdS )zDtest_estimator_getstate_using_slots_error_message.<locals>.EstimatorNr3   r   r   r   r   Ú	Estimator*  s   r  zRYou cannot use `__slots__` in objects inheriting from `sklearn.base.BaseEstimator`rw   N)r   rX   rY   r[   rÀ   r¶   r·   )r  r  ry   r   r   r   Ú1test_estimator_getstate_using_slots_error_message$  s    ÿr  )hr¶   r  r  Únumpyr8   rX   Zscipy.sparseÚsparser_   Znumpy.testingr   rÆ   r   r   Zsklearn.baser   r   r   r   Zsklearn.decompositionr	   Zsklearn.exceptionsr
   Zsklearn.model_selectionr   Zsklearn.pipeliner   Zsklearn.preprocessingr   Zsklearn.svmr   Zsklearn.treer   r   Zsklearn.utils._mockingr   Zsklearn.utils._set_outputr   Zsklearn.utils._testingr   r   r   r   r"   r%   r(   r-   r/   r0   r2   r4   r:   r>   rE   rS   rW   r]   rc   rf   rh   ru   rv   rz   r~   r€   r…   rˆ   r‰   r’   r“   ÚmarkZparametrizeZ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  r  r   r   r   r   Ú<module>   s²   	
	

þ

þûþ
&,ÿ	

N)
