U
    *if8                     @   s   d dl Z d dlZd dl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  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)	DataFrameIndex
IndexSlice
MultiIndexSeriesconcat)BDayc               	   C   s   t dddddgdddd	d
gdddddgg} tddgddgdddgdddggdddgdddgdddgdddggdddd gd!}t| |td"d#S )$NEJYr鷯|?5^ݿ6?粝K?-?T?9#?9]?46<R?gQg^)gxֿgI&?g=U@axbqı.n$@      4@g      >@         r         onetwothreefourlevelscodesnamesABCDEindexcolumns)nparrayr   r   list)arrr(    r.   V/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/frame/indexing/test_xs.pyfour_level_index_dataframe   s    "
r0   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|rFt|| | sZtq||| | kstqdddddddd	}t|}|d}|jtjkst|d
 dkst|d dkstt	j
ttdd ||j d t   W 5 Q R X |jd
dd}	|d
 }
t|	|
 |jd
dd}	d|	d d < |
dk s:td S )Nr   r   r   )12r2   r3   3)r2   r3   r4   )ABr5   r6   z*Timestamp('1999-12-31 00:00:00', freq='B')matchr   )axis)r(   xsitemsr*   isnanAssertionErrorr   dtypeZobject_pytestraisesKeyErrorreescaper   tmassert_series_equalall)selfZfloat_frameZdatetime_frameidxr:   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dddd	dgtddd}t|| t dddgd}|d}tg dtg tjd}t|| d S )Nr   r(   g      ?r5   foor6   g       @CbarDg      @Er&   )r(   namer   r   c)rT   r(   r>   )	r   r:   r   r,   rD   rE   r   r*   Zfloat64)rG   dfr:   expresultrL   r.   r.   r/   test_xs_cornerF   s    

zTestXS.test_xs_cornerc                 C   sD   t tjdddddddgd}|d}|jd }t|| d S )Nr   r   r   rU   r   rN   )r   r*   randomrandnr:   ilocrD   rE   )rG   rV   crossrW   r.   r.   r/   test_xs_duplicatesY   s     

zTestXS.test_xs_duplicatesc              	   C   s   t dddddddddddddd	d
dg}|jdddd}|d d }t|| tt |jddgd	dgdd}W 5 Q R X t|| d S )Nsatsun)r   r   
strawberry
      i  )dayflavourZsalesyearrf   re   rd   F)level
drop_levelr   )r   	set_indexr:   rD   assert_frame_equalassert_produces_warningFutureWarningrG   rV   rX   rL   r.   r.   r/   test_xs_keep_level`   s    "zTestXS.test_xs_keep_levelc              	   C   s   t tdddtdtdd}|rrd}tjtj|d d|	dd d < W 5 Q R X |	ddk
 rtn(d|	dd d < |	ddk std S )	Nr   r   r   r'   zC\nA value is trying to be set on a copy of a slice from a DataFramer7      r   )r   r*   ZarangeZreshaperanger?   r@   comSettingWithCopyErrorr:   anyr=   rF   )rG   using_array_managerdmmsgr.   r.   r/   test_xs_viewq   s    $zTestXS.test_xs_viewN)__name__
__module____qualname__rM   rY   r^   rn   rw   r.   r.   r.   r/   r1   %   s
    r1   c                   @   sV  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e	j
d.eegd/d0 Ze	j
d.eegd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;S )<TestXSWithMultiIndexc              	   C   s   ddddddddgddddddddgg}t t| }tj|ddgd	}ttjd
ddddg|d}|jdddd}|j	d d dgf }t
|| d S )NrQ   bazrO   quxr   r   firstsecondr%   r      r5   r6   rP   r'   )r   rQ   )r   r~   r   rg   r9   r   )r,   zipr   from_tuplesr   r*   rZ   r[   r:   r\   rD   rj   )rG   ZarraysZtuplesr(   rV   rX   rL   r.   r.   r/   test_xs_doc_example   s    z(TestXSWithMultiIndex.test_xs_doc_examplec                 C   sx   t dd}td}tj||gddgd}ttjt|d|dd	d
g}|j	ddd}|j
dd d f }t|| d S )Nia2ie2abcdedateZsecidr   r   XYZrg   )rp   r,   r   Zfrom_productr   r*   rZ   r[   lenr:   locrD   rj   )rG   datesZidsr(   rV   rX   rL   r.   r.   r/   test_xs_integer_key   s    
 z(TestXSWithMultiIndex.test_xs_integer_keyc                 C   sL   |}|j ddd}||jddk }tddddgd	d
|_t|| d S )Nr   r   r   r   rO   rQ   r|   r}   r~   rT   )r:   r(   Zget_level_valuesr   rD   rj   rG    multiindex_dataframe_random_datarV   rX   rL   r.   r.   r/   test_xs_level   s
    z"TestXSWithMultiIndex.test_xs_levelc                 C   s   t jdd}tdddgdddgd	d
dggdddgdddgdddggd}t||d}t|dd dgdggd}|jd	dd}t|| d S )Nr   r   r   pr   r   r   yrU   rzr   r   r   r#   r$   rN   r   r*   rZ   r[   r   r   r:   rD   rj   )rG   r-   r(   rV   rL   rX   r.   r.   r/   test_xs_level_eq_2   s    z'TestXSWithMultiIndex.test_xs_level_eq_2c              	   C   sB   |}|j ddd}d}tjtj|d d|d d < W 5 Q R X d S )Nr   r   r   AA value is trying to be set on a copy of a slice from a DataFramer7   rb   r:   r?   r@   rq   rr   )rG   r   rV   rX   rv   r.   r.   r/   test_xs_setting_with_copy_error   s
    z4TestXSWithMultiIndex.test_xs_setting_with_copy_errorc              	   C   sF   |}|j dddgd}d}tjtj|d d|d d < W 5 Q R X d S )Nr   r   r   r!   r   r   r7   rb   r   )rG   r0   rV   rX   rv   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   s   |}t |gd }|jjdks"tt |jdddgd }t|trjtt	 |j||d}W 5 Q R X n|j||d}t
|| d S )Nr   Fr   r   r   )r   r(   Z	is_uniquer=   r:   
isinstancer,   rD   rk   rl   rj   )rG   keyrg   r   rK   rV   rL   rX   r.   r.   r/   test_xs_with_duplicates   s    
z,TestXSWithMultiIndex.test_xs_with_duplicatesc                 C   sv   dddddddg}t |dd	d
gddd	g}t d
ddddg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   Za1Za2Zcntr)   r   r   r   r   r   r   r   rN   r   r   )r   ri   r   r*   nanr:   rD   rj   )rG   accrV   rL   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   s   | d d ddf S )Nr   r   r.   r   r.   r.   r/   <lambda>       zTestXSWithMultiIndex.<lambda>rQ   rO   lvl1r   c                 C   s   | d d ddf S )Nr   r   r.   r   r.   r.   r/   r      r   c           
      C   s   t jdd}tddgddddggddd	d	gdd	d
dggddgd}t||d}|j||d	d}t|||d}	t||	 d S )Nr   r   r   rQ   rO   ZhelloZworldr   r   r   r   r   r   r"   r   r   r   )
rG   r   rg   Zexp_arrZ	exp_indexr-   r(   rV   rX   rL   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   r:   rV   r.   r.   r/   r     r   c                 C   s   |  dj dddS )Nr   r   r!   r   r   r   r.   r.   r/   r     r   c                 C   s`   |}dddddg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'   r   r   r,   rD   rj   rG   r   r0   rV   Zexpected_valuesZexpected_indexrL   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     r   c                 C   s
   |  dS )Nr   r   r   r.   r.   r/   r     r   c                 C   s   |}dddddgdddd	d
