B
    Y0d:                 @   s8   d dl Zd dlZd dlZd dlmZ G dd deZdS )    N)BaseExtensionTestsc            	   @   s  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zejjddddgejdddgd d!edddggd"d#d$gd%d&d' Zejjddddejgejdddejgd d!gd"d#gd%d(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Z d8d9 Z!d:d; Z"ejd<d=d>gd?d@ Z#dAdB Z$dCdD Z%dEdF Z&dGdH Z'dIdJ Z(dKdL Z)dMS )NBaseGetitemTestsz%Tests for ExtensionArray.__getitem__.c             C   sX   t |}|jd d }t |d d }| || |jddddg }| || d S )N   r            )pdSeriesilocassert_series_equal)selfdataserresultexpected r   U/var/www/html/venv/lib/python3.7/site-packages/pandas/tests/extension/base/getitem.pytest_iloc_series   s    
z!BaseGetitemTests.test_iloc_seriesc             C   s*  t |tjt|ddd}t d|d d i}|jd ddgf }| || |jdddd	gdgf }| || t j|d d dd
}|jd ddf }| || |jd ddf }| || |jd d d d df }| ||dg  |ddg jd d d d df }| ||dg  d S )Nint64)dtype)ABr   r   r   r   r   r   )namer   )	r   	DataFramenparangelenr
   assert_frame_equalr	   r   )r   r   dfr   r   r   r   r   test_iloc_frame   s     z BaseGetitemTests.test_iloc_framec             C   s   t d|i}|jd d d d f }| || |jd d d df }| || |jd d d df }| || |jd d d d df }| || |jd d ddf }| ||jd d d df  |jd d dd f }| || d S )Nr   r   r   r   )r   r   r
   r   )r   r   r   r   r   r   r   test_iloc_frame_single_block0   s    z-BaseGetitemTests.test_iloc_frame_single_blockc             C   sX   t |}|jd d }t |d d }| || |jddddg }| || d S )Nr   r   r   r   r   )r   r	   locr   )r   r   r   r   r   r   r   r   test_loc_seriesF   s    
z BaseGetitemTests.test_loc_seriesc             C   s   t |tjt|ddd}t d|d d i}|jd ddgf }| || |jddd	dgdgf }| || t j|d d dd
}|jd ddf }| || |jd ddf }| || 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   test_loc_frameO   s    zBaseGetitemTests.test_loc_framec             C   s~   t d|i}t j|d gdgd|jd}|jd }| || t j|d gdgt|d |jd}|jd }| || d S )Nr   r   )indexr   r   r    r   )r   r   r	   r   r"   r   r   r
   )r   r   r   r   r   r   r   r    test_loc_iloc_frame_single_dtypee   s    
 
