U
    sVc\                     @   sz   d Z 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 ddlmZ G dd dZG dd dZG dd	 d	ZdS )
zx
test setting *parts* of objects both positionally and label based

TODO: these should be split among the indexer tests
    N)	DataFrameIndexPeriodSeries	Timestamp
date_rangeperiod_rangec                   @   s|   e 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dd ZdS )TestEmptyFrameSetitemExpansionc                 C   sd   t i tjdddd}tdtjdddd}||d< t ddgd itjdddd}t|| d S )	Nr   Zdf_indexnameindexGz?   series_indexseries)r   pd
RangeIndexr   tmassert_frame_equalselfdfr   expected r   F/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/indexing/test_partial.py,test_empty_frame_setitem_index_name_retained   s     zKTestEmptyFrameSetitemExpansion.test_empty_frame_setitem_index_name_retainedc                 C   sT   t  }tdtjdddd}||d< t ddgd itjdddd}t|| d S )Nr   r   r   r
   r   r   )r   r   r   r   r   r   r   r   r   r   -test_empty_frame_setitem_index_name_inherited$   s     zLTestEmptyFrameSetitemExpansion.test_empty_frame_setitem_index_name_inheritedc                 C   s   t ddgd}tdtdd|jd< t ddgdgtjd}t|| t ddgd}tddgd|jd< t tjdggddgdgd	d}t|| d S )
NABcolumns   r   r   r   )r!   r   dtypefloat64)	r   r   rangelocnpr$   r   r   nan)r   r   r   expr   r   r   -test_loc_setitem_zerolen_series_columns_align.   s    zLTestEmptyFrameSetitemExpansion.test_loc_setitem_zerolen_series_columns_alignc              	   C   s   t ddgd}d}tjt|d dddg|jd	< W 5 Q R X t ddgd}d
dg|jd< t d
dggdgddgtjd}t|| d S )Nr   r   r    z(cannot set a row with mismatched columnsmatchr"         r         )r   r!   r#   )	r   pytestraises
ValueErrorr&   r'   int64r   r   )r   r   msgr)   r   r   r   7test_loc_setitem_zerolen_list_length_must_match_columns<   s    zVTestEmptyFrameSetitemExpansion.test_loc_setitem_zerolen_list_length_must_match_columnsc              	   C   s   t  }d}tjt|d d|jd< W 5 Q R X tjt|d tdgdgd|jd< W 5 Q R X d}tjt|d d|jd d df< W 5 Q R X d S )Nz*cannot set a frame with no defined columnsr+   r"   foor   z5cannot set a frame with no defined index and a scalar)r   r1   r2   r3   r&   r   )r   r   r5   r   r   r   test_partial_set_empty_frameJ   s     z;TestEmptyFrameSetitemExpansion.test_partial_set_empty_framec                 C   s   t dgtg ddd}t tg ddd}tg dd|d< t|| t  }t|j|d< t|| t  }|j|d< t|| d S )Nr7   objectr#   r!   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   test_partial_set_empty_frame2\   s    
z<TestEmptyFrameSetitemExpansion.test_partial_set_empty_frame2c                 C   s   t dgtg ddd}|d d|d< t tg ddd}g |d< t|| t tg ddd}ttt|dd|d< t|| d S )Nr7   r4   r:   r;   r$   r   )	r   r   astyper   r   r   r'   arangelenr<   r   r   r   test_partial_set_empty_frame3q   s    z<TestEmptyFrameSetitemExpansion.test_partial_set_empty_frame3c                 C   sZ   t tg ddd}tt||d< t dgtg ddd}|d d|d< t|| d S )Nr4   r:   r   r7   r;   )r   r   r%   r@   r>   r   r   r   r   r   r   r   r   test_partial_set_empty_frame4   s
    z<TestEmptyFrameSetitemExpansion.test_partial_set_empty_frame4c                 C   s   t  }t|jtg td t  }tdgdgd|d< tdgdgd|jd d df< t|t dggdgdgd t|| d S )Nr:   r"   r7   r   r   r!   )	r   r   assert_index_equalr!   r   r9   r   r&   r   )r   r   Zdf2r   r   r   test_partial_set_empty_frame5   s    z<TestEmptyFrameSetitemExpansion.test_partial_set_empty_frame5c                 C   s   t dtdtddidddgd}t ddgd}tdtdd|d< |j t| t|| t ddgd}tdtdd|jd d df< |j t| t|| d S )Nr   r"   r   r   r   r   r    )r   r   r%   Zdtypesstrr   r   r&   r<   r   r   r   %test_partial_set_empty_frame_no_index   s    "zDTestEmptyFrameSetitemExpansion.test_partial_set_empty_frame_no_indexc                 C   s  t dddgtg ddd}|d d|d< |d d|d< |d d|d< t dd	d
