U
    >vf29                     @   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
mZmZmZmZmZmZmZmZ d dlmZ d dlmZ G dd dZG dd dZG dd	 d	ZG d
d dZG dd dZG dd dZdS )    N)CategoricalCategoricalDtypeCategoricalIndex	DataFrame
DateOffsetDatetimeIndexIndex
MultiIndexSeries	Timestampconcat
date_rangeget_dummiesperiod_range)SparseArrayc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestGetitemc              	   C   s^   t dddgddggddgddggd}td	td
|d}tjtdd |d  W 5 Q R X d S )NZa_lotZonlyoneZ
notevenonei      r   )levelscodes   )indexcolumnsmatch)r	   r   rangepytestraisesKeyError)selfmidf r#   L/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/frame/indexing/test_getitem.py test_getitem_unused_level_raises   s    z,TestGetitem.test_getitem_unused_level_raisesc                 C   sv   t ddd}ttjdd|d}||d  }t||jd d df  t| |d }t||jd d df  d S )Nz1/1/2000   )periods
   r   r   )	r   r   nprandomrandntmassert_series_equalilocrepr)r    rngr"   tsr#   r#   r$   test_getitem_periodindex&   s    z$TestGetitem.test_getitem_periodindexc                 C   sZ   t tdtdg}tddgddggdddg|d}t|}|t|j }t|| d S )Nz
12-31-1999z
12-31-2000r   r   bool)dtyper   r   )r   r   r   r   listr   r-   assert_frame_equal)r    ZcatsexpectedZdummiesresultr#   r#   r$   1test_getitem_list_of_labels_categoricalindex_cols3   s
     z=TestGetitem.test_getitem_list_of_labels_categoricalindex_colsc                 C   sx   t ddg}td|i}t|dd}|d }t|| |jd d df }t|| |jd d df }t|| d S )Nr   r   Aname)r   r   r
   r-   r.   r/   loc)r    datar"   r8   r9   r#   r#   r$   0test_getitem_sparse_column_return_type_and_dtype<   s    z<TestGetitem.test_getitem_sparse_column_return_type_and_dtypec                 C   s<   t ddggtddgddd}|j}|d }t|| d S )Nr      r;   Bstringr5   r)   )r   r   r;   r-   r.   r    r"   r9   r8   r#   r#   r$   test_getitem_string_columnsK   s    z'TestGetitem.test_getitem_string_columnsN)__name__
__module____qualname__r%   r3   r:   r@   rF   r#   r#   r#   r$   r      s
   	r   c                	   @   s   e Zd Zdd Zdd Zdd Zejjde	e
eedd	 d
d	 gddddddgdejdddgdd Zdd Zdd Zdd ZdS )TestGetitemListLikec              	   C   sN   t dgdgdgd}dddg|_tjtdd |dd	dg  W 5 Q R X d S )
Ng      ?g       @      @)xyzrL   rN   z\['y'\] not in indexr   rM   )r   r   r   r   r   r    r"   r#   r#   r$   test_getitem_list_missing_keyT   s    z1TestGetitemListLike.test_getitem_list_missing_keyc                 C   sd   t tjddtdd}d|j_|ddg }|jjdks>t|jd d dd f }t	
|| d S )N   ZAABCr)   foorB   CrA   )r   r*   r+   r,   r6   r   r=   AssertionErrorr/   r-   r7   rE   r#   r#   r$   test_getitem_list_duplicates^   s    z0TestGetitemListLike.test_getitem_list_duplicatesc              	   C   sT   t dddgdddggdddgd	}d
}tjtt|d |dg  W 5 Q R X d S )Nr   rA   r   rQ   r&      abr)   z?"None of [Index(['baf'], dtype='object')] are in the [columns]"r   Zbaf)r   r   r   r   reescape)r    r"   msgr#   r#   r$   test_getitem_dupe_colsi   s    "z*TestGetitemListLike.test_getitem_dupe_colsidx_typec                 C   s   t t| tt| S N)dictzipr   lenkeysr#   r#   r$   <lambda>v       zTestGetitemListLike.<lambda>c                 C   s   t t| tt|  S r^   )r_   r`   r   ra   rc   rb   r#   r#   r$   rd   w   re   r6   iterr   setr_   	dict_keys)idsr   r   rA   c              	   C   s   |dkr|d }}n(t tjddtdddgdd	d
}d}|jd |jd g}||}t||}t|tt	frt
jtdd ||  W 5 Q R X d S || }	|jd d |f }
|jj|
j_t|	|
 |||g }t
