a
    �ù»jÐW  ã                   @   sb  d dl Z d dlmZ d dlmZ d dlZd dlZd dlZd dlm	Z
 d dlmZmZmZ d dlmZ d dlmZmZmZ d dlmZ d d	lmZmZmZmZmZ d d
lmZmZ e  d¡ !d¡Z"dd„ Z#ej$ %dddde &d¡dfg d¢dfg d¢dfdde'ddƒdfe'd dƒdfej(g d¢ej)d�dfej(g d¢ej*d�dfej(g d¢ej+d�dfddgdfde (ddg¡dfdg d ¢dfd!e'd"d#ƒdfe (g d ¢¡dfej(g d ¢e,d�dfg¡d$d%„ ƒZ-d&d'„ Z.d(d)„ Z/eej$ %d*eƒ ¡d+d,„ ƒƒZ0ej$ %d-g d.¢¡ej$ %d/g d0¢¡d1d2„ ƒƒZ1ej$ %d-g d3¢¡ej$ %d/g d0¢¡d4d5„ ƒƒZ2ej$ %d-g d6¢¡ej$ %d/g d0¢¡ej$ %d7d8dgd9d:gg¡d;d<„ ƒƒƒZ3ej$ %d=ddg¡ej$ %d>ddg¡ej$ %d-g d6¢¡ej$ %d/d?d@g¡ej$ %dAd g dB¢g dC¢gfd8ddDgdEdFgdGdggfg¡dHdI„ ƒƒƒƒƒZ4ej$ %d-g d3¢¡ej$ %d/g dJ¢¡dKdL„ ƒƒZ5ej$ %d-g d6¢¡ej$ %d/g dJ¢¡ej$ %dMd g dB¢g dC¢gfd8ddDgdEdFgdGdggfg¡dNdO„ ƒƒƒZ6ej$ %dPg dQ¢¡dRdS„ ƒZ7ej$ %d-g d3¢¡dTdU„ ƒZ8ej$ %dPg dV¢¡ej$ %d7dd:g¡dWdX„ ƒƒZ9ej$ %d-g dY¢¡dZd[„ ƒZ:d\d]„ Z;ej$ %d^ddDg¡d_d`„ ƒZ<ej$ %dag db¢¡dcdd„ ƒZ=dedf„ Z>dgdh„ Z?ej$ %d7d d d8ge'd dƒe (d d8g¡g¡didj„ ƒZ@ej$ %d-g dk¢¡dldm„ ƒZAej$ %dndodpe,ƒ dqfg¡drds„ ƒZBej$ %dtdugdvgdudvgdudwgdvdwgg¡dxdy„ ƒZCdzd{„ ZDd|d}„ ZEd~d„ ZFd€d�„ ZGd‚dƒ„ ZHej$ %d„e¡d…d†„ ƒZId‡dˆ„ ZJej$ %d‰e¡dŠd‹„ ƒZKdS )Œé    N)Úcopy)ÚSkipTest)Úparse)Ú_safe_indexingÚresampleÚshuffle)Ú)yield_namespace_device_dtype_combinations)Ú_determine_key_typeÚ_get_column_indicesÚ_safe_assign)ÚMockDataFrame)Ú_array_api_for_testsÚ_convert_containerÚassert_allclose_dense_sparseÚassert_array_equalÚ'skip_if_array_api_compat_not_configured)ÚCSC_CONTAINERSÚCSR_CONTAINERSé	   )é   r   c                  C   s^  t jddd�} | jg d¢g d¢g d¢dœdd	�}d
dlm} dgddgg d¢dgdgg}|D ] }t||dd�}||| |ƒ q\g d¢ddgfg d¢dgfg}|D ],\}}t||dd�}||dd…|f |ƒ q d
dgddgfdgdgfg}	|	D ],\}
}t||
dd�}||dd…|f |ƒ qîd
dgddgddgg}|D ]"}t||d
d�}||| |ƒ �q6dS )z,Check _safe_indexing for polars as expected.Úpolarsz0.18.2©Z
minversion)é   é   r   é   )r   é   é   é   )r   r   r   é
   ©ÚaÚbÚcÚrow)Zorientr   )Úassert_frame_equalr!   r    )r!   r    r"   r"   r   ©Úaxis©TFT)FFTNr   r   )ÚpytestÚimportorskipÚ	DataFrameZpolars.testingr$   r   )ÚplÚdfr$   Zstr_keysÚkeyÚoutZ	bool_keysZbool_keyZstr_keyZint_keysZint_keyZaxis_0_keys© r/   úGE:\soccer\ml_env\Lib\site-packages\sklearn/utils/tests/test_indexing.pyÚtest_polars_indexing   s*    ÿr1   z