gdddgd}||jdk }tj|d< t|| t ddddgd}|d d|d< t dddgd}d
|d< t|| t|d t	dt
d t dd	d
gdddgd}||jdk }|jdddgd}t dddgtg ddd}|d d|d< |d d|d< |d d|d< t|| d S )Nr   r   ZNewr4   r:   r;   r$   r"   r-   r.   g333333?g@g@r   r      abzc cdr    r   r#   C)r   r   r>   r   r'   r(   r   r   assert_series_equalr   r9   reindex)r   r   r   yresultr   r   r    test_partial_set_empty_frame_row   s,    
z?TestEmptyFrameSetitemExpansion.test_partial_set_empty_frame_rowc                 C   s^   t ttd}t dttdi}t|| t tdtd}t dttdi}t|| d S )Nr:   r   r7   rN   )r   r   r9   r   r   rB   r   r   r   'test_partial_set_empty_frame_set_series   s    zFTestEmptyFrameSetitemExpansion.test_partial_set_empty_frame_set_seriesc                 C   s>   t dgd}| }d|d< t ddgdgd}t|| d S )Nr   r   rK   rD   )r   copyr   r   rB   r   r   r   2test_partial_set_empty_frame_empty_copy_assignment   s
    zQTestEmptyFrameSetitemExpansion.test_partial_set_empty_frame_empty_copy_assignmentc                 C   s   t ddgd}ddg|d< t ddgtjtjgd}tj||dd t ddgd}d	d
g|d< t d	d
gtjtjgdtd}t|| t ddgd}d|jd< t dgtjgd}tj||dd d S )NxrR   r    r"   r-   )rX   rR   F)Zcheck_dtype12r:   )r   rX   )r   r'   r(   r   r   r9   r&   rB   r   r   r   0test_partial_set_empty_frame_empty_consistencies   s    
zOTestEmptyFrameSetitemExpansion.test_partial_set_empty_frame_empty_consistenciesN)__name__
__module____qualname__r   r   r*   r6   r8   r=   rA   rC   rF   rH   rT   rU   rW   r[   r   r   r   r   r	      s   
			r	   c                   @   s  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d Zdd Ze	j
dedddddddgedddedddedddgfedddddddgedededgfejddddd d!ged"ed#ed$gfgd%d& Ze	j
d'edddddd(gfedddddd(gfejdddd)d*gfgd+d, Ze	j
d-edddddd gd.fedddddd gd.fejdddddgd/fgd0d1 Zd2S )3TestPartialSettingc              	   C   sN  t dddg}| }d|d< t ddddgddddgd}t|| | }d|jd< t ddddgddddgd}t|| | }d|d< t ddddgddddgd}t|| | }d|jd< t ddddgddddgd}t|| | }d}tjt|d	 d|jd< W 5 Q R X d
}tjt|d	 d|j	d< W 5 Q R X d S )Nr"   r-   r.   rJ   r   r         @%iloc cannot enlarge its target objectr+   z/index 3 is out of bounds for axis 0 with size 3)
r   rV   r   rP   r&   r1   r2   
IndexErrorilociat)r   Zs_origsr   r5   r   r   r   test_partial_setting   s0    