z1BaseGetitemTests.test_loc_iloc_frame_single_dtypec             C   s>   |d }t ||jjstt|d }t ||jjs:td S )Nr   )
isinstancer   typeAssertionErrorr   r	   )r   r   r   r   r   r   test_getitem_scalart   s    z$BaseGetitemTests.test_getitem_scalarc             C   s   |d }|||st d S )Nr   )r)   )r   data_missingna_cmpna_valuer   r   r   r   test_getitem_scalar_na{   s    z'BaseGetitemTests.test_getitem_scalar_nac             C   sL   |g  }t |dkstt|t|s*t|tjg dd }| || d S )Nr   r   )r   )r   r)   r'   r(   r   arrayassert_extension_array_equal)r   r   r   r   r   r   r   test_getitem_empty   s
    z#BaseGetitemTests.test_getitem_emptyc             C   s   t jt|td}|| }t|dks*tt|t|s<tt jt|td}t|| }t|dkslt|j	|j	ks|td|d< || }t|dkstt|t|stt|| }t|dkst|j	|j	kstd S )N)r   r   Tr   )
r   zerosr   boolr)   r'   r(   r   r	   r   )r   r   maskr   r   r   r   test_getitem_mask   s    z"BaseGetitemTests.test_getitem_maskc          	   C   sr   t ddg}dt| }tjt|d ||  W d Q R X tj|dd}tjt|d ||  W d Q R X d S )NTFz-Boolean index has wrong length: 2 instead of )matchboolean)r   )r   r/   r   pytestraises
IndexErrorr   )r   r   r4   msgr   r   r   test_getitem_mask_raises   s    z)BaseGetitemTests.test_getitem_mask_raisesc             C   s   t jtj|jdddd}|| }t|dks2tt|t|sDtt 	|| }t|dksbt|j
|j
ksrtd|d d< |dddd	d
g}|| }| || t 	|}t 	|| }| || d S )Nr3   )r   r7   r   T   r   r   r   r   )r   r/   r   r2   shaper   r)   r'   r(   r	   r   taker0   r   )r   r   r4   r   r   r   r   r   test_getitem_boolean_array_mask   s    
z0BaseGetitemTests.test_getitem_boolean_array_maskc             C   s   t jtj|jdddd}t j|d d< d|dd< || }||d }| || t |}|| }||d }| 	|| d S )Nr3   )r   r7   r   Tr   F)
r   r/   r   r2   r>   NAZfillnar0   r	   r   )r   r   r4   r   r   sr   r   r   (test_getitem_boolean_na_treated_as_false   s    
z9BaseGetitemTests.test_getitem_boolean_na_treated_as_falseidxr   r   r   ZInt64)r   listzinteger-arrayznumpy-array)Zidsc             C   sn   || }t |dkstt|t|s*t|dddg}| || t|}t|| }| || d S )Nr   r   r   r   )	r   r)   r'   r(   r?   r0   r   r	   r   )r   r   rD   r   r   r   r   r   test_getitem_integer_array   s    
z+BaseGetitemTests.test_getitem_integer_arrayc          	   C   s*   d}t jt|d ||  W d Q R X d S )Nz9Cannot index with an integer indexer containing NA values)r6   )r8   r9   
ValueError)r   r   rD   r;   r   r   r   (test_getitem_integer_with_missing_raises   s    z9BaseGetitemTests.test_getitem_integer_with_missing_raisesc             C   s@   |t d }t|t|st|t d }t|t|s<td S )Nr   r   )slicer'   r(   r)   )r   r   r   r   r   r   test_getitem_slice   s    z#BaseGetitemTests.test_getitem_slicec             C   s   |dd d f }|  || |d d df }|  || |dd df }|  ||d d  |d ddf }|  ||d d  |dd d df }|  ||d d d  |d d ddf }|  ||d d d  d S )N.r   r   )r0   )r   r   r   r   r   r   test_getitem_ellipsis_and_slice   s    z0BaseGetitemTests.test_getitem_ellipsis_and_slicec             C   s  t j|dd tt|D d}|d|jd ks8t|ddg}|jddg }| || |td}|jdd	g }| || |d
d kst||j	
 d	 d kstt j|d d tdd}|d|jd kst|tdd}|jd	ddg }| || |d}|d ks,t|d|jd ksFt|d
