
    {Kgo                     l   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 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*m+Z+  G d de      Z, G d de      Z- G d de      Z. G d de      Z/ G d de      Z0 G d de/      Z1 G d de/e0      Z2 G d de2      Z3 G d d e      Z4 G d! d"e      Z5 G d# d$      Z6 G d% d&e      Z7d' Z8d( Z9d) Z:d* Z;d+ Z<d, Z=d- Z>d. Z?d/ Z@d0 ZAd1 ZBd2 ZCd3 ZDd4 ZEd5 ZFd6 ZGej                  j                  d7 e!d8d 9       ej                  d :      f e"d8d 9       ej                  d :      fg      d;        ZLd< ZMd= ZNd> ZO G d? d@e!      ZPdAZQdB ZR G dC dDe!      ZSdE ZTdF ZU G dG dH      ZV G dI dJeVe      ZWdK ZXdL ZY G dM dNe      ZZ e+e[O      dP        Z\dQ Z]dR Z^dS Z_dT Z`dU ZadV ZbdW ZcdX ZddY Ze G dZ d[      Zf G d\ d]efe      Zgej                  j                  d^ e        eg       g      d_        Zhd` Ziej                  j                  dag db      dc        Zjej                  j                  dd      de        Zlej                  j                  dd      df        Zmy)g    N)assert_allclose)config_contextdatasets)BaseEstimatorOutlierMixinTransformerMixincloneis_classifier)PCA)InconsistentVersionWarning)GridSearchCV)Pipeline)StandardScaler)SVC)DecisionTreeClassifierDecisionTreeRegressor)MockDataFrame)_get_output_config)_convert_containerassert_array_equalassert_no_warningsignore_warningsc                       e Zd ZddZy)MyEstimatorNc                      || _         || _        y N)l1empty)selfr   r   s      [/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/tests/test_base.py__init__zMyEstimator.__init__*   s    
    )r   N__name__
__module____qualname__r!    r"   r    r   r   )   s    r"   r   c                       e Zd ZddZy)KNc                      || _         || _        y r   )cd)r   r+   r,   s      r    r!   z
K.__init__0       r"   NNr#   r'   r"   r    r)   r)   /       r"   r)   c                       e Zd ZddZy)TNc                      || _         || _        y r   )ab)r   r3   r4   s      r    r!   z
T.__init__6   r-   r"   r.   r#   r'   r"   r    r1   r1   5   r/   r"   r1   c                       e Zd Zd Zy)NaNTagc                 
    ddiS )N	allow_nanTr'   r   s    r    