z'TestPartialSetting.test_partial_settingc              	   C   s  t tdddddgdd}| }d}tjt|d	 d
|jd< W 5 Q R X d}|r\d}tjt|d	 d
|j	d< W 5 Q R X t t
dddgdddgd}| }|jd |jd< t|| t t
dddgdddgd}| }|jd |jd< t|| t t
ddddgddddgd}| }|jd |jd< t|| t t
dddgdddgd}| }|jd d df |jd d df< t|| t t
dddgtdddgd}| }|d tj|d< d}tjt|d	& |jd d df |jd d df< W 5 Q R X t|| | }|d |d< | }|jd d df |jd d df< t|| | }|d |d< | }|jd d df |jd d df< t|| d S )Nr/   r.   r-   r   r   r4   )r!   r#   ra   r+   r`   )r   r-   z/index 2 is out of bounds for axis 0 with size 2zlist index out of ranger   r   r"   rJ   rI   z.will attempt to set the values inplace insteadrO   )r   r'   r?   ZreshaperV   r1   r2   rb   rc   rd   dictr   r   r&   r   r>   r$   Zassert_produces_warningDeprecationWarning)r   Zusing_array_managerdf_origr   r5   r   r   r   r   test_partial_setting_frame  s^      " "*  z-TestPartialSetting.test_partial_setting_framec                 C   s<  t ddd}ttjdd|ddddgd	}tj|tdd
i|dd  |j dgdd}| }d
|j	|d |j df< t
|| | }d
|j|d |j df< t
|| tdd
i|dd  |j d}tj||gdd}| }d
|j	|d |j df< t
|| | }d
|j|d |j df< t
|| d S )Nz1/1/2000   )periodsr   r   r   rO   DrD   r0   r   T)sortr   r"   Zaxis)r   r   r'   randomZrandnr   concatfreqrV   r&   r   r   at)r   datesri   r   r   Z	exp_otherr   r   r   test_partial_setting2M  s0      
  z(TestPartialSetting.test_partial_setting2c                 C   sh   t ddgddggddgd}|jd  }d|_t|t |j g}|jd |jd< t	|| d S )NTr"   Fr-   ZfemaleZfitnessr    )
r   r&   rV   r   r   rr   Tinfer_objectsr   r   )r   r   re   r   r   r   r    test_partial_setting_mixed_dtypeh  s    z3TestPartialSetting.test_partial_setting_mixed_dtypec              	   C   s  t ddgddgd}t tjdtjgdddgd}tjtdd |jdddg  W 5 Q R X |dddg}tj	||d	d
 t tjdtjtjgddddgd}tjtdd |jddddg  W 5 Q R X |ddddg}tj	||d	d
 t dddgdddgd}|jdddg }tj	||d	d
 t ddtjdgddddgd}tjtdd |jddddg  W 5 Q R X |ddddg}tj	||d	d
 d}tjt|d |jdddg  W 5 Q R X t ddtjgdddgd}tjtdd |jdddg  W 5 Q R X |dddg}tj	||d	d
 t dddgdddgd}t dtjtjgdddgd}tjtdd |jdddg  W 5 Q R X |dddg}tj	||d	d
 t ddddgddddgd}t tjddgdddgd}tjtdd |jdddg  W 5 Q R X |dddg}tj	||d	d
 t ddddgddddgd}t tjddgdddgd}tjtdd |jdddg  W 5 Q R X |dddg}tj	||d	d
 t ddddgddddgd}t dtjtjgdddgd}tjtdd |jdddg  W 5 Q R X |dddg}tj	||d	d
 t ddddgddddgd}t dtjtjgdddgd}tjtdd |jdddg  W 5 Q R X |dddg}tj	||d	d
 t ddddgddddgd}|j
ddddg }tj	||d	d
 d S )N皙?皙?r"   r-   r   r.   not in indexr+   TZcheck_index_typerX   zM\"None of \[Int64Index\(\[3, 3, 3\], dtype='int64'\)\] are in the \[index\]\"333333?r   皙?rJ   r/   r0   r   )r   r'   r(   r1   r2   KeyErrorr&   rQ   r   rP   rc   )r   serr   rS   r5   re   r   r   r   test_series_partial_setu  sz    "z*TestPartialSetting.test_series_partial_setc              	   C   s.  t ddgddd}tddg|dd	}tjtd
