o
    \i?                     @   s  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d	 Zd
d Zejdedd ZG dd dZG dd dZG dd deZdd Z G dd deZ!dd Z"dd Z#ejdddgd d! Z$d"d# Z%ejd$ddgd%d& Z&G d'd( d(edd)Z'd*d+ Z(d,d- Z)G d.d/ d/Z*d0d1 Z+d2d3 Z,G d4d5 d5eZ-d6d7 Z.G d8d9 d9eZ/d:d; Z0G d<d= d=eZ1ejdddgd>d? Z2ejd@e3ej4dAdB Z5dCdD Z6dEdF Z7dS )G    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                     s.  t d} tg dg dg}tjg dtd tddg}| jddgddgg|d	}| jddg|d	}tjd }|j	|| fd
dd}t
|| jsOJ t|j  t|j| |j	|| fddd}t
|| jsoJ t|j  t|j| tjddgtd}| jddgddggddgd	}|j	|||d}	t|	j| t|	j|j ||sJ ||rJ tjddgtd}|||}	t|	j| | jg dg dgg dd}
| jdgdggdgd}||
|g}| jg dg dgg dd}| j|| | jddgddggddgd}tjddgtd}|||}	t|	j| | jddgddgg|d	}|j	||ddgdd }||usFJ t|jd!dgksRJ t|jddgks^J | jddgddgg|d	}|j	||ddgd"d }||u s}J t|jddgksJ t|jddgksJ d#S )$z+Check pandas adapter has expected behavior.pandas   r      r   r   r   )f0f1f2dtyper      r   indexc                          S N r   columnsr   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/utils/tests/test_set_output.py<lambda>!       z%test_pandas_adapter.<locals>.<lambda>r    c                      r   r   r   r   r    r   r"   r#   '   r$   r   r   
      acr   r      r         r'   ber,   r*   r   r   r*   r,   r   r,   r-   r*   r'   r/   r0   r(   x__ay__ar/   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   r    r"   test_pandas_adapter   s\   

rW   c                     sN  t d} tg dg dg}g d | j| dd}tjd }|j|| fddd	}t|| js5J t	|j
  tjg d