_more_tagszNaNTag._more_tags<   s    T""r"   Nr$   r%   r&   r:   r'   r"   r    r6   r6   ;   s    #r"   r6   c                       e Zd Zd Zy)NoNaNTagc                 
    ddiS Nr8   Fr'   r9   s    r    r:   zNoNaNTag._more_tagsA       U##r"   Nr;   r'   r"   r    r=   r=   @       $r"   r=   c                       e Zd Zd Zy)OverrideTagc                 
    ddiS r?   r'   r9   s    r    r:   zOverrideTag._more_tagsF   r@   r"   Nr;   r'   r"   r    rC   rC   E   rA   r"   rC   c                       e Zd Zd Zy)DiamondOverwriteTagc                     t               S r   )dictr9   s    r    r:   zDiamondOverwriteTag._more_tagsK   s	    vr"   Nr;   r'   r"   r    rF   rF   J   s    r"   rF   c                       e Zd Zy)InheritDiamondOverwriteTagNr$   r%   r&   r'   r"   r    rJ   rJ   O       r"   rJ   c                   <    e Zd ZdZ ej
                  dg      fdZy)ModifyInitParamsz_Deprecated behavior.
    Equal parameters but with a type cast.
    Doesn't fulfill a is a
    r   c                 .    |j                         | _        y r   )copyr3   r   r3   s     r    r!   zModifyInitParams.__init__Y   s    r"   N)r$   r%   r&   __doc__nparrayr!   r'   r"   r    rN   rN   S   s    
 "1# r"   rN   c                       e Zd ZdZddZy)Buggyz9A buggy estimator that does not set its parameters right.Nc                     d| _         y N   r3   rQ   s     r    r!   zBuggy.__init__`   s	    r"   r   r$   r%   r&   rR   r!   r'   r"   r    rV   rV   ]   s
    ?r"   rV   c                   "    e Zd Zd ZddZddZy)NoEstimatorc                      y r   r'   r9   s    r    r!   zNoEstimator.__init__e       r"   Nc                     | S r   r'   r   Xys      r    fitzNoEstimator.fith   s    r"   c                      y r   r'   r   rb   s     r    predictzNoEstimator.predictk   s    r"   r.   r   )r$   r%   r&   r!   rd   rg   r'   r"   r    r]   r]   d   s    r"   r]   c                       e Zd ZdZd Zy)VargEstimatorz-scikit-learn estimators shouldn't have vargs.c                      y r   r'   )r   vargss     r    r!   zVargEstimator.__init__r   r_   r"   Nr[   r'   r"   r    ri   ri   o   s
    7r"   ri   c                      ddl m} m}  | |d      }t        |      }||usJ |j	                         |j	                         k(  sJ  | |t        j                  d            }t        |      }||usJ y )Nr   	SelectFpr	f_classif皙?alpha)
      )sklearn.feature_selectionrn   ro   r	   
get_paramsrS   zerosrn   ro   selectornew_selectors       r    
test_cloner{   z   sv     ?#.H?L<''' L$;$;$===="((7*;<H?L<'''r"   c                  h    ddl m} m}  | |d      }d|_        t	        |      }t        |d      rJ y )Nr   rm   rp   rq   testown_attribute)ru   rn   ro   r~   r	   hasattrrx   s       r    test_clone_2r      s7     ?#.H#H?L|_5555r"   c                  *   t               } d| _        t        j                  t              5  t        |        d d d        t               }t        j                  t              5  t        |       d d d        t               }t        j                  t              5  t        |       d d d        t               }t        j                  t              5  t        |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   y xY w)Nrt   )
rV   r3   pytestraisesRuntimeErrorr	   r]   	TypeErrorri   rN   )buggyno_estimatorvarg_estests       r    test_clone_buggyr      s    GEEG	|	$e 
% =L	y	!l 
" H	|	$h 
% 
C	|	$c
 
%	$ 
%	$ 
"	! 
%	$ 
%	$s/   C%"C1C=D	%C.1C:=D	Dc                  ~   t        t        j                  g             } t        |       }t	        | j
                  |j
                         t        t        j                  t        j                  dgg                  } t        |       }t	        | j
                  j                  |j
                  j                         y )Nr   r   )	r   rS   rT   r	   r   r   sp
csr_matrixdataclfclf2s     r    test_clone_empty_arrayr      sq    
BHHRL
)C:Dsyy$**-
BMM"((QC5/:
;C:Dsyy~~tzz7r"   c                      t        t        j                        } t        |       }| j                  |j                  u sJ y Nr   )r   rS   nanr	   r   r   s     r    test_clone_nanr      s/    
BFF
#C:D99

"""r"   c                  J    dt               i} t        |       }| d   |d   usJ y )Nr3   )r   r	   )origcloneds     r    test_clone_dictr      s-    D4[F9F3K'''r"   c            	         t        t              D  cg c]6  } | j                  d      r#t        t	        t        |       x}      t        u r|8 }} |D ]  } |t        j                  d            }t        |      }t        |      }|j                  j                  |j                  j                  u sJ t        |j                  j                         |j                  j                                 y c c} w )N_matrix   r   )dirr   endswithtypegetattrrS   eyer   r	   r   	__class__r   toarray)nameclssparse_matrix_classessparse_matrixr   
clf_cloneds         r    test_clone_sparse_matricesr      s     GD==#GB4E-ES(F$(N 	   %BFF1I.3Z
yy""j&6&6&@&@@@@399,,.
0@0@0H0H0JK %s   ;C3c                  n    t        t               } t        |       }| j                  |j                  u sJ y r   )r   r	   r   r   s     r    test_clone_estimator_typesr      s-     K
(C:D99

"""r"   c                      d} t        j                  t        |       5  t        t               d d d        y # 1 sw Y   y xY w)Nz8You should provide an instance of scikit-learn estimatormatch)r   r   r   r	   r   )msgs    r    %test_clone_class_rather_than_instancer      s,     EC	y	,k 
-	,	,s	   7A c                      t               } t        |        t        t               t                     }t        |      dk(  sJ t        dgdz        }t	        t        |            dk(  sJ y )NzT(a=K(), b=K())long_paramsi  rZ   i  )r   reprr1   r)   len)my_estimatorr}   some_ests      r    	test_reprr      s[    =LQS!#;D:****M?T)*HtH~#%%%r"   c                  .    t               } t        |        y r   )r   str)r   s    r    test_strr      s    =Lr"   c                  f   t        t               t              } d| j                  d      v sJ d| j                  d      vsJ | j                  d       | j                  j
                  dk(  sJ t        j                  t              5  | j                  d       d d d        y # 1 sw Y   y xY w)Na__dT)deepFrt   )r   )a__a)	r1   r)   rv   
set_paramsr3   r,   r   r   
ValueError)r}   s    r    test_get_paramsr      s    QS!9DT__$_////e4444OOO6688q==	z	"Q 
#	"	"s   B''B0c                      t               } t        |       sJ t        t        | dddgi            sJ t        t        d| fg            sJ t        t        dt        | dddgi      fg            sJ y )NCrp   rY   svcsvc_cv)r   r
   r   r   )r   s    r    test_is_classifierr     sw    
%CcC#q?;<<<E3<.1222Hl3sAh.P#Q"RSTTTr"   c                  0   t        dt               fg      } t        j                  t              5  | j                  d       d d d        t        j                  t              5  | j                  d       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)Nr   T)svc__stupid_param)svm__stupid_param)r   r   r   r   r   r   )r   s    r    test_set_paramsr     sl    
UCEN#
$C 
z	". 
# 
z	". 
#	"	 
#	" 
#	"s   B $B B	Bc                       G fddt               } dddt        d |        fg      t         |        i       fD ]  }|j                  dd        y )Nc                   "     e Zd Z fdZ xZS )?test_set_params_passes_all_parameters.<locals>.TestDecisionTreec                 4    t        |   di | |k(  sJ | S )Nr'   )superr   )r   kwargsr   expected_kwargss     r    r   zJtest_set_params_passes_all_parameters.<locals>.TestDecisionTree.set_params%  s&    G((_,,,Kr"   )r$   r%   r&   r   __classcell__)r   r   s   @r    TestDecisionTreer   $  s    	 	r"   r   r   rt   )	max_depthmin_samples_leaf	estimator)estimator__max_depthestimator__min_samples_leaf)r   r   r   r   )r   r   r   s     @r    %test_set_params_passes_all_parametersr      s\    1  %&1=O; 0 2345%', 	A1M	r"   c                      t        t               i       } | j                  t               d       | j                  j
                  dk(  sJ y )Ng      E@)r   estimator__C)r   r   r   r   r   r   )gscvs    r    $test_set_params_updates_valid_paramsr   3  s>     .0"5DOOce$O7>>t###r"   ztree,datasetrt   )r   random_state)r   c                    t         j                  j                  d      }|\  }}| j                  ||       |j	                  ddt        |            }| j                  ||      }| j                  |||      }d}||k7  sJ |       y )Nr   rY   rs   )size)sample_weightz5Unweighted and weighted scores are unexpectedly equal)rS   randomRandomStaterd   randintr   score)	treedatasetrngrb   rc   r   score_unweightedscore_weightedr   s	            r    test_score_sample_weightr   ;  s     ))


"CDAqHHQNKK2CFK3Mzz!Q'ZZ1MZBN
AC~-2s2-r"   c                  2    G d dt         t              } t        j                  d      }t	        |      } | |d      }t        |      }|j                  |j                  k(  j                  j                         sJ |j                  |j                  k(  sJ y )Nc                   &    e Zd ZdZddZddZd Zy)3test_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
        -----
        Nc                      || _         || _        y r   )dfscalar_param)r   r   r   s      r    r!   z<test_clone_pandas_dataframe.<locals>.DummyEstimator.__init__g  s    DG ,Dr"   c                      y r   r'   ra   s      r    rd   z7test_clone_pandas_dataframe.<locals>.DummyEstimator.fitk      r"   c                      y r   r'   rf   s     r    	transformz=test_clone_pandas_dataframe.<locals>.DummyEstimator.transformn  r   r"   rX   r   )r$   r%   r&   rR   r!   rd   r   r'   r"   r    DummyEstimatorr   W  s    		-		r"   r   rs   rY   )r   )
r   r   rS   aranger   r	   r   valuesallr   )r   r,   r   ecloned_es        r    test_clone_pandas_dataframer   V  s~    )= 6 			"A	q	Br*AQxH DDHKK''++--->>X22222r"   c                  Z    G d dt               } t        j                  ddgddgddgg      }t               j	                  |      }|j
                  } | |      }t        |j
                  |       t        |j                         |j                                t        j                  ddgddgd	dgg      }|j	                  |       t        |j
                  |       |j                  |       t        |j
                  |       t        |      }||u sJ t        |j
                  |       y
)z:Checks that clone works with `__sklearn_clone__` protocol.c                   *    e Zd Zd Zd Zd Zd Zd Zy),test_clone_protocol.<locals>.FrozenEstimatorc                     || _         y r   )fitted_estimator)r   r  s     r    r!   z5test_clone_protocol.<locals>.FrozenEstimator.__init__  s
    $4D!r"   c                 .    t        | j                  |      S r   )r   r  )r   r   s     r    __getattr__z8test_clone_protocol.<locals>.FrozenEstimator.__getattr__  s    400$77r"   c                     | S r   r'   r9   s    r    __sklearn_clone__z>test_clone_protocol.<locals>.FrozenEstimator.__sklearn_clone__      Kr"   c                     | S r   r'   r   argsr   s      r    rd   z0test_clone_protocol.<locals>.FrozenEstimator.fit  r  r"   c                 :     | j                   j                  |i |S r   )r  r   r
  s      r    fit_transformz:test_clone_protocol.<locals>.FrozenEstimator.fit_transform  s     24((22DCFCCr"   N)r$   r%   r&   r!   r  r  rd   r  r'   r"   r    FrozenEstimatorr    s    	5	8			Dr"   r  rt         rY   N)r   rS   rT   r   rd   components_r   r   get_feature_names_outasarrayr  r	   )r  rb   pca
components
frozen_pcaX_newclone_frozen_pcas          r    test_clone_protocolr  |  s   D- D  	2r(RHr2h/0A
%))A,CJ %JJ**J7 z7793;T;T;VW JJQ!Q!Q01ENN5J**J7 U#J**J7 Z(z)))$00*=r"   c                     t        j                         } t               j                  | j                  | j
                        }t        j                  |      }d|v sJ t        t        j                  |      }|j                  | j                  | j
                        }|j                  | j                  | j
                        }||k(  sJ y )N   _sklearn_version)r   	load_irisr   rd   r   targetpickledumpsr   loadsr   )irisr   tree_pickletree_restoredscore_of_originalscore_of_restoreds         r    ?test_pickle_version_warning_is_not_raised_with_matching_versionr)    s    D!#''		4;;?D,,t$K+---&v||[AM 

499dkk:%++DIIt{{C 1111r"   c                       e Zd Zd Zy)TreeBadVersionc                 L    t        | j                  j                         d      S )N	something)_sklearn_version)rH   __dict__itemsr9   s    r    __getstate__zTreeBadVersion.__getstate__  s    DMM'')KHHr"   Nr$   r%   r&   r1  r'   r"   r    r+  r+    s    I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                  `   t        j                         } t               j                  | j                  | j
                        }t        j                  |      }t        j                  ddt        j                        }t        j                  t        |      5 }t        j                  |       d d d        j                   d   j"                  }t%        |t&              sJ |j(                  dk(  sJ |j*                  dk(  sJ |j,                  t        j                  k(  sJ y # 1 sw Y   vxY w)Nr+  r-  r   old_versioncurrent_versionr   r   )r   r  r+  rd   r   r   r!  r"  pickle_error_messageformatsklearn__version__r   warnsUserWarningr#  listmessage