d |jdddg  W 5 Q R X tjtdd |jddddg  W 5 Q R X t dddgddd}tdddg|dd	}|jdddg }tj||dd tjtdd |jddddg  W 5 Q R X d}tjt|d |jdddg  W 5 Q R X tjtdd |jdddg  W 5 Q R X t dddgddd}tjtdd& tdddg|dd	jdddg  W 5 Q R X t ddddgddd}tjtdd( tddddg|dd	jdddg  W 5 Q R X t ddddgddd}tjtdd( tddddg|dd	jdddg  W 5 Q R X t ddddgddd}tjtdd( tddddg|dd	jdddg  W 5 Q R X t ddddgddd}tjtdd( tddddg|dd	jdddg  W 5 Q R X t ddddgddd}tddddg|dd	}|jddddg }tj||dd d S )Nr"   r-   r4   idxr#   r   rz   r{   re   )r   r   z\[3\] not in indexr+   r.   r|   rX   Tr}   z\['x'\] not in indexzY\"None of \[Int64Index\(\[3, 3, 3\], dtype='int64', name='idx'\)\] are in the \[index\]\"r~   r   r   rJ   r/   r0   r   )	r   r   r1   r2   r   r&   r   rP   rc   )r   r   r   Zexp_idxr   rS   r5   r   r   r   !test_series_partial_set_with_name  sJ    *,,,,z4TestPartialSetting.test_series_partial_set_with_namekeyd   g      Y@c                 C   s   t  }| }|jd |j|d d f< tt|j|g t|jj	d}t
j|j|jdg jgdd}t|||jd}t || d S )Nr   r   rp   rD   )r   makeTimeDataFramerV   rc   r&   r   listr   r9   r   r'   Zconcatenatevaluesr   r!   r   )r   r   origr   Zex_indexZex_datar   r   r   r   6test_setitem_with_expansion_numeric_into_datetimeindex
  s    zITestPartialSetting.test_setitem_with_expansion_numeric_into_datetimeindexc                 C   s   t  }| }|jd |jdd d f< t|jd dd}t|t|j	
 g}t || t |jt|j dg  |jjdkstd S )Nr   rK   r
   r9   )r   r   rV   rc   r&   r   r   rr   r   rw   rx   r   rE   r   r   tolistr#   AssertionError)r   r   r   r   r)   r   r   r   test_partial_set_invalid  s    z+TestPartialSetting.test_partial_set_invalidzidx,labels,expected_idx2000   rm   )startrl   rs   z
2000-01-04z
2000-01-08z
2000-01-12)rs   z1 day)r   rl   Z4DZ8DZ12Dz4 dayz8 dayz12 dayc                 C   sR   |t d|d}dddg}|||}t||j|  |tkrNt|||  d S )Nr   r   r.   r0      )r%   r   Zassert_equalr&   r   rP   )r   r   labelsZexpected_idxZframe_or_seriesobjZexpected_valuer   r   r   r   4test_loc_with_list_of_strings_representing_datetimes'  s     

zGTestPartialSetting.test_loc_with_list_of_strings_representing_datetimesz
idx,labelsz
2000-01-30z3 dayz30 dayc              	   C   s   t td|d}ttd|d}d}tjt|d |j|  W 5 Q R X tjt|d ||  W 5 Q R X tjt|d |j|  W 5 Q R X d S )Nr   r   r|   r+   r   r%   r   r1   r2   r   r&   )r   r   r   r   r   r5   r   r   r   Btest_loc_with_list_of_strings_representing_datetimes_missing_valueP  s    zUTestPartialSetting.test_loc_with_list_of_strings_representing_datetimes_missing_valuezidx,labels,msgzHNone of \[Index\(\['4D', '8D'\], dtype='object'\)\] are in the \[index\]zXNone of \[Index\(\['2000-01-04', '2000-01-08'\], dtype='object'\)\] are in the \[index\]c              	   C   s   t td|d}ttd|d}tjt|d |j|  W 5 Q R X tjt|d ||  W 5 Q R X tjt|d |j|  W 5 Q R X d S )Nr   r   r+   r   )r   r   r   r5   r   r   r   r   r   Etest_loc_with_list_of_strings_representing_datetimes_not_matched_typem  s    !zXTestPartialSetting.test_loc_with_list_of_strings_representing_datetimes_not_matched_typeN)r\   r]   r^   rf   rj   rv   ry   r   r   r1   markZparametrizer   r   r   r   r   r   r   Ztimedelta_rangeZ	Timedeltar   r   r   r   r   r   r   r_      sz   &@[:







		r_   c                   @   s   e Zd Zdd ZdS )TestStringSlicingc                 C   sf   t dddd g}ttt||d}ttt|d d |d d d}|dd }t|| d S )Nz
2012-01-01z
2012-01-02z
2012-01-03r   r.   z
2012-01-04)r   Zto_datetimer   r%   r@   r   r   )r   r   r   r   rS   r   r   r   ,test_slice_irregular_datetime_index_with_nan  s
    $z>TestStringSlicing.test_slice_irregular_datetime_index_with_nanN)r\   r]   r^   r   r   r   r   r   r     s   r   )__doc__Znumpyr'   r1   Zpandasr   r   r   r   r   r   r   r   Zpandas._testingZ_testingr   r	   r_   r   r   r   r   r   <module>   s   $	 P   6