key, dtype)r   Úint)Ú0Ústr)TÚboolTr5   ©r   r   r   r2   ©r3   Ú1Ú2r4   )r6   r2   )r7   r4   r   ©ÚdtypeF))TFr5   )Úcol_0r4   ©r<   Úcol_1Úcol_2)r=   r4   ÚbeginÚendc                 C   s   t | ƒ|ksJ ‚d S ©N)r	   )r-   r;   r/   r/   r0   Útest_determine_key_type@   s    rC   c                   C   s:   t jtdd�� tdƒ W d   ƒ n1 s,0    Y  d S )NúNo valid specification of the©Úmatchç      ð?)r(   ÚraisesÚ
ValueErrorr	   r/   r/   r/   r0   Útest_determine_key_type_error_   s    rJ   c                   C   sF   t jtdd��$ ttdddƒdd� W d   ƒ n1 s80    Y  d S )NzOnly array-like or scalar arerE   r   r   r   F)Zaccept_slice)r(   rH   Ú	TypeErrorr	   Úslicer/   r/   r/   r0   Ú#test_determine_key_type_slice_errord   s    rM   z#array_namespace, device, dtype_namec              	   C   sÞ   t | |ƒ}tjdd��´ | g d¢¡}t|ƒdks6J ‚| g d¢¡}t|ƒdksTJ ‚z| g d¢¡}W n ty|   d }Y n0 |d ur¼tjtdd	�� t|ƒ W d   ƒ n1 s²0    Y  W d   ƒ n1 sÐ0    Y  d S )
NT)Zarray_api_dispatch©r   r   r   r2   r'   r5   )y      ð?      ð?y       @       @y      @      @rD   rE   )	r   ÚsklearnZconfig_contextÚasarrayr	   rK   r(   rH   rI   )Zarray_namespaceZdeviceZ
dtype_nameZxpZint_array_keyZbool_array_keyZcomplex_array_keyr/   r/   r0   Ú!test_determine_key_type_array_apii   s    