isinstancer   estimator_nameoriginal_sklearn_versioncurrent_sklearn_version)r$  r   tree_pickle_otherr>  warning_records        r    <test_pickle_version_warning_is_issued_upon_different_versionrE    s    D		4;;7DT*"))"++ * G
 
k	1^&' 
2 !!!$,,Gg9:::!!%5555++{:::**g.A.AAAA 
2	1s   D$$D-c                       e Zd Zd Zy)TreeNoVersionc                     | j                   S r   )r/  r9   s    r    r1  zTreeNoVersion.__getstate__  s    }}r"   Nr2  r'   r"   r    rG  rG    s    r"   rG  c                     t        j                         } t               j                  | j                  | j
                        }t        j                  |      }d|vsJ t        j                  ddt        j                        }t        j                  t        |      5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr  rG  zpre-0.18r4  r   )r   r  rG  rd   r   r   r!  r"  r7  r8  r9  r:  r   r;  r<  r#  )r$  r   tree_pickle_noversionr>  s       r    Dtest_pickle_version_warning_is_issued_when_no_version_info_in_picklerK    s    D?tyy$++6D"LL.&;;;;"))!++ * G 
k	1*+ 
2	1	1s   B>>Cc                  T   t        j                         } t               j                  | j                  | j
                        }t        j                  |      }	 t        j                  }dt        _        t        t        j                  |       |t        _        y # t        _        w xY w)N
