
    Wh?                        d dl Z d dlmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
 d dl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 Zd	 Zej4                  j7                  d
e      d        Z G d d      Z G d d      Z G d de      Zd Z  G d de      Z!d Z"d Z#ej4                  j7                  dddg      d        Z$d Z%ej4                  j7                  dddg      d        Z& G d ded       Z'd! Z(d" Z) G d# d$      Z*d% Z+d& Z, G d' d(e      Z-d) Z. G d* d+e      Z/d, Z0 G d- d.e      Z1ej4                  j7                  dddg      d/        Z2ej4                  j7                  d0 e3ejh                              d1        Z5d2 Z6d3 Z7y)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                     t        j                  d      } t        j                  g dg dg      }t        j                  g dt              t        j                  ddg      }| j                  ddgddgg|	      }| j                  ddg|	      }t        j                  d   }|j                  ||fd
      }t        || j
                        sJ t        |j                         t        |j                  |       |j                  ||fd      }t        || j
                        sJ t        |j                         t        |j                  |       t        j                  ddgt              }| j                  ddgddggddg	      }|j                  |||      }	t        |	j                  |       t        |	j                  |j                         |j                  |      sJ |j                  |      rJ t        j                  ddgt              }|j!                  ||      }	t        |	j                  |       | j                  g dg dgg d      }
| j                  dgdggdg      }|j#                  |
|g      }| j                  g dg dgg d      }| j$                  j'                  ||       | j                  ddgddggddg      }t        j                  ddgt              }|j!                  ||      }	t        |	j                  |       | j                  ddgddgg|	      }|j                  ||ddgd      }||usJ t)        |j                        d dgk(  sJ t)        |j                        ddgk(  sJ | j                  ddgddgg|	      }|j                  ||ddgd!      }||u sJ t)        |j                        ddgk(  sJ t)        |j                        ddgk(  sJ y")#z+Check pandas adapter has expected behavior.pandas   r      r   r   r   )f0f1f2dtyper      r   indexc                       S N columnss   ]/var/www/html/jupyter_env/lib/python3.12/site-packages/sklearn/utils/tests/test_set_output.py<lambda>z%test_pandas_adapter.<locals>.<lambda>!       G     r"   c                       S r    r!   r"   s   r$   r%   z%test_pandas_adapter.<locals>.<lambda>'   s    W r'   r   r   
      acr   r      r         r+   ber0   r.   r   r   r.   r0   r   r0   r1   r.   r+   r3   r4   r,   x__ay__ar3   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**4O*TKk2<<000{**G4{((%0 **4_*UKk2<<000{**G4{((%0 **dD\8K<<!Q!Q(R<9D%%dI{%KFv~~{3v||TZZ0))$///--d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''dS#JPU'VH4!Q'''  !c3Z/// <<!Q!Q(<6D''dS#JPT'UHt#s+++  !c3Z///r'   c                  T   t        j                  d      } t        j                  g dg dg      }g d| j	                  |d      }t
        j                  d   }|j                  ||fd      }t        || j                        sJ t        |j                         t        j                  g d	t        
      }|j                  |||      }t        |j                  |       |j                  |      sJ |j                  |      rJ t        j                  g dt        
      }|j                  ||      }t        |j                  |       | j	                  g dg dgg dd      }| j	                  dgdggdgd      }|j                  ||g      }	| j	                  g dg dgg dd      }
ddlm}  ||	|
       | j	                  ddgddggddgd      }|j                  ||ddgd      }||usJ t%        |j                        ddgk(  sJ t%        |j                        ddgk(  sJ | j	                  ddgddggddgd      }|j                  ||ddgd      }||u sJ t%        |j                        ddgk(  sJ t%        |j                        ddgk(  sJ y )!z+Check Polars adapter has expected behavior.polarsr   r   )r   r   f3row)schemaorientc                       S r    r!   r"   s   r$   r%   z%test_polars_adapter.<locals>.<lambda>e   r&   r'   r"   )r+   r3   r,   r   )r+   r,   gr-   r/   r2   r0   r.   r,   r5   r6   r7   r   )rK   r   r   r   r+   r3   dFr:   TN)r<   r=   r>   rG   rA   r   rC   rD   rE   r   r#   r?   r@   rF   rH   rI   polars.testingrK   rL   )plrN   rO   rQ   rR   rS   rU   rV   rW   rX   rY   rK   rT   rZ   r#   s                 @r$   test_polars_adapterrg   ]   s   			X	&B88Y	*+D GT'%@I''1G**4O*TKk2<<000{**G4 **_F;K%%iK%PFv~~{3)))444--d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''dS#JPU'VH4#s+++  !c3Z/// <<!Q!Q(#sE<JD''dS#JPT'UHt#s+++  !c3Z///r'   csr_containerc           	         t        j                  g dg dg      } | |      }d}t        d      5  t        j                  t
        |      5  t        d||t                      ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	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   )rh   XX_csrrm   s       r$    test__container_error_validationrs      s     	

