o
    թZhl>                     @   s   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	m
Z
mZmZ d dlmZ d dlmZ ejdd ZG dd dZG d	d
 d
ZdS )    N)SettingWithCopyError)	DataFrameIndex
IndexSlice
MultiIndexSeriesconcat)BDayc                  C   sp   t g dg dg dg} tddgddgg dg d	gg d
g dg dg dgg dd}t| |tddS )NgEJYgr鷯g|?5^ݿg6?gK?g-?gT?g9#?g9]?g46<R?)gQg^)gxֿgI&?g=U@axbq)ı.n$@      4@g      >@)         )r   r      )r   r   r   )r   r      )r   r   r   )onetwothreefourlevelscodesnamesABCDEindexcolumns)nparrayr   r   list)arrr!    r'   Z/var/www/html/lang_env/lib/python3.10/site-packages/pandas/tests/frame/indexing/test_xs.pyfour_level_index_dataframe   s   r)   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestXSc                 C   s  |  }|jd }||}| D ]\}}	t|	r't|| | s&J q|	|| | ks1J qdddddddd	}
t|
}|d}|jtjksOJ |d
 dksWJ |d dks_J t	j
ttdd ||jd t   W d    n1 sw   Y  |jd
dd}|d
 }t|| |jd
dd}t| d|d d < W d    n1 sw   Y  |rt|d
 |d
  |dk rJ d S |dk sJ d S )Nr   r   r   )12r+   r,   3)r+   r,   r-   )ABr.   r/   z Timestamp('1999-12-31 00:00:00')matchr   )axis)copyr!   xsitemsr#   isnanr   dtypeZobject_pytestraisesKeyErrorreescaper	   tmassert_series_equalassert_cow_warningall)selfZfloat_frameZdatetime_frameusing_copy_on_writewarn_copy_on_writeZfloat_frame_origidxr4   itemvalueZ	test_dataframeZseriesexpectedr'   r'   r(   test_xs'   s:   




zTestXS.test_xsc                 C   s   t dgd}d|d< d|d< d|d< d	|d
< d|d< |d}tg dtddd}t|| t g dd}|d}tg dtjd}t|| d S )Nr   r!         ?r.   foor/          @CbarD      @E)rK   rL   rM   rO   rQ   r   )r!   namer   r   cr   )rS   r7   )r   r4   r   r%   r=   r>   r#   Zfloat64)rA   dfr4   expresultrH   r'   r'   r(   test_xs_cornerP   s   

zTestXS.test_xs_cornerc                 C   sB   t tjddg dd}|d}|jd }t|| d S )Nr   )r   r   )r   r   rU   r   r   rJ   rU   )	r   r#   randomdefault_rngstandard_normalr4   ilocr=   r>   )rA   rV   crossrW   r'   r'   r(   test_xs_duplicatesc   s   

zTestXS.test_xs_duplicatesc                 C   s   t dddddddddddddg d	}|jdd
dd}|d d }t|| |jddd
gdd}t|| d S )Nsatsun)r   r   
strawberry
        )dayflavourZsalesyear)rh   rg   rf   rf   F)level