notsklearn)r   r  rG  rd   r   r   r!  r"  r%   r   r#  )r$  r   rJ  module_backups       r    Ctest_pickle_version_no_warning_is_issued_with_non_sklearn_estimatorrO    ss    D?tyy$++6D"LL.1%00#/ 6<<)>?#0 = s   5B B'c                       e Zd Zd Zd Zy)DontPickleAttributeMixinc                 D    | j                   j                         }d |d<   |S N_attribute_not_pickledr/  rP   r   r   s     r    r1  z%DontPickleAttributeMixin.__getstate__  $    }}!!#)-%&r"   c                 D    d|d<   | j                   j                  |       y )NT	_restored)r/  update)r   states     r    __setstate__z%DontPickleAttributeMixin.__setstate__  s    !kU#r"   N)r$   r%   r&   r1  r\  r'   r"   r    rQ  rQ    s    
$r"   rQ  c                       e Zd ZddZy)MultiInheritanceEstimatorc                      || _         d | _        y r   attribute_pickledrT  r   ra  s     r    r!   z"MultiInheritanceEstimator.__init__      !2&*#r"   Nr   r#   r'   r"   r    r^  r^    s    +r"   r^  c                      t               } d| _        t        j                  |       }t        j                  |      }|j
                  dk(  sJ |j                  J |j                  sJ y N$this attribute should not be pickledr   )r^  rT  r!  r"  r#  ra  rY  r   