td}|j|||d	}t	|j
| ||sYJ ||r`J tjg dtd}|||}t	|j
| | jg dg dgg ddd}| jdgdggdgdd}|||g}	| jg dg dgg ddd}
ddlm} ||	|
 | jddgddggddgdd}|j||ddgdd}||usJ t|j
ddgksJ t|j
ddgksJ | jddgddggddgdd}|j||ddgd d}||u sJ t|j
ddgksJ t|j
ddgks%J d!S )"z+Check Polars adapter has expected behavior.polarsr   r   )r   r   f3row)schemaorientc                      r   r   r   r   r    r   r"   r#   e   r$   z%test_polars_adapter.<locals>.<lambda>r    )r'   r/   r(   r   )r'   r(   gr)   r+   r.   r,   r*   r(   r1   r2   r3   r   )rG   r   r   r   r'   r/   dFr6   TN)r8   r9   r:   rC   r=   r   r?   r@   rA   r   r!   r;   r<   rB   rD   rE   polars.testingrG   rH   )plrJ   rK   rM   rN   rO   rQ   rR   rS   rT   rU   rG   rP   rV   r   r    r"   test_polars_adapter]   sD   

 
  ra   csr_containerc              	   C   s   t g dg dg}| |}d}tdd0 tjt|d td||t  W d   n1 s1w   Y  W d   dS W d   dS 1 sIw   Y  dS )	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   r8   raises
ValueErrorr   r   )rb   XX_csrrf   r   r   r"    test__container_error_validation   s   "rl   c                   @      e Zd ZdS ),EstimatorWithoutSetOutputAndWithoutTransformN__name__
__module____qualname__r   r   r   r"   rn          rn   c                   @      e Zd ZdddZdS )!EstimatorNoSetOutputWithTransformNc                 C      |S r   r   selfrj   yr   r   r"   rg         z+EstimatorNoSetOutputWithTransform.transformr   rp   rq   rr   rg   r   r   r   r"   ru          ru   c                   @   *   e Zd ZdddZdddZdddZdS )	EstimatorWithSetOutputNc                 C      |j d | _| S Nr   shapen_features_in_rw   r   r   r"   fit      zEstimatorWithSetOutput.fitc                 C   rv   r   r   rw   r   r   r"   rg      rz   z EstimatorWithSetOutput.transformc                 C      t jdd t| jD tdS )Nc                 S      g | ]}d | qS rj   r   .0ir   r   r"   
<listcomp>       z@EstimatorWithSetOutput.get_feature_names_out.<locals>.<listcomp>r   r:   r;   ranger   r<   rx   input_featuresr   r   r"   get_feature_names_out      z,EstimatorWithSetOutput.get_feature_names_outr   rp   rq   rr   r   rg   r   r   r   r   r"   r~      s    

r~   c                  C   s   t  } t| dd t } tjtdd t| dd W d   n1 s$w   Y  t t	g dg} t| dd t
d| }|d dksHJ t| d	d t
d| }|d d	ks[J t| dd t
d| }|d d	ksnJ dS )
z)Check _safe_set_output works as expected.r   rg   zUnable to configure outputre   Nr   r   r   rg   densedefault)rn   r   ru   r8   rh   ri   r~   r   r:   r;   r
   )estconfigr   r   r"   test__safe_set_output   s    


r   c                   @   rt   )2EstimatorNoSetOutputWithTransformNoFeatureNamesOutNc                 C   rv   r   r   rw   r   r   r"   rg      rz   z<EstimatorNoSetOutputWithTransformNoFeatureNamesOut.transformr   r{   r   r   r   r"   r      r|   r   c                  C   s   t  } t| dr
J dS )zEEstimator without get_feature_names_out does not define `set_output`.
set_outputN)r   hasattr)r   r   r   r"   test_set_output_mixin   s   r   c                  C   sj   t g dg dg} t }t|dd d}tjt|d ||  W d   dS 1 s.w   Y  dS )z$Check transform with invalid config.r   r   badr   output config must be inre   N)r:   r;   r~   r   r8   rh   ri   rg   rj   r   msgr   r   r"   test__safe_set_output_error   s   "r   dataframe_libr   rX   c                 C   s   t | }tg dg dg}t |}|jdd}||u s"J ||}t|tj	s/J |j| d ||}t||j
sBJ dS )z%Check that the output is a dataframe.r   r   Nr   )r8   r9   r:   r;   r~   r   r   rg   rA   ndarrayr=   )r   librj   r   est2
X_trans_np
X_trans_pdr   r   r"   test_set_output_method   s   


r   c                  C   sp   t g dg dg} t | }|jdd d}tjt|d ||  W d   dS 1 s1w   Y  dS )z-Check transform fails with invalid transform.r   r   r   r   r   re   N)	r:   r;   r~   r   r   r8   rh   ri   rg   r   r   r   r"   test_set_output_method_error   s   "r   rd   c                 C   s   t  d }td}|d |ksJ t| dG td}|d | ks#J t }td|}|d | ks3J t }td|}|d | ksCJ |jdd td|}|d dksVJ W d   n1 s`w   Y  |j| d td|}|d | ksxJ dS )z+Check _get_output_config works as expected.rd   rg   r   rc   r   r   N)r   r
   r   ru   r~   r   )rd   global_configr   r   r   r   r"   test__get_output_config  s&   