rQ   Ú
array_type)ÚlistÚarrayÚsparseÚ	dataframer   Úindices_type)rS   ÚtuplerT   ÚseriesrL   c                 C   s‚   ddg}|dkr.t |d tƒr.|d  d7  < tg d¢g d¢g d¢g| ƒ}t||ƒ}t||dd�}t|tg d¢g d¢g| ƒƒ d S )	Nr   r   rL   rN   ©r   r   r   ©é   r   r   r   r%   ©Ú
isinstancer2   r   r   r   ©rR   rW   ÚindicesrT   Úsubsetr/   r/   r0   Ú&test_safe_indexing_2d_container_axis_0‚   s    
ÿrb   )rS   rT   rY   Úpolars_seriesc                 C   sl   ddg}|dkr.t |d tƒr.|d  d7  < tg d¢| ƒ}t||ƒ}t||dd�}t|tddg| ƒƒ d S )Nr   r   rL   ©	r   r   r   r   r   r   r\   r   r   r   r%   r   r]   r_   r/   r/   r0   Útest_safe_indexing_1d_container’   s    
re   )rT   rU   rV   r   r`   r   r>   r?   c                 C   sê   t |ƒ}|dkr.t|d tƒr.|d  d7  < g d¢}tg d¢g d¢g d¢g| |ƒ}t||ƒ}t|d tƒr¶| dvr¶d	}tjt|d
�� t||dd� W d   ƒ qæ1 sª0    Y  n0t||dd�}t	|tddgddgddgg| ƒƒ d S )NrL   r   r=   rN   rZ   r[   r   ©rV   r   úESpecifying the columns using strings is only supported for dataframesrE   r%   r   r   r   r   r   r   )
r   r^   r2   r   r4   r(   rH   rI   r   r   )rR   rW   r`   Zindices_convertedÚcolumns_namerT   Úerr_msgra   r/   r/   r0   Ú&test_safe_indexing_2d_container_axis_1ž   s"    ÿ
ÿ.ÿrj   Úarray_read_onlyÚindices_read_onlyrT   rY   zaxis, expected_arrayrZ   r[   r   r   r   r   c           	      C   s€   t  g d¢g d¢g d¢g¡}| r,|jdd� t||ƒ}t  ddg¡}|rT|jdd� t||ƒ}t|||d�}t|t||ƒƒ d S )	NrN   rZ   r[   F)Úwriter   r   r%   )ÚnprT   Zsetflagsr   r   r   )	rk   rl   rR   rW   r&   Úexpected_arrayrT   r`   ra   r/   r/   r0   Ú&test_safe_indexing_2d_read_only_axis_1»   s    


rp   )rS   rX   rT   rY   c                 C   sX   dgdgd  dgd  }t g d¢| ƒ}t ||ƒ}t||dd�}t|t ddg| ƒƒ d S )	NFTr   r   rd   r   r%   r   ©r   r   r   r_   r/   r/   r0   Ú$test_safe_indexing_1d_container_maskÑ   s
    
rr   zaxis, expected_subsetc                 C   sZ   g d¢}t g d¢g d¢g d¢g| |ƒ}g d¢}t ||ƒ}t|||d�}t|t || ƒƒ d S )Nr=   rN   rZ   r[   )FTTr%   rq   )rR   rW   r&   Zexpected_subsetrh   rT   r`   ra   r/   r/   r0   Útest_safe_indexing_2d_maskÛ   s    ÿ

ÿrs   z array_type, expected_output_type))rS   rS   ©rT   rT   ©rU   rU   ©rV   rY   ©r   rc   c                 C   sJ   t g d¢g d¢g d¢g| ƒ}d}t||dd�}t g d¢|ƒ}t||ƒ d S )NrN   rZ   r[   r   r   r%   rq   )rR   Úexpected_output_typerT   r`   ra   ro   r/   r/   r0   Ú#test_safe_indexing_2d_scalar_axis_0ï   s
    ry   c                 C   s0   t g d¢| ƒ}d}t||dd�}|dks,J ‚d S )Nrd   r   r   r%   r   )r   r   )rR   rT   r`   ra   r/   r/   r0   Útest_safe_indexing_1d_scalar  s    rz   )rt   ru   rv   rw   c           	      C   sÀ   g d¢}t g d¢g d¢g d¢g| |ƒ}t|tƒrz| dvrzd}tjt|d�� t||dd	� W d   ƒ q¼1 sn0    Y  nBt||dd	�}g d