serializedestimator_restoreds      r    3test_pickling_when_getstate_is_overwritten_by_mixinrk  	  sd    )+I'MI$i(Jj1//144444<<<''''r"   c                  `   	 t               } d}|| _        t        |       j                  }dt        |       _        | j	                         }|d ddk(  sJ d|d<   | j                  |       | j                  dk(  sJ | j                  sJ 	 |t        |       _        y # t               _        w xY w)Nrg  rM  r   )rT  ra  r  ra  )r^  rT  r   r%   r1  r\  ra  rY  )r   textold_modri  s       r    Ftest_pickling_when_getstate_is_overwritten_by_mixin_outside_of_sklearnro    s    --/	5+/	(y/,,%1Y"++-
STUUUU*+
&'z***a///""""%,Y"WY"s   BB B-c                       e Zd ZddZd Zy)SingleInheritanceEstimatorc                      || _         d | _        y r   r`  rb  s     r    r!   z#SingleInheritanceEstimator.__init__(  rc  r"   c                 D    | j                   j                         }d |d<   |S rS  rU  rV  s     r    r1  z'SingleInheritanceEstimator.__getstate__,  rW  r"   Nrd  )r$   r%   r&   r!   r1  r'   r"   r    rq  rq  '  s    +r"   rq  )categoryc                      t               } d| _        t        j                  |       }t        j                  |      }|j
                  dk(  sJ |j                  J y rf  )rq  rT  r!  r"  r#  ra  rh  s      r    Ctest_pickling_works_when_getstate_is_overwritten_in_the_child_classrv  2  sU    *,I'MI$i(Jj1//144444<<<r"   c                  :   t               } t               }| j                         d   sJ |j                         d   rJ t               }|j                         d   rJ t	               }|j                         d   sJ t               }|j                         d   sJ y )Nr8   )r6   r=   	_get_tagsrC   rF   rJ   )nan_tag_estno_nan_tag_estredefine_tags_estdiamond_tag_estinherit_diamond_tag_ests        r    test_tag_inheritancer~  =  s     (KZN  ";///'')+666# **,[999)+O$$&{3338:",,.{;;;r"   c                       G d dt               }  |        }d}t        j                  t        |      5  |j	                          d d d        y # 1 sw Y   y xY w)Nc                       e Zd ZddZddZy)<test_raises_on_get_params_non_attribute.<locals>.MyEstimatorc                      y r   r'   )r   params     r    r!   zEtest_raises_on_get_params_non_attribute.<locals>.MyEstimator.__init__Q  r   r"   Nc                     | S r   r'   ra   s      r    rd   z@test_raises_on_get_params_non_attribute.<locals>.MyEstimator.fitT  r  r"   rd  r   )r$   r%   r&   r!   rd   r'   r"   r    r   r  P  s    		r"   r   z-'MyEstimator' object has no attribute 'param'r   )r   r   r   AttributeErrorrv   )r   r   r   s      r    'test_raises_on_get_params_non_attributer  O  s@    m  -C
9C	~S	1 
2	1	1s   AAc                      t               } | j                         }d|v sJ d|v sJ t        d      5  | j                         }d|v sJ d|vsJ 	 d d d        y # 1 sw Y   y xY w)Nz
text/plainz	text/htmlrm  display)r   _repr_mimebundle_r   )r   outputs     r    test_repr_mimebundle_r  ^  sr    !#D##%F6!!!&   		''')v%%%&((( 
(	'	's   AA#c                  
   t               } | j                         }d|v sJ t        d      5  d}t        j                  t
        |      5  | j                         }d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz<style>rm  r  z _repr_html_ is only defined whenr   )r   _repr_html_r   r   r   r  )r   r  r   s      r    test_repr_html_wrapsr  k  sl    !#DF		'0]]>5%%'F 6 