gg}t ddgddgddggddgddgddggdddg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!   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rQ   r   r   )r:   valuesrD   Zassert_almost_equalr   r.   r.   r/   test_xs_values(  s    
z#TestXSWithMultiIndex.test_xs_valuesc                 C   s(   |}| d}|jd }t|| d S )Nr   )r:   r   rD   rE   r   r.   r.   r/   test_xs_loc_equality.  s    

z)TestXSWithMultiIndex.test_xs_loc_equalityklassc              	   C   s   t dddgddggddddddgddddddggd}ttjdd	|d
}|tkr\|d }|jdd  d}|t	dd d f }t
|| |jt	dd d f  }t
|| d S )N)rO   rQ   r   )rO   r|   r   )rO   r}   r   r   r   r   r      r   rN   )r   r   r*   rZ   r[   r   r\   Z	droplevelr:   r   rD   Zassert_equalr   )rG   r   r(   objrL   rX   r.   r.   r/   +test_xs_IndexSlice_argument_not_implemented4  s    z@TestXSWithMultiIndex.test_xs_IndexSlice_argument_not_implementedc              	   C   sR   t ddddgi}|tkr"|d }d}tjt|d |jddd	 W 5 Q R X d S )
Nr5   r   r   r   zIndex must be a MultiIndexr7   r   asr   )r   r   r?   r@   	TypeErrorr:   )rG   r   r   rv   r.   r.   r/   test_xs_levels_raisesI  s    z*TestXSWithMultiIndex.test_xs_levels_raisesc                 C   sp   t jdddgddgd}tddd	g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   r   Fr9   rh   )r   r   r   r:   rD   rj   )rG   mirV   rX   rL   r.   r.   r/   "test_xs_multiindex_droplevel_falseS  s      z7TestXSWithMultiIndex.test_xs_multiindex_droplevel_falsec                 C   sL   t dddggtdddgd}|jdddd	}t ddgi}t|| d S )
Nr   r   r   r   r   rU   r   Fr   )r   r   r:   rD   rj   rm   r.   r.   r/   test_xs_droplevel_falseb  s    z,TestXSWithMultiIndex.test_xs_droplevel_falsec                 C   s   t dddggtdddgd}|jdddd	}t|jd d d
f j|jd d d
f js^td|jd< t ddgi}t	|| t dddggtdddgd}|jdddd	}d|jd< |rt ddgi}nt ddgi}t	|| d S )Nr   r   r   r   r   rU   r   Fr   r   )r   r   g      @)
r   r   r:   r*   Zshares_memoryr\   Z_valuesr=   rD   rj   )rG   rt   rV   rX   rL   r.   r.   r/   test_xs_droplevel_false_viewi  s    0

z1TestXSWithMultiIndex.test_xs_droplevel_false_viewc              
   C   st   t dddg}tdddgddd	gg|d
}tt4 tjtdd |j	ddgddd W 5 Q R X W 5 Q R X d S )N)r   mr   )r   nr   )r   orU   r   r   r   r   r   r   r   r   r7   r   F)rh   r9   )
r   r   r   rD   rk   rl   r?   r@   rA   r:   )rG   r   rV   r.   r.   r/   $test_xs_list_indexer_droplevel_false  s
    z9TestXSWithMultiIndex.test_xs_list_indexer_droplevel_falseN)rx   ry   rz   r   r   r   r   r   r   r?   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r.   r.   r/   r{      sL   


 


	r{   )rB   numpyr*   r?   Zpandasr   r   r   r   r   r   Zpandas._testingZ_testingrD   Zpandas.core.commoncorecommonrq   Zpandas.tseries.offsetsr   Zfixturer0   r1   r{   r.   r.   r.   r/   <module>   s    
^