¢}|dkr¨dgdgdgg}t ||ƒ}t||ƒ d S )Nr=   rN   rZ   r[   rf   rg   rE   r   r%   )r   r   r   rU   r   r   r   )r   r^   r4   r(   rH   rI   r   r   )	rR   rx   r`   rh   rT   ri   ra   Zexpected_outputro   r/   r/   r0   Ú#test_safe_indexing_2d_scalar_axis_1	  s    ÿÿ.
r{   )rS   rT   rU   c                 C   s8   t g d¢g d¢g d¢g| ƒ}t|d dd�}t||ƒ d S )NrN   rZ   r[   r   r%   rq   )rR   ÚXZX_subsetr/   r/   r0   Útest_safe_indexing_None_axis_0)  s    r}   c                  C   sZ   t  d¡} d}|  t¡}t jt|d��  t|dgdd� W d   ƒ n1 sL0    Y  d S )NÚpandasz&No valid specification of the columns.rE   rG   r   r%   )r(   r)   r*   ÚX_toyrH   rI   r   )Úpdri   r|   r/   r/   r0   Ú0test_safe_indexing_pandas_no_matching_cols_error0  s
    

r�   r&   c                 C   sD   t jtdd��" ttddg| d� W d   ƒ n1 s60    Y  d S )Nz'axis' should be either 0rE   r   r   r%   )r(   rH   rI   r   r   r%   r/   r/   r0   Útest_safe_indexing_error_axis8  s    r‚   ÚX_constructor)rT   rY   rc   c                 C   s¤   t tdƒƒ}| dkr t |¡} n<| dkr>t d¡}| |¡} n| dkr\t d¡}|j|d�} d}tjt|d	��" t	| d
dgdd� W d   ƒ n1 s–0    Y  d S )Nr   rT   rY   r~   rc   r   )Úvaluesz='X' should be a 2D NumPy array, 2D sparse matrix or dataframerE   r   r   r%   )
rS   Úrangern   rP   r(   r)   ZSeriesrH   rI   r   )rƒ   r|   r€   r+   ri   r/   r/   r0   Ú!test_safe_indexing_1d_array_error>  s    

r†   c                  C   sb   ddg} g d¢g d¢g d¢g}d}t jt|d�� t|| dd	� W d   ƒ n1 sT0    Y  d S )
Nr>   r?   rN   rZ   r[   z.String indexing is not supported with 'axis=0'rE   r   r%   ©r(   rH   rI   r   )r`   rT   ri   r/   r/   r0   Ú4test_safe_indexing_container_axis_0_unsupported_typeQ  s
    rˆ   c                  C   sÐ   t  d¡} t| jƒ}t|jƒ}|tdƒkr2tdƒ‚|  g d¢g d¢dœ¡}t|ddgdd	�}t| j	d
ƒrr| j	j
}n
| jjj
}t ¡ �& t d|¡ d|jd< W d   ƒ n1 s°0    Y  |jd dksÌJ ‚d S )Nr~   Ú3z;SettingWithCopyWarning has been removed in pandas 3.0.0.devrN   )r   r   r   )r    r!   r   r   r%   ÚSettingWithCopyWarningÚerrorr   )r   r   )r(   r)   Úparse_versionÚ__version__Úbase_versionr   r*   r   ÚhasattrÚerrorsrŠ   ÚcoreÚcommonÚwarningsÚcatch_warningsÚsimplefilterZiloc)r€   Z
pd_versionZpd_base_versionr|   ra   rŠ   r/   r/   r0   Ú4test_safe_indexing_pandas_no_settingwithcopy_warningY  s    





(r–   c                 C   sZ   ddgddgddgg}d}t jt|d�� t|| dd	� W d
  ƒ n1 sL0    Y  d