Iy)*A!E<E		2 O]]:U3 	O%k5!^=MN	OO O	O 	OO Os#   BA6%B6A?	;BBc                       e Zd Zy),EstimatorWithoutSetOutputAndWithoutTransformN__name__
__module____qualname__r!   r'   r$   ru   ru      s    r'   ru   c                       e Zd ZddZy)!EstimatorNoSetOutputWithTransformNc                     |S r    r!   selfrq   ys      r$   rn   z+EstimatorNoSetOutputWithTransform.transform       r'   r    rw   rx   ry   rn   r!   r'   r$   r{   r{          r'   r{   c                   $    e Zd ZddZddZddZy)EstimatorWithSetOutputNc                 .    |j                   d   | _        | S Nr   shapen_features_in_r}   s      r$   fitzEstimatorWithSetOutput.fit       ggajr'   c                     |S r    r!   r}   s      r$   rn   z EstimatorWithSetOutput.transform   r   r'   c                     t        j                  t        | j                        D cg c]  }d| 	 c}t              S c c}w Nrq   r   r>   r?   ranger   r@   r~   input_featuresis      r$   get_feature_names_outz,EstimatorWithSetOutput.get_feature_names_out   2    zzE$2E2E,FGqQqc7GvVVG   A r    rw   rx   ry   r   rn   r   r!   r'   r$   r   r      s    Wr'   r   c                     t               } t        | d       t               } t        j                  t
        d      5  t        | d       ddd       t               j                  t        j                  g dg            } t        | d       t        d|       }|d   dk(  sJ t        | d	       t        d|       }|d   d	k(  sJ t        | d       t        d|       }|d   d	k(  sJ y# 1 sw Y   xY w)
z)Check _safe_set_output works as expected.r   rn   zUnable to configure outputrl   Nr   r   r   rn   densedefault)ru   r   r{   r<   ro   rp   r   r   r>   r?   r   )estconfigs     r$   test__safe_set_outputr      s     7
8CSH- ,
-C	z)E	F 212 !
"
&
&rzz9+'>
?CSH-S1F'?h&&&SI.S1F'?i''' SD)S1F'?i'''2 2s   C,,C5c                       e Zd ZddZy)2EstimatorNoSetOutputWithTransformNoFeatureNamesOutNc                     |S r    r!   r}   s      r$   rn   z<EstimatorNoSetOutputWithTransformNoFeatureNamesOut.transform   r   r'   r    r   r!   r'   r$   r   r      r   r'   r   c                  4    t               } t        | d      rJ y)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                      t        j                  g dg dg      } t               }t        |d       d}t	        j
                  t        |      5  |j                  |        ddd       y# 1 sw Y   yxY w)z$Check transform with invalid config.r   r   badr   output config must be inrl   N)r>   r?   r   r   r<   ro   rp   rn   rq   r   msgs      r$   test__safe_set_output_errorr      s[    


Iy)*A
 
"CSE*
$C	z	- a  s   A++A4dataframe_libr   r]   c                    t        j                  |       }t        j                  g dg dg      }t	               j                  |      }|j                  d      }||u sJ |j                  |      }t        |t        j                        sJ |j                  |        |j                  |      }t        ||j                        sJ y)z%Check that the output is a dataframe.r   r   Nr   )r<   r=   r>   r?   r   r   r   rn   rE   ndarrayrA   )r   librq   r   est2
X_trans_np
X_trans_pds          r$   test_set_output_methodr      s     

m
,C


Iy)*A
 
"
&
&q
)C >>D>)D3;;"Jj"**---NN]N+q!Jj#--000r'   c                     t        j                  g dg dg      } t               j                  |       }|j	                  d       d}t        j                  t        |      5  |j                  |        ddd       y# 1 sw Y   yxY w)z-Check transform fails with invalid transform.r   r   r   r   r   rl   N)	r>   r?   r   r   r   r<   ro   rp   rn   r   s      r$   test_set_output_method_errorr      sl     	

Iy)*A
 
