U
    sVcv;                     @   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   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/   G/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/frame/indexing/test_xs.pyfour_level_index_dataframe   s    "
r1   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2r3   r4   3)r3   r4   r5   )ABr6   r7   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/   r0   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      ?r6   foor7   g       @CbarDg      @Er'   )r)   namer   r   c)rU   r)   r?   )	r   r;   r   r-   rE   rF   r   r+   Zfloat64)rH   dfr;   expresultrM   r/   r/   r0   test_xs_cornerG   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   rV   r   rO   )r   r+   randomrandnr;   ilocrE   rF   )rH   rW   ZcrossrX   r/   r/   r0   test_xs_duplicatesZ   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   Z
strawberry
      i  )dayflavourZsalesyearre   rd   rc   F)level
drop_levelr   )r   	set_indexr;   rE   assert_frame_equalassert_produces_warningFutureWarningrH   rW   rY   rM   r/   r/   r0   test_xs_keep_levela   s    "zTestXS.test_xs_keep_levelc              	   C   s   t tdddtdtdd}| }|rPd|dd d < t|| nt|rd}t	j
t|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(      r   zC\nA value is trying to be set on a copy of a slice from a DataFramer8   )r   r+   ZarangeZreshaperangecopyr;   rE   ri   r@   rA   r   anyr>   rG   )rH   using_array_managerusing_copy_on_writedmdf_origmsgr/   r/   r0   test_xs_viewr   s    $zTestXS.test_xs_viewN)__name__
__module____qualname__rN   rZ   r^   rm   rw   r/   r/   r/   r0   r2   &   s
    r2   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 )NrR   bazrP   quxr   r    firstsecondr&   r      r6   r7   rQ   r(   )r   rR   )r   r~   r   rf   r:   r   )r-   zipr   from_tuplesr   r+   r[   r\   r;   r]   rE   ri   )rH   ZarraysZtuplesr)   rW   rY   rM   r/   r/   r0   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rf   )ro   r-   r   Zfrom_productr   r+   r[   r\   lenr;   locrE   ri   )rH   datesidsr)   rW   rY   rM   r/   r/   r0   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   rP   rR   r|   r}   r~   rU   )r;   r)   Zget_level_valuesr   rE   ri   rH    multiindex_dataframe_random_datarW   rY   rM   r/   r/   r0   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   yrV   rzr   r   r   r$   r%   rO   r   r+   r[   r\   r   r   r;   rE   ri   )rH   r.   r)   rW   rM   rY   r/   r/   r0   test_xs_level_eq_2   s    z'TestXSWithMultiIndex.test_xs_level_eq_2c              	   C   sf   |}|  }|jddd}|r,d|d d < n*d}tjt|d d|d d < W 5 Q R X t|| d S )Nr    r   r   ra   AA value is trying to be set on a copy of a slice from a DataFramer8   rp   r;   r@   rA   r   rE   ri   )rH   r   rs   rW   ru   rY   rv   r/   r/   r0   test_xs_setting_with_copy_error   s    z4TestXSWithMultiIndex.test_xs_setting_with_copy_errorc              	   C   sj   |}|  }|jdddgd}|r0d|d d < n*d}tjt|d d|d d < W 5 Q R X t|| d S )Nr   r   r   r"   r   ra   r   r8   r   )rH   r1   rs   rW   ru   rY   rv   r/   r/   r0   (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-   rE   rj   rk   ri   )rH   keyrf   r   rL   rW   rM   rY   r/   r/   r0   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   rO   r   r   )r   rh   r   r+   nanr;   rE   ri   )rH   accrW   rM   rY   r/   r/   r0   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/   r0   <lambda>      zTestXSWithMultiIndex.<lambda>rR   rP   lvl1r   c                 C   s   | d d ddf S )Nr   r   r/   r   r/   r/   r0   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   rR   rP   ZhelloZworldr   r   r   r   r   r   r#   r   r   r   )
rH   r   rf   Zexp_arrZ	exp_indexr.   r)   rW   rY   rM   r/   r/   r0   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;   rW   r/   r/   r0   r     r   c                 C   s   |  dj dddS )Nr   r   r"   r   r   r   r/   r/   r0   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-   rE   ri   rH   r   r1   rW   Zexpected_valuesZexpected_indexrM   rY   r/   r/   r0   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/   r0   r   '  r   c                 C   s
   |  dS )Nr   r   r   r/   r/   r0   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/   r0   test_xs_level0&  s       z#TestXSWithMultiIndex.test_xs_level0c                 C   s*   |}| dj}|jd }t|| d S )NrR   r    r   )r;   valuesrE   Zassert_almost_equalr   r/   r/   r0   test_xs_values;  s    
z#TestXSWithMultiIndex.test_xs_valuesc                 C   s(   |}| d}|jd }t|| d S )Nr   )r;   r   rE   rF   r   r/   r/   r0   test_xs_loc_equalityA  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)rP   rR   r   )rP   r|   r   )rP   r}   r   r   r   r   r      r   rO   )r   r   r+   r[   r\   r   r]   Z	droplevelr;   r   rE   Zassert_equalr   )rH   r   r)   objrM   rY   r/   r/   r0   +test_xs_IndexSlice_argument_not_implementedG  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 )
Nr6   r   r   r   zIndex must be a MultiIndexr8   r   asr   )r   r   r@   rA   	TypeErrorr;   )rH   r   r   rv   r/   r/   r0   test_xs_levels_raises\  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r:   rg   )r   r   r   r;   rE   ri   )rH   mirW   rY   rM   r/   r/   r0   "test_xs_multiindex_droplevel_falsef  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   rV   r   Fr   )r   r   r;   rE   ri   rl   r/   r/   r0   test_xs_droplevel_falseu  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< |r|t ddgi}n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"|rt ddgi}nt ddgi}t	|| d S )Nr   r   r   r   r   rV   r   Fr   r   )r   r   g      @)
r   r   r;   r+   Zshares_memoryr]   Z_valuesr>   rE   ri   )rH   rr   rs   rW   rY   rM   r/   r/   r0   test_xs_droplevel_false_view|  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   orV   r   r   r   r   r   r   r   r   r8   r   F)rg   r:   )
r   r   r   rE   rj   rk   r@   rA   rB   r;   )rH   r   rW   r/   r/   r0   $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/   r0   r{      sL   


 


	!r{   )rC   Znumpyr+   r@   Zpandas.errorsr   Zpandasr   r   r   r   r   r   Zpandas._testingZ_testingrE   Zpandas.tseries.offsetsr	   Zfixturer1   r2   r{   r/   r/   r/   r0   <module>   s    
b