S )z@Check that we raise a ValueError when axis=1 with input as list.r   r   r   r   r\   r   z!axis=1 is not supported for listsrE   r%   Nr‡   )r`   r|   ri   r/   r/   r0   Ú*test_safe_indexing_list_axis_1_unsupportedr  s    r—   )rT   rU   rV   c                 C   s   t j d¡}| dd¡}ddg}| t|ƒ|jd ¡}t|| ƒ}t|||d� t||dd�}t	|t|| ƒƒ ddg}| |jd t|ƒ¡}t|| ƒ}t|||d� t||dd�}t	|t|| ƒƒ d	\}}|j|jŽ }t|| ƒ}t|||d� t	|t|| ƒƒ d
S )z,Check that `_safe_assign` works as expected.r   r   r   r   r   )Úrow_indexerr%   )Úcolumn_indexer)NNN)
rn   ÚrandomÚRandomStateZrandnÚlenÚshaper   r   r   r   )rR   ÚrngZX_arrayr˜   r„   r|   Zassigned_portionr™   r/   r/   r0   Útest_safe_assign{  s.    

ÿ

ÿ
rŸ   zkey, err_msg)r   z all features must be in \[0, 2\])Zwhateverú/A given column is not a column of the dataframez%No valid specification of the columnsc                 C   sX   t  d¡}|jtg d¢d�}t jt|d�� t|| ƒ W d   ƒ n1 sJ0    Y  d S )Nr~   r=   ©ÚcolumnsrE   )r(   r)   r*   r   rH   rI   r
   )r-   ri   r€   ZX_dfr/   r/   r0   Útest_get_column_indices_error�  s    	
r£   r-   Úcol1Úcol2Úcol3c                 C   s‚   t  d¡}tjdtd�}g d¢}|j||d�}d | ¡}t  t¡�}t	|| ƒ W d   ƒ n1 sb0    Y  t
|jƒ|ks~J ‚d S )Nr~   )r   r   r:   )r¤   r¤   r¥   r¦   r¥   r¡   z1Selected columns, {}, are not unique in dataframe)r(   r)   rn   Zzerosr2   r*   ÚformatrH   rI   r
   r4   Úvalue)r-   r€   Ztoyr¢   r|   ri   Úexc_infor/   r/   r0   Ú6test_get_column_indices_pandas_nonunique_columns_error­  s    

(rª   c               
   C   sn  t jddd�} | jg d¢g d¢gg d¢d�}G dd	„ d	ƒ}||ƒ}td
dƒd
dgftddƒdd
gftd
dƒd
gfddgd
dgftddƒdd
gftddƒg d¢ftddƒdgfddgddgfg g fg	}|D ]\}}t||ƒ|ksÈJ ‚qÈd}t jt|d�� t|dgƒ W d  ƒ n1 �s0    Y  d}t jt|d��" t|tdddƒƒ W d  ƒ n1 �s`0    Y  dS )z=Check _get_column_indices for edge cases with the interchanger~   z1.5r   rN   rZ   r   r¡   c                   @   s   e Zd Zdd„ Zdd„ ZdS )z:test_get_column_indices_interchange.<locals>.MockDataFramec                 S   s
   || _ d S rB   )Ú_df)Úselfr,   r/   r/   r0   Ú__init__Å  s    zCtest_get_column_indices_interchange.<locals>.MockDataFrame.__init__c                 S   s   t | j|ƒS rB   )Úgetattrr«   )r¬   Únamer/   r/   r0   Ú__getattr__È  s    zFtest_get_column_indices_interchange.<locals>.MockDataFrame.__getattr__N)Ú__name__Ú
__module__Ú__qualname__r­   r°   r/   r/   r/   r0   r   Ä  s   r   r   Nr   r   r!   r"   r    r6   r    rE   Znot_a_columnzkey.step must be 1 or None)r(   r)   r*   rL   r
   rH   rI   ÚNotImplementedError)r€   r,   r   Z	df_mockedZkey_resultsr-   ÚresultÚmsgr/   r/   r0   Ú#test_get_column_indices_interchange¼  s,    ÷,r·   c                   C   sª   t ƒ d u sJ ‚t t¡�  t dgddgƒ W d   ƒ n1 s>0    Y  t t¡�( t ddgddgddd� W d   ƒ n1 s€0    Y  tt ddgdd�ƒdks¦J ‚d S )	Nr   r   Fr   )ÚreplaceÚ	n_samplesr   r   )r¹   )r   r(   rH   rI   rœ   r/   r/   r/   r0   Útest_resampleä  s    .6rº   c                  C   sš   t j d¡} d}d}| j|dfd�}| jd||d�}t||ddd d�\}}t  |dk¡s\J ‚t||dd|d�\}}t  |dk¡r„J ‚t  |¡dks–J ‚d S )	Nr   éd   gÍÌÌÌÌÌì?r   ©Úsizer   ©r¹   Úrandom_stateÚstratifyr   )rn   rš   r›   ÚnormalZbinomialr   ÚallÚsum)rž   r¹   Úpr|   ÚyÚ_Zy_not_stratifiedZy_stratifiedr/   r/   r0   Útest_resample_stratifiedò  s    rÇ   c                  C   sÖ   t j d¡} d}| j|dfd�}| jdd|d�}t||dd| |d�\}}t||d	d| |d�\}}t  |¡jd dk sxJ ‚t  |¡jd dks�J ‚t||dd