jtdd ||  W 5 Q R X d S )Nr   food   r   )rR   bar)ZbazZqux)peekZaboo)ZsthZsth2r<   r)   )Zgoodrj   r   as an indexer is not supportedr   znot in index)r   r*   r+   r,   r   r   r6   
isinstancerg   r_   r   r   	TypeErrorr>   namesr-   r7   r   )r    r]   r   float_frameframemissingrc   idxZ	idx_checkr9   r8   r#   r#   r$   test_getitem_listlikeo   s0    z)TestGetitemListLike.test_getitem_listlikec                 C   s`   t dddgdddgd}dd	 d
D }|j| }t ddgddgdddgd}t|| d S )Nr   rA   r   rQ   r&   rV   rW   rX   c                 s   s   | ]
}|V  qd S r^   r#   .0rL   r#   r#   r$   	<genexpr>   s     zBTestGetitemListLike.test_getitem_iloc_generator.<locals>.<genexpr>r   rA   r   )r   r/   r-   r7   r    r"   Zindexerr9   r8   r#   r#   r$   test_getitem_iloc_generator   s
    
z/TestGetitemListLike.test_getitem_iloc_generatorc                 C   s\   t dddgdddgd}dd	 d
D }|j|df }tddgdddgd}t|| d S )Nr   rA   r   rQ   r&   rV   rw   c                 s   s   | ]
}|V  qd S r^   r#   rx   r#   r#   r$   rz      s     zRTestGetitemListLike.test_getitem_iloc_two_dimensional_generator.<locals>.<genexpr>r{   rX   )r=   r   )r   r/   r
   r-   r.   r}   r#   r#   r$   +test_getitem_iloc_two_dimensional_generator   s
    z?TestGetitemListLike.test_getitem_iloc_two_dimensional_generatorc              	   C   s  t ttdtddtdddd}|jdd }t d	dd
gtdddgdtdddd}t|| t ttdtddtdd
ddd}|jdd }t d	dd
gtdddgdtdd
ddd}t|| t ttdtddtdddd}|jdd }t|| d S )Nr(   z
01-01-2022r   )days)r'   freqr|   z
2022-01-01z
2022-01-03r   rA   z
2022-01-02zdatetime64[ns])r5   r   )r   hoursz2022-01-01 00:00:00z2022-01-02 02:00:00z2022-01-03 04:00:00r   )minutes)	r   r6   r   r   r   r>   r   r-   r7   rE   r#   r#   r$   !test_getitem_iloc_dateoffset_days   sL    

  


z5TestGetitemListLike.test_getitem_iloc_dateoffset_daysN)rG   rH   rI   rP   rU   r\   r   markparametrizer6   rf   r   rg   rv   r~   r   r   r#   r#   r#   r$   rJ   S   s&   
%rJ   c                   @   s   e Zd Zdd Zdd ZdS )TestGetitemCallablec                 C   s   |dd  }|j d d df }t|| |dd  }|j d d ddgf }t||j d d ddgf  |d d }|dd  }|jdd	gd d f }t|| d S )
Nc                 S   s   dS )Nr;   r#   rL   r#   r#   r$   rd      re   z;TestGetitemCallable.test_getitem_callable.<locals>.<lambda>r;   c                 S   s   ddgS )Nr;   rB   r#   r   r#   r#   r$   rd      re   rB   r   c                 S   s
   dddgS )NTFr#   r   r#   r#   r$   rd      re   r   rA   )r>   r-   r.   r7   r/   )r    rr   r9   r8   r"   r#   r#   r$   test_getitem_callable   s    z)TestGetitemCallable.test_getitem_callablec                 C   s`   t ddggddggd}t dgdggd}|d }t|| |jd d df }t|| d S )Nr   rA   rW   rX   r)   )r   r-   r7   r>   )r    r"   r8   r9   r#   r#   r$   %test_loc_multiindex_columns_one_level   s    z9TestGetitemCallable.test_loc_multiindex_columns_one_levelN)rG   rH   rI   r   r   r#   r#   r#   r$   r      s   r   c                   @   s   e Zd Zdd Zejdddgddggdd	gd