(	'55 
(	's#   A9A-A9-A6	2A99Bc                      t               } g dg dg}| j                  |d       | j                  dk(  sJ d}t        j                  t
        |      5  | j                  dd	       d
d
d
       y
# 1 sw Y   y
xY w)z>Check that `_check_n_features` validates data when reset=False)rY   rt   r  )r  r      Tresetr  zHX does not contain any features, but MyEstimator is expecting 3 featuresr   	invalid XFN)r   _check_n_featuresn_features_in_r   r   r   )r   X_trainr   s      r    test_n_features_in_validationr  x  sl    
-C)$G'."""
TC	z	-k7 
.	-	-s   A11A:c                      t               } | j                  dd       t        | d      rJ | j                  dd       y)z]Check that `_check_n_features` does not validate data when
    n_features_in_ is not defined.r  Tr  r  FN)r   r  r   )r   s    r     test_n_features_in_no_validationr    sD     -C+T2s,--- +U3r"   c                     t        j                  d      } t        j                         }|j                  }| j                  ||j                        } G d dt        t              } |       j                  |      }t        |j                  |j                         |j                  |       t        |d      rJ |j                  |       d}| j                  ||j                  ddd         }t        j                  t        |	      5  |j!                  |       ddd       d
}t        j"                  t$        |	      5  |j!                  |       ddd       d} |       j                  |      }t        j"                  t$        |	      5  |j!                  |       ddd       | j                  |      } |       }t'        j(                         5  t'        j*                  dt$               |j                  |       ddd       ||g}	|	D ]J  }
t'        j(                         5  t'        j*                  dt$               |j!                  |
       ddd       L | j                  |g d      } |       }t-        j.                  d      }t        j                  t0        |	      5  |j                  |       ddd       t        j                  t0        |	      5  |j!                  |       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   sxY w# 1 sw Y    xY w# 1 sw Y   'xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z;Check that feature_name_in are recorded by `_validate_data`pandascolumnsc                       e Zd ZddZd Zy).test_feature_names_in.<locals>.NoOpTransformerNc                 (    | j                  |       | S r   _validate_datara   s      r    rd   z2test_feature_names_in.<locals>.NoOpTransformer.fit      "Kr"   c                 ,    | j                  |d       |S NFr  r  rf   s     r    r   z8test_feature_names_in.<locals>.NoOpTransformer.transform  s    /Hr"   r   r$   r%   r&   rd   r   r'   r"   r    NoOpTransformerr    s    		r"   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 nameserror)r3   r4   rY   rt   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.)r   importorskipr   r  r   	DataFramefeature_namesr   r   rd   r   r  r  r   r   r   r   r;  r<  warningscatch_warningssimplefilterreescaper   )pdr$  X_npr   r  transr   df_baddf_int_namesXsrb   df_mixeds               r    test_feature_names_inr    s   			X	&BD99D	dD$6$6	7B*M  !!"%Eu..

; 
IIdOu1222	IIbM
AC\\$(:(:4R4(@\AF	z	- 
.
	$  
k	- 
. VC!!$'E	k	- 
. <<%LE		 	 	"g{3		, 
# 	B$$&!!';7OOA '&  ||D*:|;HE
))	?C 
y	,		( 
- 
y	,! 
-	,_ 
.	- 
.	- 
.	- 
#	" '& 
-	, 
-	,sT   K:LL,L!(,L.*L;M:LLL!L+.L8	;MMc                  h   t        j                  d      } t        j                         }| j	                  |j
                  |j                        }| j                  |j                        } G d dt        t              } |       }|j                  |d      }t        |t        j                        sJ t        ||j!                                |j                  |d      }||u sJ |j                  |d      }t        |t        j                        sJ t        ||j!                                |j                  |d      }	|	|u sJ |j                  ||d      \  }}t        |t        j                        sJ t        ||j!                                t        |t        j                        sJ t        ||j!                                |j                  ||d      \  }}	||u sJ |	|u sJ d	}