| |d�\}}|jd d
ksºJ ‚t  |¡jd dksÒJ ‚d S )Nr   r»   r   r¼   r   Té2   )r¸   r¹   r¿   rÀ   Fiè  )rn   rš   r›   rÁ   Úrandintr   Úuniquer�   )rž   r¹   r|   rÅ   Z	X_replacerÆ   ZX_no_replacer/   r/   r0   Ú test_resample_stratified_replace  s"    ÿ
ÿ
ÿ
rË   c                  C   s\   t j d¡} d}| j|dfd�}| jdd|dfd�}t||d| |d�\}}|jdksXJ ‚d S )Nr   r»   r   r¼   r   rÈ   r¾   )rn   rš   r›   rÁ   rÉ   r   Úndim)rž   r¹   r|   rÅ   r/   r/   r0   Útest_resample_stratify_2dy  s    rÍ   Úcsr_containerc                 C   sˆ   t j d¡}d}|j|dfd�}|jdd|d�}| | dd¡ƒ}tjtdd��& t	||d	||d
�\}}W d   ƒ n1 sz0    Y  d S )Nr   r»   r   r¼   éÿÿÿÿr   zSparse data was passedrE   rÈ   r¾   )
rn   rš   r›   rÁ   rÉ   Úreshaper(   rH   rK   r   )rÎ   rž   r¹   r|   rÅ   rÀ   r/   r/   r0   Ú#test_resample_stratify_sparse_error%  s    rÑ   c                  C   sZ   dd„ } t  ddgddggddgd	d
ggg¡}t| |ƒƒ}t|ƒ t| |ƒƒ|ksVJ ‚d S )Nc                 S   s   t dd„ | D ƒƒS )Nc                 s   s    | ]}t d d„ |D ƒƒV  qdS )c                 s   s   | ]}t |ƒV  qd S rB   ©rX   )Ú.0ÚCr/   r/   r0   Ú	<genexpr>3  ó    zPtest_shuffle_on_ndim_equals_three.<locals>.to_tuple.<locals>.<genexpr>.<genexpr>NrÒ   )rÓ   ÚBr/   r/   r0   rÕ   3  rÖ   zFtest_shuffle_on_ndim_equals_three.<locals>.to_tuple.<locals>.<genexpr>rÒ   )ÚAr/   r/   r0   Úto_tuple2  s    z3test_shuffle_on_ndim_equals_three.<locals>.to_tupler   r   r   r   r   r   r\   r   )rn   rT   Úsetr   )rÙ   rØ   ÚSr/   r/   r0   Ú!test_shuffle_on_ndim_equals_three1  s
    &rÜ   Úcsc_containerc                 C   s8  g d¢}t jg d¢td�}g d¢}tt jddgddgdd	ggtd�ƒ}| t  d
¡ dd	¡ƒ}t|||||dd�\}}}}	}
|g d¢ksŠJ ‚t|ƒtksšJ ‚t	|g d¢ƒ |j
tks¶J ‚|g d¢ksÆJ ‚t|ƒtksÖJ ‚t	|	t jdd	gddgddggtd�ƒ t|	ƒtk�sJ ‚t	|
 ¡ t  ddgd	dgddgg¡ƒ d S )Nr   r:   rN   r    r   r!   r   r"   r   r   r   )r¿   )r"   r!   r    )r   r   r   r   r   )rn   rT   Úobjectr   ÚarangerÐ   r   ÚtyperS   r   r;   Ztoarray)rÝ   r    r!   r"   ÚdÚeZa_sZb_sZc_sZd_sZe_sr/   r/   r0   Ú"test_shuffle_dont_convert_to_array;  s    $&rã   )Lr“   r   Zunittestr   Únumpyrn   r(   rO   Z$sklearn.externals._packaging.versionr   rŒ   Zsklearn.utilsr   r   r   Zsklearn.utils._array_apir   Zsklearn.utils._indexingr	   r
   r   Zsklearn.utils._mockingr   Zsklearn.utils._testingr   r   r   r   r   Zsklearn.utils.fixesr   r   rß   rÐ   r   r1   ÚmarkZparametrizeZbool_rL   rT   Zint32Zint64Zuint8rÞ   rC   rJ   rM   rQ   rb   re   rj   rp   rr   rs   ry   rz   r{   r}   r�   r‚   r†   rˆ   r–   r—   rŸ   r£   rª   r·   rº   rÇ   rË   rÍ   rÑ   rÜ   rã   r/   r/   r/   r0   Ú<module>   sü   !



êþ
ÿÿ
.ÿ,þþ


þ	


(

!ýþ
ÿ
(