dggejdgejdgejdgddggfddgddggdd	gd
dggejdgejdgdd
gd	dggffdd Z	ej
dd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"S )#TestGetitemBooleanMaskc              	   C   s  t dtjddditddddddgtdddgdd	d
dd}t dtjddditddddddgtdddgdd	d
dd}||jdk }|jg  }t|| ||jdk }|jg  }t|| ||jdk }|jdddg }t|| ||jdk }|jdddg }t|| ||jdk  }|jdg }t|| ||jdk }|jg  }t|| d}t	j
t|d ||jdk   W 5 Q R X t	j
t|d ||jdk  W 5 Q R X d S )Nr;   rV   Zint64rD   r   rA   r   T)ZorderedrB   )r5   r=   r|   FrW   r   rQ   z7Unordered Categoricals can only compare equality or notr   )r   r*   aranger   r   r   r/   r-   r7   r   r   rp   )r    Zdf3Zdf4r9   r8   r[   r#   r#   r$   (test_getitem_bool_mask_categorical_index   sV     
 


	z?TestGetitemBooleanMask.test_getitem_bool_mask_categorical_indexzdata1,data2,expected_datar   rA   r   rQ   g      ?rV      rk   rK   g      @g      @g      @g       @r&   c           
      C   sp   t t|}t t|}t||gdd}||dk }dd t|D }t |jdddd}	t||	 d S )	Nr   )ZaxisrA   c                 S   s   i | ]\}}|t |qS r#   )r*   array)ry   icolr#   r#   r$   