"
&
&q
)CNNUN#
$C	z	- a  s   $A??Brk   c                    t               d   }t        d      }|d   |k(  sJ t        |       5  t        d      }|d   | k(  sJ t               }t        d|      }|d   | k(  sJ t	               }t        d|      }|d   | k(  sJ |j                  d       t        d|      }|d   dk(  sJ 	 ddd       j                  |        t        d|      }|d   | k(  sJ y# 1 sw Y   2xY w)z+Check _get_output_config works as expected.rk   rn   r   rj   r   r   N)r   r   r   r{   r   r   )rk   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                       e Zd ZddZy) EstimatorWithSetOutputNoAutoWrapNc                     |S r    r!   r}   s      r$   rn   z*EstimatorWithSetOutputNoAutoWrap.transform(  r   r'   r    r   r!   r'   r$   r   r   '  r   r'   r   auto_wrap_output_keysc                      t               } t        | d      rJ t        j                  g dg dg      }|| j	                  |      u sJ y)z4Check that auto_wrap_output_keys=None does not wrap.r   r   r   N)r   r   r>   r?   rn   )r   rq   s     r$   test_get_output_auto_wrap_falser   ,  sD    
*
,CsL)))


Iy)*Aa    r'   c                      d} t        j                  t        |       5   G d dt        d      }d d d        y # 1 sw Y   y xY w)Nz6auto_wrap_output_keys must be None or a tuple of keys.rl   c                       e Zd Zy)Ltest_auto_wrap_output_keys_errors_with_incorrect_input.<locals>.BadEstimatorNrv   r!   r'   r$   BadEstimatorr   9  s    r'   r   bad_parameterr   )r<   ro   rp   r   )r   r   s     r$   6test_auto_wrap_output_keys_errors_with_incorrect_inputr   5  s8    
BC	z	- 	?/ 	  s	   9Ac                        e Zd Z fdZ xZS )AnotherMixinc                 2    t        |   di | || _        y )Nr!   )super__init_subclass__custom_parameter)clsr   kwargs	__class__s      r$   r   zAnotherMixin.__init_subclass__>  s    !+F+/r'   )rw   rx   ry   r   __classcell__)r   s   @r$   r   r   =  s    0 0r'   r   c                  |     G d dt         t        d      }  |        }|j                  dk(  sJ t        |d      sJ y)z9Check that multiple init_subclasses passes parameters up.c                       e Zd ZddZddZy)>test_set_output_mixin_custom_mixin.<locals>.BothMixinEstimatorNc                     |S r    r!   r}   s      r$   rn   zHtest_set_output_mixin_custom_mixin.<locals>.BothMixinEstimator.transformG  s    Hr'   c                     |S r    r!   )r~   r   s     r$   r   zTtest_set_output_mixin_custom_mixin.<locals>.BothMixinEstimator.get_feature_names_outJ  s    !!r'   r    )rw   rx   ry   rn   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  s@    "_lS " 
C3&&&3%%%r'   c                       G d dt               }  G d d|       } G d d|       } G d d||      } |       j                  d	      dk(  sJ y	)
zjCheck that multi-inheritance resolves to the correct class method.

    Non-regression test gh-25293.
    c                       e Zd Zd Zy)!test_set_output_mro.<locals>.Basec                      y)NBaser!   r~   rq   s     r$   rn   z+test_set_output_mro.<locals>.Base.transformY  s    r'   Nr   r!   r'   r$   r   r   X  s    	r'   r   c                       e Zd Zy)test_set_output_mro.<locals>.ANrv   r!   r'   r$   Ar   \      r'   r   c                       e Zd Zd Zy)test_set_output_mro.<locals>.Bc                      y)NBr!   r   s     r$   rn   z(test_set_output_mro.<locals>.B.transform`  s    r'   Nr   r!   r'   r$   r   r   _  s    	r'   r   c                       e Zd Zy)test_set_output_mro.<locals>.CNrv   r!   r'   r$   Cr   c  r   r'   r   N)r   rn   )r   r   r   r   s       r$   test_set_output_mror   R  sO     D D Aq  3==#%%%r'   c                   $    e Zd ZddZddZddZy)EstimatorWithSetOutputIndexNc                 .    |j                   d   | _        | S r   r   r}   s      r$   r   zEstimatorWithSetOutputIndex.fitj  r   r'   c                     dd l }|j                  |j                         t        |j                  d         D cg c]  }d| 	 c}      S c c}w )Nr   sr   )r   rA   to_numpyr   r   )r~   rq   r   rM   r   s        r$   rn   z%EstimatorWithSetOutputIndex.transformn  sB     ||AJJL%PQ