r   c                   @   rt   ) EstimatorWithSetOutputNoAutoWrapNc                 C   rv   r   r   rw   r   r   r"   rg   (  rz   z*EstimatorWithSetOutputNoAutoWrap.transformr   r{   r   r   r   r"   r   '  r|   r   auto_wrap_output_keysc                  C   s@   t  } t| dr
J tg dg dg}|| |u sJ dS )z4Check that auto_wrap_output_keys=None does not wrap.r   r   r   N)r   r   r:   r;   rg   )r   rj   r   r   r"   test_get_output_auto_wrap_false,  s   r   c                  C   sL   d} t jt| d G dd dtdd}W d    d S 1 sw   Y  d S )Nz6auto_wrap_output_keys must be None or a tuple of keys.re   c                   @   rm   )zLtest_auto_wrap_output_keys_errors_with_incorrect_input.<locals>.BadEstimatorNro   r   r   r   r"   BadEstimator9  rs   r   bad_parameterr   )r8   rh   ri   r   )r   r   r   r   r"   6test_auto_wrap_output_keys_errors_with_incorrect_input5  s   "r   c                       s   e Zd Z fddZ  ZS )AnotherMixinc                    s   t  jdi | || _d S )Nr   )super__init_subclass__custom_parameter)clsr   kwargs	__class__r   r"   r   >  s   
zAnotherMixin.__init_subclass__)rp   rq   rr   r   __classcell__r   r   r   r"   r   =  s    r   c                  C   s<   G dd dt tdd} |  }|jdksJ t|dsJ dS )z9Check that multiple init_subclasses passes parameters up.c                   @   s    e Zd ZdddZdddZdS )z>test_set_output_mixin_custom_mixin.<locals>.BothMixinEstimatorNc                 S   rv   r   r   rw   r   r   r"   rg   G  rz   zHtest_set_output_mixin_custom_mixin.<locals>.BothMixinEstimator.transformc                 S   rv   r   r   r   r   r   r"   r   J  rz   zTtest_set_output_mixin_custom_mixin.<locals>.BothMixinEstimator.get_feature_names_outr   )rp   rq   rr   rg   r   r   r   r   r"   BothMixinEstimatorF  s    
r   {   )r   r   N)r   r   r   r   )r   r   r   r   r"   "test_set_output_mixin_custom_mixinC  s   r   c                  C   sZ   G dd dt } G dd d| }G dd d| }G dd d||}| d	dks+J d	S )
zjCheck that multi-inheritance resolves to the correct class method.

    Non-regression test gh-25293.
    c                   @      e Zd Zdd ZdS )z!test_set_output_mro.<locals>.Basec                 S      dS )NBaser   rx   rj   r   r   r"   rg   Y  rz   z+test_set_output_mro.<locals>.Base.transformNr{   r   r   r   r"   r   X      r   c                   @   rm   )ztest_set_output_mro.<locals>.ANro   r   r   r   r"   A\  rs   r   c                   @   r   )ztest_set_output_mro.<locals>.Bc                 S   r   )NBr   r   r   r   r"   rg   `  rz   z(test_set_output_mro.<locals>.B.transformNr{   r   r   r   r"   r   _  r   r   c                   @   rm   )ztest_set_output_mro.<locals>.CNro   r   r   r   r"   Cc  rs   r   N)r   rg   )r   r   r   r   r   r   r"   test_set_output_mroR  s
   r   c                   @   r}   )	EstimatorWithSetOutputIndexNc                 C   r   r   r   rw   r   r   r"   r   j  r   zEstimatorWithSetOutputIndex.fitc                 C   s.   dd l }|j| dd t|jd D dS )Nr   c                 S   r   )sr   r   r   r   r"   r   r  r   z9EstimatorWithSetOutputIndex.transform.<locals>.<listcomp>r   )r   r=   to_numpyr   r   )rx   rj   ry   rI   r   r   r"   rg   n  s   &z%EstimatorWithSetOutputIndex.transformc                 C   r   )Nc                 S   r   r   r   r   r   r   r"   r   u  r   zEEstimatorWithSetOutputIndex.get_feature_names_out.<locals>.<listcomp>r   r   r   r   r   r"   r   t  r   z1EstimatorWithSetOutputIndex.get_feature_names_outr   r   r   r   r   r"   r   i  s    

r   c                  C   s^   t d} | jg dg dgddgd}t jdd}|| ||}t|jdd	g d
S )zZCheck that set_output does not override index.

    Non-regression test for gh-25730.
    r   r   )r,   r*   r-   r   r   r   r   s0s1N)	r8   r9   r=   r   r   r   rg   r   r   )rI   rj   r   X_transr   r   r"   !test_set_output_pandas_keep_indexx  s   


r   c                   @   s   e Zd Zdd ZdddZdS )EstimatorReturnTuplec                 C   s
   || _ d S r   OutputTuple)rx   r   r   r   r"   __init__  s   
zEstimatorReturnTuple.__init__Nc                 C   s   |  |d| S )Nr   r   rw   r   r   r"   rg     s   zEstimatorReturnTuple.transformr   )rp   rq   rr   r   rg   r   r   r   r"   r     s    r   c                  C   s\   t dd} tg dg}t| d}||}t|| sJ t|j| t|jd|  dS )z+Check that namedtuples are kept by default.OutputzX, Yr   r   r   N)	r   r:   r;   r   rg   rA   r   rj   Y)r   rj   r   r   r   r   r"   test_set_output_named_tuple_out  s   


r   c                   @   r}   )	EstimatorWithListInputNc                 C   s    t |tsJ t|d | _| S )Nr   )rA   rH   lenr   rw   r   r   r"   r     s   zEstimatorWithListInput.fitc                 C   rv   r   r   rw   r   r   r"   rg     rz   z EstimatorWithListInput.transformc                 C   r   )Nc                 S   r   r   r   r   r   r   r"   r     r   z@EstimatorWithListInput.get_feature_names_out.<locals>.<listcomp>r   r   r   r   r   r"   r     r   z,EstimatorWithListInput.get_feature_names_outr   r   r   r   r   r"   r     s    

r   c                 C   s`   t | }g dg dg}t }|j| d |||}t||js&J t|j	g d dS )zJCheck set_output for list input.

    Non-regression test for #27037.
    )r   r   r   r   )r,   r*   r-      r   )X0X1X2X3N)
