a
    h~U                     @   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 ZFdd ZGdd ZHej$%dedd ZIdd ZJej$%dedd 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 | qd
dgddgfdgdgfg}	|	D ],\}
}t||
dd}||dd|f | qd
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/   ]/var/www/html/assistant/venv/lib/python3.9/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rtjtdd	 t| W d    n1 s0    Y  W d    n1 s0    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rd	}tjt|d
 t||dd W d    q1 s0    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    q1 sn0    Y  nBt||dd	}g d
}|dkrd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 s0    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 s0    Y  |jd dksJ 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sJ qd}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 s0    Y  tt ddgdddksJ 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rJ t |dksJ 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sJ t||dd
| |d\}}|jd d
ksJ t |jd dksJ d S )Nr   r   r   r   r   T2   )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sJ t|tksJ t	|g d |j
tksJ |g dksJ t|tksJ 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   !





.,

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