drop_levelr   )re   r`   rh   )r   	set_indexr4   r=   assert_frame_equalrA   rV   rX   rH   r'   r'   r(   test_xs_keep_levelm   s   
zTestXS.test_xs_keep_levelc                 C   s0  t tdddtdtdd}| }|r=t  d|dd d < W d    n1 s0w   Y  t	|| d S |rnd}t
jt|d d|dd d < W d    n1 s\w   Y  |ddk rlJ d S t  d|dd d < W d    n1 sw   Y  |ddk sJ d S )	Nr   r   r   r       r   zC\nA value is trying to be set on a copy of a slice from a DataFramer0   )r   r#   ZarangeZreshaperanger3   r=   Zraises_chained_assignment_errorr4   rl   r8   r9   r   anyr@   )rA   using_array_managerrB   rC   dmdf_origmsgr'   r'   r(   test_xs_view}   s"   $

zTestXS.test_xs_viewN)__name__
__module____qualname__rI   rY   r_   rn   rv   r'   r'   r'   r(   r*   &   s    )
r*   c                   @   s2  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
dddgdgfgdd Zdd Ze	j
ddddd eddgddfdddd edgddfgdd  Ze	j
d!d"d d#d gd$d% Ze	j
d!d&d d'd gd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:S );TestXSWithMultiIndexc                 C   s   g dg dg}t t| }tj|ddgd}ttjddg d|d	}|j	d
ddd}|j
d d dgf }t|| d S )N)rO   rO   bazr{   rL   rL   quxr|   )r   r   r   r   r   r   r   r   firstsecondr   r   )r      )r.   r/   rN   r    )r   rO   )r~   r}   r   ri   r2   r   )r%   zipr   from_tuplesr   r#   rZ   r[   r\   r4   r]   r=   rl   )rA   ZarraysZtuplesr!   rV   rX   rH   r'   r'   r(   test_xs_doc_example   s   z(TestXSWithMultiIndex.test_xs_doc_examplec                 C   s~   t dd}td}tj||gddgd}ttjdt	|df|g d	}|j
ddd
}|jdd d f }t|| d S )Nia2ie2abcdedateZsecidr   r   r   )XYZri   )rp   r%   r   Zfrom_productr   r#   rZ   r[   r\   lenr4   locr=   rl   )rA   datesZidsr!   rV   rX   rH   r'   r'   r(   test_xs_integer_key   s   
z(TestXSWithMultiIndex.test_xs_integer_keyc                 C   sH   |}|j ddd}||jddk }tg ddd|_t|| d S )Nr   r~   r   r   )rL   rO   r{   r|   r}   rS   )r4   r!   Zget_level_valuesr   r=   rl   rA    multiindex_dataframe_random_datarV   rX   rH   r'   r'   r(   test_xs_level   s
   z"TestXSWithMultiIndex.test_xs_levelc                 C   s   t jdd}tg dg dg dgg dg dg dgd}t||d}t|d	d d
gdggd}|jddd}t|| d S )Nr   )r   r   )r   pr   )r   r   y)rU   rz)r   r   r   r   r   rJ   r   r   r   rU   r   	r#   rZ   r[   r\   r   r   r4   r=   rl   )rA   r&   r!   rV   rH   rX   r'   r'   r(   test_xs_level_eq_2   s   z'TestXSWithMultiIndex.test_xs_level_eq_2c                 C   s~   |}|  }|jddd}|s|rd|d d < nd}tjt|d d|d d < W d    n1 s2w   Y  t|| d S )Nr   r~   r   rc   AA value is trying to be set on a copy of a slice from a DataFramer0   r3   r4   r8   r9   r   r=   rl   )rA   r   rB   rC   rV   rt   rX   ru   r'   r'   r(   test_xs_setting_with_copy_error   s   z4TestXSWithMultiIndex.test_xs_setting_with_copy_errorc                 C   s   |}|  }|jdddgd}|s|rd|d d < nd}tjt|d d|d d < W d    n1 s4w   Y  t|| d S )Nr   r   r   r   r   rc   r   r0   r   )rA   r)   rB   rC   rV   rt   rX   ru   r'   r'   r(   (test_xs_setting_with_copy_error_multiple   s   z=TestXSWithMultiIndex.test_xs_setting_with_copy_error_multiplez
key, level)r   r~   r   r~   c                 C   sv   |}t |gd }|jjdu sJ t |jdddgd }t|tr,|jt||d}n|j||d}t|| d S )Nr   Fr   r~   r   )	r   r!   Z	is_uniquer4   
isinstancer%   tupler=   rl   )rA   keyri   r   rG   rV   rH   rX   r'   r'   r(   test_xs_with_duplicates   s   
z,TestXSWithMultiIndex.test_xs_with_duplicatesc                 C   sf   g d}t |g ddddg}t dg ditdtjd	d
gddd}|jddd}t|| d S )N))r   r   r   )r   Zbbcder   )r   Zyzcde   )r   xbcde   )r   N   )r   zbcder   )r   ybcder   )a1a2cntr"   r   r   r   )r   r   r   r   r   r   r   r   rJ   r   r   )r   rk   r   r#   nanr4   r=   rl   )rA   accrV   rH   rX   r'   r'   r(   test_xs_missing_values_in_index  s   	
z4TestXSWithMultiIndex.test_xs_missing_values_in_indexzkey, level, exp_arr, exp_indexr   lvl0c                 C      | d d ddf S )Nr   r   r'   r   r'   r'   r(   <lambda>      zTestXSWithMultiIndex.<lambda>rO   rL   lvl1r   c                 C   r   )Nr   r   r'   r   r'   r'   r(   r     r   c           
      C   sx   t jdd}tddgg dgg dg dgdd	gd
}t||d}|j||dd}t|||d}	t||	 d S )Nr   )r   r   r   r   )rO   rL   ZhelloZworld)r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   )
rA   r   ri   Zexp_arrZ	exp_indexr&   r!   rV   rX   rH   r'   r'   r(   test_xs_named_levels_axis_eq_1  s   	z3TestXSWithMultiIndex.test_xs_named_levels_axis_eq_1indexerc                 C   s   | j dddgdS )Nr   r   r   r   r4   rV   r'   r'   r(   r   /  s    c                 C   s   |  dj dddS )Nr   r   r   r   r   r   r'   r'   r(   r   0  r   c                 C   sZ   |}g dg}t dgdggdgdggddgd}t||tdd	}||}t|| d S )
Nr   r   r   r   r   r   r   r   r    r   r   r%   r=   rl   rA   r   r)   rV   Zexpected_valuesZexpected_indexrH   rX   r'   r'   r(   test_xs_level_multiple,  s   

z+TestXSWithMultiIndex.test_xs_level_multiplec                 C   s   | j dddS )Nr   r   r   r   r   r'   r'   r(   r   @  s    c                 C   s
   |  dS )Nr   r   r   r'   r'   r(   r   @  s   
 c                 C   st   |}g dg dg}t ddgddgddggd	d
gd	d
gd
d	ggg dd}t||tdd}||}t|| d S )Nr
   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r    r   r   r'   r'   r(   test_xs_level0?  s   
z#TestXSWithMultiIndex.test_xs_level0c                 C   s*   |}| dj}|jd }t|| d S )NrO   r   r   )r4   valuesr=   Zassert_almost_equalr   r'   r'   r(   test_xs_valuesT  s   
z#TestXSWithMultiIndex.test_xs_valuesc                 C   s(   |}| d}|jd }t|| d S )Nr   )r4   r   r=   r>   r   r'   r'   r(   test_xs_loc_equalityZ  s   

z)TestXSWithMultiIndex.test_xs_loc_equalityc                 C   s   t g dddggg dg dgd}ttjdd|d	}|tu r'|d }|jd
d  d}|	t
dd d f }t|| |jt
dd d f  }t|| d S )N))rL   rO   r   )rL   r{   r   rL   r|   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )   r   rJ   r   )r   r   r#   rZ   r[   r\   r   r]   Z	droplevelr4   r   r=   Zassert_equalr   )rA   frame_or_seriesr!   objrH   rX   r'   r'   r(   +test_xs_IndexSlice_argument_not_implemented`  s   z@TestXSWithMultiIndex.test_xs_IndexSlice_argument_not_implementedc                 C   sf   t dg di}|tu r|d }d}tjt|d |jddd W d    d S 1 s,w   Y  d S )Nr.   r   r   r   zIndex must be a MultiIndexr0   r   asr   )r   r   r8   r9   	TypeErrorr4   )rA   r   r   ru   r'   r'   r(   test_xs_levels_raisest  s   "z*TestXSWithMultiIndex.test_xs_levels_raisesc                 C   sl   t jg dddgd}tg dg|d}|jddd	d
}tddggt jddgddgdd}t|| d S )N)r   r   r   r   )r   r   Zlevel1Zlevel2r   r   r   r   r   Fr2   rj   r   r   r   )r   r   r   r4   r=   rl   )rA   mirV   rX   rH   r'   r'   r(   "test_xs_multiindex_droplevel_false}  s   z7TestXSWithMultiIndex.test_xs_multiindex_droplevel_falsec                 C   sH   t g dgtg dd}|jdddd}t ddgi}t|| d S )Nr   rT   r   r   r   Fr   )r   r   r4   r=   rl   rm   r'   r'   r(   test_xs_droplevel_false  s   z,TestXSWithMultiIndex.test_xs_droplevel_falsec                 C   s6  t g dgtg dd}|jdddd}t|jd d df j|jd d df js-J t| d	|jd
< W d    n1 sBw   Y  |rQt ddgi}nt dd	gi}t	|| t g dgtg dd}|jdddd}d	|jd
< |rt ddgi}n|rt dd	gi}nt ddgi}t	|| d S )Nr   rT   r   r   r   Fr   r   r   )r   r   )r   g      @r   )
r   r   r4   r#   Zshares_memoryr]   Z_valuesr=   r?   rl   )rA   rr   rB   rC   rV   rX   rH   r'   r'   r(   test_xs_droplevel_false_view  s&   0
z1TestXSWithMultiIndex.test_xs_droplevel_false_viewc                 C   sj   t g d}tg dg dg|d}tjtdd |jddd	d
 W d    d S 1 s.w   Y  d S )N))r   mr   )r   nr   )r   orU   r   )r   r   r   r   r   r0   )r   r   Fr   )rj   r2   )r   r   r   r8   r9   r:   r4   )rA   r   rV   r'   r'   r(   $test_xs_list_indexer_droplevel_false  s
   "z9TestXSWithMultiIndex.test_xs_list_indexer_droplevel_falseN)rw   rx   ry   r   r   r   r   r   r   r8   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   rz      sH    



	$rz   )r;   numpyr#   r8   Zpandas.errorsr   Zpandasr   r   r   r   r   r   Zpandas._testingZ_testingr=   Zpandas.tseries.offsetsr	   Zfixturer)   r*   rz   r'   r'   r'   r(   <module>   s     
q