U
    f/e][                     @   sp   d Z ddlZddlZddlm  m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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ejdd Zdd Zdd Ze	j
d	d
dg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
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)d'd,ed*d'd,ed+d'd,gfejd-d&d.d/d0d1ged2ed3ed4gfgd5d6 Ze	j
d7ed%d&d'd(d)d8gfed%d&d'd(d)d8gfejd-d&d.d9d:gfgd;d< Z e	j
d=ed%d&d'd(d/d0gd>fed%d&d'd(d/d0gd>fejd-d&d.d)d*gd?fgd@dA Z!dBdC Z"dDdE Z#dFS )GTestPartialSettingc           	   	   C   s  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 t
tdddddgdd}| }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 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< |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 |d< | }|jd d df |jd d df< t|| 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 )N            r   indexg      @z%iloc cannot enlarge its target objectmatchz/index 3 is out of bounds for axis 0 with size 3   ABint64)columnsdtype)   r   z/index 2 is out of bounds for axis 0 with size 2r   r   r   Cz1/1/2000   )periodsDr   r      T)sortZaxis)r   copytmassert_series_equallocpytestraises
IndexErrorilocZiatr   nparangeZreshapedictassert_frame_equalastypefloat64r   randomZrandnpdconcatfreqat)	selfZs_origsexpectedmsgZdf_origdfdatesZ	exp_other r<   F/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/indexing/test_partial.pytest_partial_setting   s    

  " "     
  z'TestPartialSetting.test_partial_settingc              	   C   sh  t ddgddggddgd}|jd  }d|_||}|jd |jd< t|| t dd	gd}tdtd
d|jd< t|t dd	gdgd 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|| 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dd}t|| d S )NTr
   Fr   ZfemaleZfitnessr   r   r   r   r   r   r   r   r0   )r   r   r   z(cannot set a row with mismatched columnsr   r   r   r   object)r   r   r   )r   r&   r#   nameappendr$   r.   r   rangeZ_consolidater+   nanr'   r(   
ValueError)r6   r:   r7   r8   expr9   r<   r<   r=    test_partial_setting_mixed_dtype   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_typexzM\"None of \[Int64Index\(\[3, 3, 3\], dtype='int64'\)\] are in the \[index\]\"333333?r   皙?r   r   r   r   )r   r+   rE   r'   r(   KeyErrorr&   reindexr$   r%   r*   )r6   serr8   resultr9   r7   r<   r<   r=   test_series_partial_set   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   r   idxr   rB   rI   rJ   r7   )r   rB   z\[3\] not in indexr   r   rK   rM   TrL   z\['x'\] not in indexzY\"None of \[Int64Index\(\[3, 3, 3\], dtype='int64', name='idx'\)\] are in the \[index\]\"rN   r   rO   r   r   r   r   )	r   r   r'   r(   rP   r&   r$   r%   r*   )r6   rU   rR   Zexp_idxr8   rS   r9   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   rV   r"   r   )r$   makeTimeDataFramer#   r*   r&   r   listr   rA   rB   r+   Zconcatenatevaluesr   r   r.   )r6   rX   origr:   Zex_indexZex_datar8   r<   r<   r=   6test_setitem_with_expansion_numeric_into_datetimeindexX  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	t
|j	 dg  |j	jdksztd S )Nr   arB   rA   )r$   rZ   r#   r*   r&   rC   r   r.   assert_index_equalr   r   tolistr   AssertionError)r6   r]   r:   rG   r<   r<   r=   test_partial_set_invalidd  s    z+TestPartialSetting.test_partial_set_invalidc              	   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   r'   r(   rF   r&   r   )r6   r:   r9   r<   r<   r=   test_partial_set_empty_frames  s     z/TestPartialSetting.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 )Nre   rA   r   r@   r   )r   r   r   r$   r.   r   r6   r8   r:   r<   r<   r=   test_partial_set_empty_frame2  s    
z0TestPartialSetting.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 )Nre   r   rg   r@   r0   r   )	r   r   r/   r$   r.   r   r+   r,   lenrh   r<   r<   r=   test_partial_set_empty_frame3  s    z0TestPartialSetting.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 )Nr   rg   r   re   r@   )r   r   rD   rj   r/   r$   r.   r6   r:   r8   r<   r<   r=   test_partial_set_empty_frame4  s
    z0TestPartialSetting.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 )Nrg   r
   re   r   r   )	r   r$   ra   r   r   rA   r   r&   r.   )r6   r:   Zdf2r<   r<   r=   test_partial_set_empty_frame5  s    z0TestPartialSetting.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   rD   Zdtypesstrr$   r.   r&   rh   r<   r<   r=   %test_partial_set_empty_frame_no_index  s    "z8TestPartialSetting.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Newr   rg   r@   r0   r
   r   r   g333333?g@g@r   r   r_   bzc cdr?   rB   r   r   )r   r   r/   r   r+   rE   r$   r.   r%   r   rA   rQ   )r6   r8   r:   yrS   r<   r<   r=    test_partial_set_empty_frame_row  s,    
z3TestPartialSetting.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 )Nrg   r   re   rs   )r   r   rA   r$   r.   rl   r<   r<   r=   'test_partial_set_empty_frame_set_series  s    z:TestPartialSetting.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   r_   r   )r   r#   r$   r.   rl   r<   r<   r=   2test_partial_set_empty_frame_empty_copy_assignment  s
    zETestPartialSetting.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 )NrM   rt   r?   r
   r   )rM   rt   F)Zcheck_dtype12rg   )r   rM   )r   r+   rE   r$   r.   rA   r&   rl   r<   r<   r=   0test_partial_set_empty_frame_empty_consistencies  s    
zCTestPartialSetting.test_partial_set_empty_frame_empty_consistencieszidx,labels,expected_idx2000   r   )startr   r4   z
2000-01-04z
2000-01-08z
2000-01-12)r4   z1 day)r}   r   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   r      )rD   r$   Zassert_equalr&   r   r%   )r6   rU   labelsZexpected_idxZframe_or_seriesobjZexpected_valuer8   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   rK   r   r   rD   r   r'   r(   rP   r&   )r6   rU   r   r7   r:   r9   r<   r<   r=   Btest_loc_with_list_of_strings_representing_datetimes_missing_value8  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   )r6   rU   r   r9   r7   r:   r<   r<   r=   Etest_loc_with_list_of_strings_representing_datetimes_not_matched_typeU  s    !zXTestPartialSetting.test_loc_with_list_of_strings_representing_datetimes_not_matched_typec                 C   s   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|| 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   Zdf_indexr`   r   gGz?r   Zseries_indexseries)r   r2   Z
RangeIndexr   r$   r.   )r6   r:   r   r8   r<   r<   r=   test_index_name_empty  s       z(TestPartialSetting.test_index_name_emptyc                 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)r2   Zto_datetimer   rD   rj   r$   r.   )r6   r   r:   r8   rS   r<   r<   r=   ,test_slice_irregular_datetime_index_with_nan  s
    $z?TestPartialSetting.test_slice_irregular_datetime_index_with_nanN)$__name__
__module____qualname__r>   tdZ&skip_array_manager_not_yet_implementedrH   rT   rW   r'   markZparametrizer^   rd   rf   ri   rk   rm   rn   rp   ru   rv   rw   rz   r   r   r   r   r2   Ztimedelta_rangeZ	Timedeltar   r   r   r   r   r<   r<   r<   r=   r	      s    
([:
			









		
r	   )__doc__Znumpyr+   r'   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr2   r   r   r   r   r   r   r   Zpandas._testingZ_testingr$   r	   r<   r<   r<   r=   <module>   s   $	