
    -i?                        S SK r S SKJr  S SKrS SKrS SKJr  S SKJ	r	J
r
  S SKJr  S SKJrJrJrJrJrJrJrJr  S SKJr  S rS	 r\R4                  R7                  S
\5      S 5       r " S S5      r " S S5      r " S S\5      rS r  " S S\5      r!S r"S r#\R4                  R7                  SSS/5      S 5       r$S r%\R4                  R7                  SSS/5      S 5       r& " S S\SS 9r'S! r(S" r) " S# S$5      r*S% r+S& r, " S' S(\5      r-S) r. " S* S+\5      r/S, r0 " S- S.\5      r1\R4                  R7                  SSS/5      S/ 5       r2\R4                  R7                  S0\3" \Rh                  5      5      S1 5       r5S2 r6S3 r7g)4    N)
namedtuple)assert_array_equal)config_context
get_config)StandardScaler)ADAPTERS_MANAGERContainerAdapterProtocol_get_adapter_from_container_get_output_config_safe_set_output_SetOutputMixin_wrap_data_with_containercheck_library_installed)CSR_CONTAINERSc                    ^ [         R                  " S5      n [        R                  " / SQ/ SQ/5      n[        R                  " / SQ[        S9m[        R                  " SS/5      nU R                  SS/SS//US	9nU R                  SS/US	9n[        R                  S   nUR                  XU4S
 jS9n[        X`R
                  5      (       d   e[        UR                  T5        [        UR                  U5        UR                  XU4S jS9n[        X`R
                  5      (       d   e[        UR                  T5        [        UR                  U5        [        R                  " SS/[        S9nU R                  SS/SS//SS/S	9nUR                  XUS9n	[        U	R                  U5        [        U	R                  UR                  5        UR                  U5      (       d   eUR                  U5      (       a   e[        R                  " SS/[        S9nUR!                  X5      n	[        U	R                  U5        U R                  / SQ/ SQ// SQS9n
U R                  S/S//S/S9nUR#                  X/5      nU R                  / SQ/ SQ// SQS9nU R$                  R'                  X5        U R                  SS/SS//SS/S9n[        R                  " SS/[        S9nUR!                  X5      n	[        U	R                  U5        U R                  SS/SS//US	9nUR                  XSS/SS9nXLd   e[)        UR                  5      S S/:X  d   e[)        UR                  5      SS/:X  d   eU R                  SS/SS//US	9nUR                  XSS/S!S9nXL d   e[)        UR                  5      SS/:X  d   e[)        UR                  5      SS/:X  d   eg")#z+Check pandas adapter has expected behavior.pandas   r      r   r   r   )f0f1f2dtyper      r   indexc                     > T $ N columnss   V/var/www/html/venv/lib/python3.13/site-packages/sklearn/utils/tests/test_set_output.py<lambda>%test_pandas_adapter.<locals>.<lambda>!       G    r"   c                     > T $ r    r!   r"   s   r$   r%   r&   '   s    Wr(   r   r   
      acr   r      r         r,   ber1   r/   r   r   r/   r1   r   r1   r2   r/   r,   r4   r5   r-   x__ay__ar4   Fr#   inplacer   TN)pytestimportorskipnpasarrayobject	DataFrameSeriesr   adapterscreate_container
isinstancer   r#   r   is_supported_containerarrayrename_columnshstacktestingassert_frame_equallist)pdX_npr   	X_df_orig
X_ser_origadapterX_containernew_columnsX_dfnew_dfX_df_1X_df_2	X_stackedexpected_dfX_outputr#   s                  @r$   test_pandas_adapterr\      s   			X	&B::y),-Djj+6:GJJ1vEq!fq!f-U;IAq6/J''1G**4O*TKk<<0000{**G4{((%0 **4_*UKk<<0000{**G4{((%0 **dD\8K<<!Q!Q(R<9D%%d{%KFv~~{3v||TZZ0))$////--d3333 ((C:V4K##D6Fv~~{3 \\9i0/\JF\\A3*se\4F/0I,,	|$.B  K JJ!!)9
 <<!Q!Q(3*<=D((FF+6:K##D6Fv~~{3 <<!Q!Q(<6D''S#JPU'VH!Q'''  !c3Z/// <<!Q!Q(<6D''S#JPT'UH#s+++  !c3Z///r(   c                  ,  ^ [         R                  " S5      n [        R                  " / SQ/ SQ/5      n/ SQmU R	                  UTSS9n[
        R                  S   nUR                  XU4S jS9n[        X@R                  5      (       d   e[        UR                  T5        [        R                  " / S	Q[        S
9nUR                  X"US9n[        UR                  U5        UR                  U5      (       d   eUR                  U5      (       a   e[        R                  " / SQ[        S
9nUR                  X%5      n[        UR                  U5        U R	                  / SQ/ SQ// SQSS9nU R	                  S/S//S/SS9nUR                  Xx/5      n	U R	                  / SQ/ SQ// SQSS9n
SSKJn  U" X5        U R	                  SS/SS//SS/SS9nUR                  XSS/SS9nXLd   e[%        UR                  5      SS/:X  d   e[%        UR                  5      SS/:X  d   eU R	                  SS/SS//SS/SS9nUR                  XSS/SS9nXL d   e[%        UR                  5      SS/:X  d   e[%        UR                  5      SS/:X  d   eg )!z+Check Polars adapter has expected behavior.polarsr   r   )r   r   f3row)schemaorientc                     > T $ r    r!   r"   s   r$   r%   %test_polars_adapter.<locals>.<lambda>e   r'   r(   r"   )r,   r4   r-   r   )r,   r-   gr.   r0   r3   r1   r/   r-   r6   r7   r8   r   )rL   r   r   r   r,   r4   dFr;   TN)r=   r>   r?   rH   rB   r   rD   rE   rF   r   r#   r@   rA   rG   rI   rJ   polars.testingrL   rM   )plrO   rP   rR   rS   rT   rV   rW   rX   rY   rZ   rL   rU   r[   r#   s                 @r$   test_polars_adapterri   ]   s   			X	&B88Y	*+D GT'%@I''1G**4O*TKk<<0000{**G4 **_F;K%%iK%PFv~~{3)))4444--d3333 ((?&9K##I;Fv~~{3 \\9i0QV\WF\\A3*cU5\AF/0I,,	|$-A%  K 2y. <<!Q!Q(#sE<JD''S#JPU'VH#s+++  !c3Z/// <<!Q!Q(#sE<JD''S#JPT'UH#s+++  !c3Z///r(   csr_containerc           	      &   [         R                  " / SQ/ SQ/5      nU " U5      nSn[        SS9   [        R                  " [
        US9   [        SX![        5       5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)	z*Check errors in _wrap_data_with_container.r   r   z.The transformer outputs a scipy sparse matrix.r   transform_outputmatch	transformN)r?   r@   r   r=   raises
ValueErrorr   r   )rj   XX_csrro   s       r$    test__container_error_validationru      sh     	

Iy)*A!E<E		2]]:U3%k5^=MN 4 
3	233 
3	2s#   B
A1 B1
A?	;B
Bc                       \ rS rSrSrg),EstimatorWithoutSetOutputAndWithoutTransform   r!   N__name__
__module____qualname____firstlineno____static_attributes__r!   r(   r$   rw   rw      s    r(   rw   c                       \ rS rSrSS jrSrg)!EstimatorNoSetOutputWithTransform   Nc                     U$ r    r!   selfrs   ys      r$   rp   +EstimatorNoSetOutputWithTransform.transform       r(   r!   r    rz   r{   r|   r}   rp   r~   r!   r(   r$   r   r          r(   r   c                   2    \ rS rSrSS jrSS jrSS jrSrg)EstimatorWithSetOutput   Nc                 .    UR                   S   U l        U $ Nr   shapen_features_in_r   s      r$   fitEstimatorWithSetOutput.fit       ggajr(   c                     U$ r    r!   r   s      r$   rp    EstimatorWithSetOutput.transform   r   r(   c                     [         R                  " [        U R                  5       Vs/ s H  nSU 3PM
     sn[        S9$ s  snf Nrs   r   r?   r@   ranger   rA   r   input_featuresis      r$   get_feature_names_out,EstimatorWithSetOutput.get_feature_names_out   8    zzE$2E2E,FG,FqQqc7,FGvVVG   Ar   r    rz   r{   r|   r}   r   rp   r   r~   r!   r(   r$   r   r      s    Wr(   r   c                     [        5       n [        U SS9  [        5       n [        R                  " [
        SS9   [        U SS9  SSS5        [        5       R                  [        R                  " / SQ/5      5      n [        U SS9  [        SU 5      nUS   S:X  d   e[        U S	S9  [        SU 5      nUS   S	:X  d   e[        U SS9  [        SU 5      nUS   S	:X  d   eg! , (       d  f       N= f)
z)Check _safe_set_output works as expected.r   rp   zUnable to configure outputrn   Nr   r   r   rp   densedefault)rw   r   r   r=   rq   rr   r   r   r?   r@   r   )estconfigs     r$   test__safe_set_outputr      s     7
8CSH- ,
-C	z)E	F1 
G !
"
&
&rzz9+'>
?CSH-S1F'?h&&&SI.S1F'?i''' SD)S1F'?i''' 
G	Fs   C
C-c                       \ rS rSrSS jrSrg)2EstimatorNoSetOutputWithTransformNoFeatureNamesOut   Nc                     U$ r    r!   r   s      r$   rp   <EstimatorNoSetOutputWithTransformNoFeatureNamesOut.transform   r   r(   r!   r    r   r!   r(   r$   r   r      r   r(   r   c                  >    [        5       n [        U S5      (       a   eg)zEEstimator without get_feature_names_out does not define `set_output`.
set_outputN)r   hasattr)r   s    r$   test_set_output_mixinr      s     
<
>CsL)))))r(   c                      [         R                  " / SQ/ SQ/5      n [        5       n[        USS9  Sn[        R
                  " [        US9   UR                  U 5        SSS5        g! , (       d  f       g= f)z$Check transform with invalid config.r   r   badr   output config must be inrn   N)r?   r@   r   r   r=   rq   rr   rp   rs   r   msgs      r$   test__safe_set_output_errorr      sR    


Iy)*A
 
"CSE*
$C	z	-a 
.	-	-s   A''
A5dataframe_libr   r^   c                    [         R                  " U 5      n[        R                  " / SQ/ SQ/5      n[	        5       R                  U5      nUR                  SS9nXCL d   eUR                  U5      n[        U[        R                  5      (       d   eUR                  U S9  UR                  U5      n[        XaR                  5      (       d   eg)z%Check that the output is a dataframe.r   r   Nr   )r=   r>   r?   r@   r   r   r   rp   rF   ndarrayrB   )r   librs   r   est2
X_trans_np
X_trans_pds          r$   test_set_output_methodr      s     

m
,C


Iy)*A
 
"
&
&q
)C >>D>)D;;"Jj"**----NN]N+q!Jj--0000r(   c                     [         R                  " / SQ/ SQ/5      n [        5       R                  U 5      nUR	                  SS9  Sn[
        R                  " [        US9   UR                  U 5        SSS5        g! , (       d  f       g= f)z-Check transform fails with invalid transform.r   r   r   r   r   rn   N)	r?   r@   r   r   r   r=   rq   rr   rp   r   s      r$   test_set_output_method_errorr      sc     	

Iy)*A
 
"
&
&q
)CNNUN#
$C	z	-a 
.	-	-s    A;;
B	rm   c                    [        5       S   n[        S5      nUS   U:X  d   e[        U S9   [        S5      nUS   U :X  d   e[        5       n[        SU5      nUS   U :X  d   e[	        5       n[        SU5      nUS   U :X  d   eUR                  SS9  [        SU5      nUS   S:X  d   e SSS5        WR                  U S9  [        SU5      nUS   U :X  d   eg! , (       d  f       N5= f)z+Check _get_output_config works as expected.rm   rp   r   rl   r   r   N)r   r   r   r   r   r   )rm   global_configr   r   s       r$   test__get_output_configr     s   
 L!34M,F'?m+++	)9	:#K0g"2222/1#K5g"2222$&#K5g"2222 	+#K5g)+++# 
;& NN-N.S1F'?....+ 
;	:s   A?C
C*c                       \ rS rSrSS jrSrg) EstimatorWithSetOutputNoAutoWrapi'  Nc                     U$ r    r!   r   s      r$   rp   *EstimatorWithSetOutputNoAutoWrap.transform(  r   r(   r!   r    r   r!   r(   r$   r   r   '  r   r(   r   auto_wrap_output_keysc                      [        5       n [        U S5      (       a   e[        R                  " / SQ/ SQ/5      nXR	                  U5      L d   eg)z4Check that auto_wrap_output_keys=None does not wrap.r   r   r   N)r   r   r?   r@   rp   )r   rs   s     r$   test_get_output_auto_wrap_falser   ,  sE    
*
,CsL))))


Iy)*Aa    r(   c                      Sn [         R                  " [        U S9    " S S[        SS9nS S S 5        g ! , (       d  f       g = f)Nz6auto_wrap_output_keys must be None or a tuple of keys.rn   c                       \ rS rSrSrg)Ltest_auto_wrap_output_keys_errors_with_incorrect_input.<locals>.BadEstimatori9  r!   Nry   r!   r(   r$   BadEstimatorr   9  s    r(   r   bad_parameterr   )r=   rq   rr   r   )r   r   s     r$   6test_auto_wrap_output_keys_errors_with_incorrect_inputr   5  s/    
BC	z	-	?/ 	 
.	-	-s	   4
Ac                   (   ^  \ rS rSrU 4S jrSrU =r$ )AnotherMixini=  c                 2   > [         TU ]  " S0 UD6  Xl        g )Nr!   )super__init_subclass__custom_parameter)clsr   kwargs	__class__s      r$   r   AnotherMixin.__init_subclass__>  s    !+F+/r(   r!   )rz   r{   r|   r}   r   r~   __classcell__)r   s   @r$   r   r   =  s    0 0r(   r   c                       " S S[         [        SS9n U " 5       nUR                  S:X  d   e[        US5      (       d   eg)z9Check that multiple init_subclasses passes parameters up.c                   (    \ rS rSrSS jrSS jrSrg)>test_set_output_mixin_custom_mixin.<locals>.BothMixinEstimatoriF  Nc                     U$ r    r!   r   s      r$   rp   Htest_set_output_mixin_custom_mixin.<locals>.BothMixinEstimator.transformG  s    Hr(   c                     U$ r    r!   )r   r   s     r$   r   Ttest_set_output_mixin_custom_mixin.<locals>.BothMixinEstimator.get_feature_names_outJ  s    !!r(   r!   r    )rz   r{   r|   r}   rp   r   r~   r!   r(   r$   BothMixinEstimatorr   F  s    		"r(   r   {   )r   r   N)r   r   r   r   )r   r   s     r$   "test_set_output_mixin_custom_mixinr   C  sC    "_lS " 
C3&&&3%%%%r(   c                       " S S[         5      n  " S SU 5      n " S SU 5      n " S SX5      nU" 5       R                  S	5      S:X  d   eg	)
zbCheck that multi-inheritance resolves to the correct class method.

Non-regression test gh-25293.
c                       \ rS rSrS rSrg)!test_set_output_mro.<locals>.BaseiX  c                     g)NBaser!   r   rs   s     r$   rp   +test_set_output_mro.<locals>.Base.transformY  s    r(   r!   Nr   r!   r(   r$   r   r   X  s    	r(   r   c                       \ rS rSrSrg)test_set_output_mro.<locals>.Ai\  r!   Nry   r!   r(   r$   Ar   \      r(   r   c                       \ rS rSrS rSrg)test_set_output_mro.<locals>.Bi_  c                     g)NBr!   r   s     r$   rp   (test_set_output_mro.<locals>.B.transform`  s    r(   r!   Nr   r!   r(   r$   r   r   _  s    	r(   r   c                       \ rS rSrSrg)test_set_output_mro.<locals>.Cic  r!   Nry   r!   r(   r$   Cr   c  r   r(   r   N)r   rp   )r   r   r   r   s       r$   test_set_output_mror   R  sM     D D A  3==#%%%r(   c                   2    \ rS rSrSS jrSS jrSS jrSrg)EstimatorWithSetOutputIndexii  Nc                 .    UR                   S   U l        U $ r   r   r   s      r$   r   EstimatorWithSetOutputIndex.fitj  r   r(   c                     SS K nUR                  UR                  5       [        UR                  S   5       Vs/ s H  nSU 3PM
     snS9$ s  snf )Nr   sr   )r   rB   to_numpyr   r   )r   rs   r   rN   r   s        r$   rp   %EstimatorWithSetOutputIndex.transformn  sH     ||AJJL%PQ
BS0TBSQ1QCBS0T|UU0Ts   A
c                     [         R                  " [        U R                  5       Vs/ s H  nSU 3PM
     sn[        S9$ s  snf r   r   r   s      r$   r   1EstimatorWithSetOutputIndex.get_feature_names_outt  r   r   r   r    r   r!   r(   r$   r   r   i  s    VWr(   r   c                     [         R                  " S5      n U R                  / SQ/ SQ/SS/S9n[        5       R	                  SS9nUR                  U5        UR                  U5      n[        UR                  SS	/5        g
)zRCheck that set_output does not override index.

Non-regression test for gh-25730.
r   r   )r1   r/   r2   r   r   r   r   s0s1N)	r=   r>   rB   r   r   r   rp   r   r   )rN   rs   r   X_transs       r$   !test_set_output_pandas_keep_indexr  x  sp    
 
		X	&B
i+Aq6:A
%
'
2
2X
2
FCGGAJmmAGw}}tTl3r(   c                   $    \ rS rSrS rSS jrSrg)EstimatorReturnTuplei  c                     Xl         g r    OutputTuple)r   r  s     r$   __init__EstimatorReturnTuple.__init__  s    &r(   Nc                 ,    U R                  USU-  5      $ )Nr   r  r   s      r$   rp   EstimatorReturnTuple.transform  s    1q5))r(   r  r    )rz   r{   r|   r}   r  rp   r~   r!   r(   r$   r  r    s    '*r(   r  c                     [        SS5      n [        R                  " / SQ/5      n[        U S9nUR	                  U5      n[        X05      (       d   e[        UR                  U5        [        UR                  SU-  5        g)z+Check that namedtuples are kept by default.OutputzX, Yr   r  r   N)	r   r?   r@   r  rp   rF   r   rs   Y)r  rs   r   r  s       r$   test_set_output_named_tuple_outr    sg    &)F


I;A
6
2CmmAGg&&&&wyy!$wyy!a%(r(   c                   2    \ rS rSrSS jrSS jrSS jrSrg)EstimatorWithListInputi  Nc                 Z    [        U[        5      (       d   e[        US   5      U l        U $ )Nr   )rF   rM   lenr   r   s      r$   r   EstimatorWithListInput.fit  s*    !T""""!!A$ir(   c                     U$ r    r!   r   s      r$   rp    EstimatorWithListInput.transform  r   r(   c                     [         R                  " [        U R                  5       Vs/ s H  nSU 3PM
     sn[        S9$ s  snf r   r   r   s      r$   r   ,EstimatorWithListInput.get_feature_names_out  r   r   r   r    r   r!   r(   r$   r  r    s    
Wr(   r  c                    [         R                  " U 5      n/ SQ/ SQ/n[        5       nUR                  U S9  UR	                  U5      R                  U5      n[        XAR                  5      (       d   e[        UR                  / SQ5        g)zBCheck set_output for list input.

Non-regression test for #27037.
)r   r   r   r   )r1   r/   r2      r   )X0X1X2X3N)
r=   r>   r  r   r   rp   rF   rB   r   r#   )r   r   rs   r   X_outs        r$   test_set_output_list_inputr+    sp     

m
,C	|$A
 
"CNN]N+GGAJ  #Ee]]++++u}}&>?r(   namec                 T    [        [        R                  U    [        5      (       d   eg)z*Check adapters have the correct interface.N)rF   r   rD   r	   )r,  s    r$    test_adapter_class_has_interfacer.    s$     &//57OPPPPr(   c                    ^ [         R                  mU4S jnU R                  [         SU5        Sn[        R                  " [
        US9   [        S5        SSS5        g! , (       d  f       g= f)zCheck import error changed.c                 4   > U S:X  a
  [        5       eT" U S S9  g )Nr   )package)ImportError)r,  orig_import_modules    r$   patched_import_module;test_check_library_installed.<locals>.patched_import_module  s    8-4.r(   import_modulez-Setting output container to 'pandas' requiresrn   r   N)	importlibr6  setattrr=   rq   r2  r   )monkeypatchr4  r   r3  s      @r$   test_check_library_installedr:    sP    "00/
 	?4IJ
9C	{#	.) 
/	.	.s   
A
A-c                  6   [         R                  " S5      n U R                  / SQ/ SQS.5      n[        U5      nUR                  S:X  d   eSn[         R
                  " [        US9   [        UR                  5       5        SSS5        g! , (       d  f       g= f)z4Check the behavior fo `_get_adapter_from_container`.r   r   )r*      d   )r,   r4   zAThe container does not have a registered adapter in scikit-learn.rn   N)r=   r>   rB   r
   container_librq   rr   r  )rN   rs   rR   err_msgs       r$   test_get_adapter_from_containerr@    sp    			X	&B
9=9:A)!,G  H,,,QG	z	1#AJJL1 
2	1	1s   'B


B)8r7  collectionsr   numpyr?   r=   numpy.testingr   sklearn._configr   r   sklearn.preprocessingr   sklearn.utils._set_outputr   r	   r
   r   r   r   r   r   sklearn.utils.fixesr   r\   ri   markparametrizeru   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r+  sortedrD   r.  r:  r@  r!   r(   r$   <module>rK     s    "   , 6 0	 	 	 /C0L30l .9O :O	 	 
	W_ 	W(6 
*	 8X*>?1 @1(	 +h-AB/ C/@d 
!0 0&&.W/ W4*? *	)
W_ 
W 8X*>?@ @@  (8(A(A!BCQ DQ
* 2r(   