r8   r9   r   r   r   rg   rA   r=   r   r!   )r   r   rj   r   X_outr   r   r"   test_set_output_list_input  s   
r   namec                 C   s   t tj|  ts
J dS )z*Check adapters have the correct interface.N)rA   r   r?   r   r   r   r   r"    test_adapter_class_has_interface  s   r   c                    s`   t j  fdd}| t d| d}tjt|d td W d   dS 1 s)w   Y  dS )zCheck import error changed.c                    s   | dkrt   | d d d S )Nr   )package)ImportErrorr   orig_import_moduler   r"   patched_import_module  s   z;test_check_library_installed.<locals>.patched_import_moduleimport_modulez-Setting output container to 'pandas' requiresre   r   N)	importlibr   setattrr8   rh   r   r   )monkeypatchr   r   r   r   r"   test_check_library_installed  s   
"r   c                  C   s|   t d} | g dg dd}t|}|jdksJ d}t jt|d t|  W d   dS 1 s7w   Y  dS )z4Check the behavior fo `_get_adapter_from_container`.r   r   )r%      d   )r'   r/   zAThe container does not have a registered adapter in scikit-learn.re   N)r8   r9   r=   r	   container_librh   ri   r   )rI   rj   rM   err_msgr   r   r"   test_get_adapter_from_container  s   
"r   )8r   collectionsr   numpyr:   r8   numpy.testingr   sklearn._configr   r   sklearn.preprocessingr   sklearn.utils._set_outputr   r   r	   r
   r   r   r   r   sklearn.utils.fixesr   rW   ra   markparametrizerl   rn   ru   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   sortedr?   r   r   r   r   r   r   r"   <module>   sT    (
F6



 	