|jd
 ks`t|t|d ksxtt |}|d d d }|d	d kstd S )Nc             S   s   g | ]}d | qS )r   r   ).0ir   r   r   
<listcomp>  s    z-BaseGetitemTests.test_get.<locals>.<listcomp>)r%   r   r      r   r   r   r    ZabcdefcbdZ)r   r	   ranger   getr
   r)   r   rI   r%   maxrE   )r   r   rB   r   r   s2r   r   r   test_get  s.     

zBaseGetitemTests.test_getc             C   sZ   t |dddg }|jd |d ks*t|jd |d ks@t|jd |d ksVtd S )Nr   r   r   r   )r   r	   r
   r)   )r   r   r   r   r   r   test_take_sequence/  s    z#BaseGetitemTests.test_take_sequencec          	   C   s   | ddg}|j|jkst|d |d ks2t|d |d ksFt|j ddgd|d}|d |d ksnt||d |sttjtdd | t|d g W d Q R X d S )Nr   r    r   T)
allow_fill
fill_valuezout of bounds)r6   )r?   r   r)   r8   r9   r:   r   )r   r   r-   r,   r   r   r   r   	test_take5  s    zBaseGetitemTests.test_takec          	   C   s   |d d }|j dgdd}||d |s.td}tjt|d | dg W d Q R X tjtdd | ddg W d Q R X d S )	Nr   r    T)rZ   z;cannot do a non-empty take from an empty axes|out of bounds)r6   zcannot do a non-empty taker   )r?   r)   r8   r9   r:   )r   r   r-   r,   emptyr   r;   r   r   r   test_take_emptyB  s    z BaseGetitemTests.test_take_emptyc             C   sJ   t |}|d| |d dg}|dd|d |d g}| || d S )Nr   r   r    )r   r?   r0   )r   r   nr   r   r   r   r   test_take_negativeP  s    z#BaseGetitemTests.test_take_negativec             C   sX   |d }|d }|j |||g|jd}|jddg|dd}|ddg}| || d S )Nr   r   )r   r    T)r[   rZ   )_from_sequencer   r?   r0   )r   r+   r[   naarrr   r   r   r   r   test_take_non_na_fill_valueW  s    z,BaseGetitemTests.test_take_non_na_fill_valuec          	   C   s2   t jtdd |jddg|dd W d Q R X d S )N )r6   r   T)r[   rZ   )r8   r9   rG   r?   )r   r   r-   r   r   r   &test_take_pandas_style_negative_raisesb  s    z7BaseGetitemTests.test_take_pandas_style_negative_raisesrZ   TFc          	   C   sB   |d d }t jtdd |jtddg|d W d Q R X d S )Nr   zout of bounds|out-of-bounds)r6   r   )rZ   )r8   r9   r:   r?   r   Zasarray)r   r   rZ   rc   r   r   r   test_take_out_of_bounds_raisesf  s    z/BaseGetitemTests.test_take_out_of_bounds_raisesc             C   sb   t |}|ddg}t j|j|d |t|d  g|jddt|d gd}| || d S )Nr   r    r   )r   )r%   )r   r	   r?   ra   r   r   r   )r   r   rB   r   r   r   r   r   test_take_seriesm  s    
"z!BaseGetitemTests.test_take_seriesc             C   s   t |}|dddg}t j|dddgdddgd}| || t|}|dd|g}t j|j||d |g|jddd|gd}| || |||d g}t j|j||g|jd||d gd}| || d S )Nr   r   r   )r%   r    )r   )r   r	   reindexr?   r   r   ra   r   )r   r   r-   rB   r   r   r_   r   r   r   test_reindexv  s    
 "zBaseGetitemTests.test_reindexc             C   sn   |d }|d }|j ||g|jd}t|}|jdddg|d}t|j |||g|jd}| || d S )Nr   r   )r   r   )r[   )ra   r   r   r	   rj   r   )r   r+   Zvalidrb   rc   r   r   r   r   r   r   test_reindex_non_na_fill_value  s    
z/BaseGetitemTests.test_reindex_non_na_fill_valuec             C   sd   t d|i}|jdgdf }|jdks,t|jjd jdksBtt|jdr`|jjjdks`td S )Nr   r   r   blocks)	r   r   r"   ndimr)   Z_mgrarrayshasattr_block)r   r   r   resr   r   r   test_loc_len1  s    zBaseGetitemTests.test_loc_len1c          	   C   s~   t |}|d d  }||d ks*td}tjt|d |d d   W d Q R X tjt|d |  W d Q R X d S )Nr   r   z6can only convert an array of size 1 to a Python scalar)r6   )r   r	   itemr)   r8   r9   rG   )r   r   rB   r   r;   r   r   r   	test_item  s    
zBaseGetitemTests.test_itemc             C   s^   G dd dt jj}t d|tjddgtdi}|jd d }| t	|d jj
d d S )	Nc                   s    e Zd ZdZ fddZ  ZS )zBBaseGetitemTests.test_ellipsis_index.<locals>.CapturingStringArrayz6Extend StringArray to capture arguments to __getitem__c                s   || _ t |S )N)last_item_argsuper__getitem__)r   rt   )	__class__r   r   rx     s    zNBaseGetitemTests.test_ellipsis_index.<locals>.CapturingStringArray.__getitem__)__name__
__module____qualname____doc__rx   __classcell__r   r   )ry   r   CapturingStringArray  s   r   Zcol1ZhelloZworld)r   r   zslice(None, 1, None))r   ro   ZStringArrayr   r   r/   objectr
   Zassert_equalstrrv   )r   r   r   _r   r   r   test_ellipsis_index  s
    z$BaseGetitemTests.test_ellipsis_indexN)*rz   r{   r|   r}   r   r   r!   r#   r$   r&   r*   r.   r1   r5   r<   r@   rC   r8   markZparametrizer   r/   r   rF   rA   rH   rJ   rK   rX   rY   r\   r^   r`   rd   rg   rh   ri   rk   rl   rs   ru   r   r   r   r   r   r      sL   			
*$#		r   )numpyr   r8   Zpandasr   Z pandas.tests.extension.base.baser   r   r   r   r   r   <module>   s   