t        j"                  t$        |

      5  |j                          ddd       y# 1 sw Y   yxY w)z/Check cast_to_ndarray option of _validate_data.r  r  c                       e Zd Zy);test_validate_data_cast_to_ndarray.<locals>.NoOpTransformerNrK   r'   r"   r    r  r        r"   r  T)cast_to_ndarrayF)rc   r  z*Validation should be done on X, y or both.r   N)r   r  r   r  r  r   r  Seriesr   r   r   r  r?  rS   ndarrayr   to_numpyr   r   )r  r$  r   rc   r  no_opX_np_outX_df_outy_np_outy_series_outr   s              r    "test_validate_data_cast_to_ndarrayr    s    
		X	&BD	dii););	<B
		$++A*M  E##B#=Hh

+++Hbkkm,##B#>Hr>>##a#>Hh

+++Hajjl+''!U'CL1--b!T-JHhh

+++Hbkkm,h

+++Hajjl+"11"a1OHlr>>1
6C	z	- 
.	-	-s   H((H1c                      t               j                  d      } t        d|       }t        |       }t        d|      }||k(  sJ y)z-Check that clone keeps the set_output config.r  )r   r   N)r   
set_outputr   r	   )ssconfigss_cloneconfig_clones       r    test_clone_keeps_output_configr    sI     
		$	$x	$	8BR0FRyH%k8<L\!!!r"   c                       e Zd Zy)_EmptyNrK   r'   r"   r    r  r    rL   r"   r  c                       e Zd Zy)EmptyEstimatorNrK   r'   r"   r    r  r    rL   r"   r  r   c                     | j                         }dt        j                  i}||k(  sJ t        j                  t        j
                  t                            y)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)r1  r9  r:  r!  r#  r"  r   )r   r[  expecteds      r    "test_estimator_empty_instance_dictr    sI     ""$E"G$7$78HH LLmo./r"   c                  Z    G d d      }  G d dt         |       }d}t        j                  t        |      5   |       j	                          ddd       t        j                  t        |      5  t        j                   |              ddd       y# 1 sw Y   HxY w# 1 sw Y   yxY w)z:Using a `BaseEstimator` with `__slots__` is not supported.c                       e Zd ZdZy)Dtest_estimator_getstate_using_slots_error_message.<locals>.WithSlots)xN)r$   r%   r&   	__slots__r'   r"   r    	WithSlotsr  .  s    	r"   r  c                       e Zd Zy)Dtest_estimator_getstate_using_slots_error_message.<locals>.EstimatorNrK   r'   r"   r    	Estimatorr  1  r  r"   r  zRYou cannot use `__slots__` in objects inheriting from `sklearn.base.BaseEstimator`r   N)r   r   r   r   r1  r!  r"  )r  r  r   s      r    1test_estimator_getstate_using_slots_error_messager  +  s     M9 	' 
 
y	,  " 
- 
y	,Y[! 
-	, 
-	, 
-	,s   B1B!B!B*zconstructor_name, minversion))	dataframez1.5.0)pyarrowz12.0.0)polarsz0.20.23c                    g dg dg}g d}t        || ||      } G d dt        t              } |       }|j                  |       t	        |j
                  |       |j                  |      }| dk7  rt        ||       g d}t        || |	      }	t        j                  t        d
      5  |j                  |	       ddd       y# 1 sw Y   yxY w)z:Uses the dataframe exchange protocol to get feature names.)rY   r  rt   )r  r  r  )col_0col_1col_2)columns_name
minversionc                       e Zd ZddZd Zy)0test_dataframe_protocol.<locals>.NoOpTransformerNc                 (    | j                  |       | S r   r  ra   s      r    rd   z4test_dataframe_protocol.<locals>.NoOpTransformer.fitQ  r  r"   c                 (    | j                  |d      S r  r  rf   s     r    r   z:test_dataframe_protocol.<locals>.NoOpTransformer.transformU  s    &&q&66r"   r   r  r'   r"   r    r  r  P  s    		7r"   r  r  )r3   r4   r+   )r  zThe feature names should matchr   N)r   r   r   rd   r   r  r   r   r   r   r   )
constructor_namer  r   r  r   r  r  X_out	bad_namesr  s
             r    test_dataframe_protocolr  @  s     y!D)G	W