<dictcomp>U  s      z`TestGetitemBooleanMask.test_getitem_bool_mask_duplicate_columns_mixed_dtypes.<locals>.<dictcomp>r   )rA   r   r)   )r   r*   r   r   	enumeraterenamer-   r7   )
r    Zdata1Zdata2Zexpected_dataZdf1df2r"   r9   Zexdictr8   r#   r#   r$   5test_getitem_bool_mask_duplicate_columns_mixed_dtypes8  s    zLTestGetitemBooleanMask.test_getitem_bool_mask_duplicate_columns_mixed_dtypesc                 C   s,   ddddg}t tddd|dd}|S )	Nr;   rS   D   r   rQ   float64r   r5   )r   r*   r   reshape)r    Zdupsr"   r#   r#   r$   df_dup_colsY  s    z"TestGetitemBooleanMask.df_dup_colsc              	   C   s4   |}d}t jt|d ||jdk  W 5 Q R X d S )Nz/cannot reindex on an axis with duplicate labelsr   rV   )r   r   
ValueErrorr;   )r    r   r"   r[   r#   r#   r$   ;test_getitem_boolean_frame_unaligned_with_duplicate_columns_  s    zRTestGetitemBooleanMask.test_getitem_boolean_frame_unaligned_with_duplicate_columnsc                 C   sj   t tdddddddgdd	}||jd
k }|j|_|}||jd
k }t|| |j t	| d S Nr   r   rQ   r;   rB   rS   r   r   r   rV   )
r   r*   r   r   rS   r   r-   r7   dtypesstrr    r   r"   r8   r9   r#   r#   r$   2test_getitem_boolean_series_with_duplicate_columnsh  s     
 zITestGetitemBooleanMask.test_getitem_boolean_series_with_duplicate_columnsc                 C   sf   t tdddddddgdd	}||d
k }|j|_|}||d
k }t|| |j t| d S r   )	r   r*   r   r   r   r-   r7   r   r   r   r#   r#   r$   1test_getitem_boolean_frame_with_duplicate_columnsx  s     
 zHTestGetitemBooleanMask.test_getitem_boolean_frame_with_duplicate_columnsc                 C   s"   t  }||dk }t|| d S )Nr   )r   r-   r7   )r    r"   r   r#   r#   r$   %test_getitem_empty_frame_with_boolean  s    z<TestGetitemBooleanMask.test_getitem_empty_frame_with_booleanc                 C   s|   t dddgdddggdddgd	}| }|d }d
|jd d < |rJ|}n"t ddd
gddd
ggdddgd	}t|| d S )Nr   rA   r   rQ   r&   rV   rW   rX   r)   d   )r   copyr>   r-   r7   )r    Zusing_copy_on_writer"   Zdf_origviewr8   r#   r#   r$   5test_getitem_returns_view_when_column_is_unique_in_df  s    ""zLTestGetitemBooleanMask.test_getitem_returns_view_when_column_is_unique_in_dfc                 C   sV   t ddddggtdgdddgd}|tdg }tdgtdgd	}t|| d S )
Nr   rA   r   rQ   ZKEYrB   rS   r)   r<   )r   	frozensetr
   r-   r.   rE   r#   r#   r$   'test_getitem_frozenset_unique_in_column  s    $z>TestGetitemBooleanMask.test_getitem_frozenset_unique_in_columnN)rG   rH   rI   r   r   r   r   r*   nanr   Zfixturer   r   r   r   r   r   r   r#   r#   r#   r$   r      s,   A 

	r   c                   @   s   e Zd Zdd Zdd ZdS )TestGetitemSlicec           
      C   s   t ddd}t|}|ddg \}}t jdd}|tk	rL|d d df }|||d	}||| }|jdd
 }	t||	 |j	|| }t||	 d S )Ng      $@g      I@rA   r&         r   r   r|      )
r*   r   r   r+   r,   r   r/   r-   Zassert_equalr>   )
r    Zframe_or_seriesvaluesr   startendr?   objr9   r8   r#   r#   r$   test_getitem_slice_float64  s    z+TestGetitemSlice.test_getitem_slice_float64c              	   C   sF   t dditddddgd}tjtdd	 |d
d  W 5 Q R X d S )NrW   r   z11.01.2011 22:00z11.01.2011 23:00z12.01.2011 00:00z2011-01-13 00:00r|   z,Value based partial slicing on non-monotonicr   z
2011-01-01z
2011-11-01)r   r   r   r   r   rO   r#   r#   r$   test_getitem_datetime_slice  s     z,TestGetitemSlice.test_getitem_datetime_sliceN)rG   rH   rI   r   r   r#   r#   r#   r$   r     s   r   c                   @   s.   e Zd Zejdddhddigdd ZdS )TestGetitemDeprecatedIndexerskeyrW   rX   c              	   C   sH   t ddgddggtddgd}tjtdd	 ||  W 5 Q R X d S )
Nr   rA   r   rQ   )rW   r   )rX   rA   r)   rn   r   )r   r	   from_tuplesr   r   rp   )r    r   r"   r#   r#   r$   $test_getitem_dict_and_set_deprecated  s     zBTestGetitemDeprecatedIndexers.test_getitem_dict_and_set_deprecatedN)rG   rH   rI   r   r   r   r   r#   r#   r#   r$   r     s   r   )rY   Znumpyr*   r   Zpandasr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   Zpandas._testingZ_testingr-   Zpandas.core.arraysr   r   rJ   r   r   r   r   r#   r#   r#   r$   <module>   s   @9  0'