BS0TQ1QC0T|UU0Ts   A
c                     t        j                  t        | j                        D cg c]  }d| 	 c}t              S c c}w r   r   r   s      r$   r   z1EstimatorWithSetOutputIndex.get_feature_names_outt  r   r   r    r   r!   r'   r$   r   r   i  s    VWr'   r   c                     t        j                  d      } | j                  g dg dgddg      }t               j	                  d      }|j                  |       |j                  |      }t        |j                  dd	g       y
)zZCheck that set_output does not override index.

    Non-regression test for gh-25730.
    r   r   )r0   r.   r1   r   r   r   r   s0s1N)	r<   r=   rA   r   r   r   rn   r   r   )rM   rq   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                       e Zd Zd ZddZy)EstimatorReturnTuplec                     || _         y r    OutputTuple)r~   r   s     r$   __init__zEstimatorReturnTuple.__init__  s
    &r'   Nc                 ,    | j                  |d|z        S )Nr   r   r}   s      r$   rn   zEstimatorReturnTuple.transform  s    1q5))r'   r    )rw   rx   ry   r   rn   r!   r'   r$   r   r     s    '*r'   r   c                      t        dd      } t        j                  g dg      }t        |       }|j	                  |      }t        ||       sJ t        |j                  |       t        |j                  d|z         y)z+Check that namedtuples are kept by default.OutputzX, Yr   r   r   N)	r   r>   r?   r   rn   rE   r   rq   Y)r   rq   r   r   s       r$   test_set_output_named_tuple_outr    sf    &)F


I;A
6
2CmmAGgv&&&wyy!$wyy!a%(r'   c                   $    e Zd ZddZddZddZy)EstimatorWithListInputNc                 P    t        |t              sJ t        |d         | _        | S )Nr   )rE   rL   lenr   r}   s      r$   r   zEstimatorWithListInput.fit  s'    !T"""!!A$ir'   c                     |S r    r!   r}   s      r$   rn   z EstimatorWithListInput.transform  r   r'   c                     t        j                  t        | j                        D cg c]  }d| 	 c}t              S c c}w r   r   r   s      r$   r   z,EstimatorWithListInput.get_feature_names_out  r   r   r    r   r!   r'   r$   r  r    s    
Wr'   r  c                    t        j                  |       }g dg dg}t               }|j                  |        |j	                  |      j                  |      }t        ||j                        sJ t        |j                  g d       y)zJCheck set_output for list input.

    Non-regression test for #27037.
    )r   r   r   r   )r0   r.   r1      r   )X0X1X2X3N)
r<   r=   r  r   r   rn   rE   rA   r   r#   )r   r   rq   r   X_outs        r$   test_set_output_list_inputr    so     

m
,C	|$A
 
"CNN]N+GGAJ  #EeS]]+++u}}&>?r'   namec                 J    t        t        j                  |    t              sJ y)z*Check adapters have the correct interface.N)rE   r   rC   r	   )r  s    r$    test_adapter_class_has_interfacer    s!     &//57OPPPr'   c                     t         j                  fd}| j                  t         d|       d}t        j                  t
        |      5  t        d       ddd       y# 1 sw Y   yxY w)zCheck import error changed.c                 8    | dk(  r
t                | d        y )Nr   )package)ImportError)r  orig_import_modules    r$   patched_import_modulez;test_check_library_installed.<locals>.patched_import_module  s    8-4.r'   import_modulez-Setting output container to 'pandas' requiresrl   r   N)	importlibr  setattrr<   ro   r  r   )monkeypatchr  r   r  s      @r$   test_check_library_installedr    sY    "00/
 	?4IJ
9C	{#	. *)* * *s   A  A)c                  ,   t        j                  d      } | j                  g dg dd      }t        |      }|j                  dk(  sJ d}t        j
                  t        |      5  t        |j                                ddd       y# 1 sw Y   yxY w)z4Check the behavior fo `_get_adapter_from_container`.r   r   )r)      d   )r+   r3   zAThe container does not have a registered adapter in scikit-learn.rl   N)r<   r=   rA   r
   container_libro   rp   r   )rM   rq   rQ   err_msgs       r$   test_get_adapter_from_containerr#    sy    			X	&B
9=9:A)!,G  H,,,QG	z	1 2#AJJL12 2 2s   'B

B)8r  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[   rg   markparametrizers   ru   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  sortedrC   r  r  r#  r!   r'   r$   <module>r.     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'   