B7*M 7 E	IIbMu..8OOBE9$ 	E"I&6YOF	z)I	J 
K	J	Js   -CCenable_slep006c                      G d dt         t              } t        j                  t        d      5   |        j                  d      j                  dggdgd       ddd       t        j                  d	      5 } |        j                  d      j                  dggdg       t        |      d
k(  sJ 	 ddd       y# 1 sw Y   dxY w# 1 sw Y   yxY w)zkTest that having a transformer with metadata for transform raises a
    warning when calling fit_transform.c                       e Zd ZddZddZy)Ttest_transformer_fit_transform_with_metadata_in_transform.<locals>.CustomTransformerNc                     | S r   r'   r   rb   rc   props       r    rd   zXtest_transformer_fit_transform_with_metadata_in_transform.<locals>.CustomTransformer.fitn  r  r"   c                     |S r   r'   r   rb   r  s      r    r   z^test_transformer_fit_transform_with_metadata_in_transform.<locals>.CustomTransformer.transformq      Hr"   r.   r   r  r'   r"   r    CustomTransformerr  m      		r"   r  z*`transform` method which consumes metadatar   Tr  rY   Nrecordr   )
r   r   r   r;  r<  set_transform_requestr  r  r  r   )r  r   s     r    9test_transformer_fit_transform_with_metadata_in_transformr  h  s    
M+;  
k)U	V11t1<JJSEA3Q 	K 	
 
W 
	 	 	-11t1<JJQC5STRUV6{a 
.	- 
W	V 
.	-   -C ;;C C	Cc                      G d dt         t              } t        j                  t        d      5   |        j                  d      j                  dggdgd       ddd       t        j                  d	      5 } |        j                  d      j                  dggdg       t        |      d
k(  sJ 	 ddd       y# 1 sw Y   dxY w# 1 sw Y   yxY w)ziTest that having an OutlierMixin with metadata for predict raises a
    warning when calling fit_predict.c                       e Zd ZddZddZy)Vtest_outlier_mixin_fit_predict_with_metadata_in_predict.<locals>.CustomOutlierDetectorNc                     | S r   r'   r  s       r    rd   zZtest_outlier_mixin_fit_predict_with_metadata_in_predict.<locals>.CustomOutlierDetector.fit  r  r"   c                     |S r   r'   r  s      r    rg   z^test_outlier_mixin_fit_predict_with_metadata_in_predict.<locals>.CustomOutlierDetector.predict  r  r"   r.   r   )r$   r%   r&   rd   rg   r'   r"   r    CustomOutlierDetectorr    r  r"   r	  z(`predict` method which consumes metadatar   Tr  rY   Nr  r   )
r   r   r   r;  r<  set_predict_requestfit_predictr  r  r   )r	  r   s     r    7test_outlier_mixin_fit_predict_with_metadata_in_predictr    s    
|  
k)S	T333>JJSEA3Q 	K 	
 
U 
	 	 	-333>JJQC5STRUV6{a 
.	- 
U	T 
.	-r  )nr!  r  r  numpyrS   r   scipy.sparsesparser   numpy.testingr   r9  r   r   sklearn.baser   r   r   r	   r
   sklearn.decompositionr   sklearn.exceptionsr   sklearn.model_selectionr   sklearn.pipeliner   sklearn.preprocessingr   sklearn.svmr   sklearn.treer   r   sklearn.utils._mockingr   sklearn.utils._set_outputr   sklearn.utils._testingr   r   r   r   r   r)   r1   r6   r=   rC   rF   rJ   rN   rV   r]   ri   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markparametrizemake_classificationmake_regressionr   r   r  r)  r+  r7  rE  rG  rK  rO  rQ  r^  rk  ro  rq  r<  rv  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  usefixturesr  r  r'   r"   r    <module>r!     s$    	     )  ,  & 9 0 % 0  F 0 8 -   #] #
$} $
$& $
&( 
	!4 	} M  M ($6(8#(L#&
 U
/$N&$  #QQ?(H((a8	

 "AA>$H$$!4	
	33#3L)>X
2I+ I B&* 
,"	1$ $+ 8- +(-&  ;(= )=<$
)
(
8	4K"\&R"	 		V] 	 }8H&IJ0 K0"* "  @ )*  + 2 )*  + r"   