U
    sVcC                     @   s   d dl Zd dlZd dlm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 dd ZG dd dZG dd	 d	Zejd
d Zdd Zdd ZdS )    N)SettingWithCopyError)	DataFrame
MultiIndexSeries	Timestamp
date_rangeisnanotnac                 C   s   | |kst d S N)AssertionError)ab r   Q/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/indexing/multiindex/test_setitem.pyassert_equal   s    r   c                   @   s   e Zd ZedfddZdd Zdd Z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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 ),TestMultiIndexSetItemNc                 C   s.   ||j |< |j | }|d kr |}||| d S r
   )loc)selftargetindexersvalue
compare_fnexpectedresultr   r   r   check   s
    

zTestMultiIndexSetItem.checkc                 C   s   ddddddddg}t jtd	d
td	dgddgd}d\}}ttj||d}| j|||fdfd	d td||d}| j|||fdfdd t||d}| j|||fdfdd td||d}| j|||fdftddd d S )NAwlr   xXdZprofitr   d   P   timeZfirmnames)r      columnsindex)r   r   r   i   r&      )r   r   r   r   )r   from_productnparanger   nanr   array)r   colsr)   tndfr   r   r   test_setitem_multiindex    s.     
z-TestMultiIndexSetItem.test_setitem_multiindexc                 C   s   t tdddddtd}d|d< |d d	 d
k}ddg}|d |j||f< t dd
d	dgddgd}t|j||f | | j	|||f|d tj|d d S )N      z	A,B,C,D,E,r(   dtypec   Fr   r&   r   BCg     X@   r)   r(   r   r   r   r   r   )
r   r-   r.   reshapesplitfloatr   tmassert_frame_equalr   )r   r4   Zrow_selectionZcol_selectionoutputr   r   r   test_setitem_multiindex2>   s$      z.TestMultiIndexSetItem.test_setitem_multiindex2c                 C   s  t dddgtddddg}t dd	gtd
dddg}ttjd||d}t dtdfdtdfg}t dtd
fdtdfg}ttjd||d}| j|||f|t	j
d ttjd||d}| j||td d d f|t	j
d | }| j||j|jf|t	j
|d d S )Nr   r=   r>   z
2015-01-01z
2015-04-01ZMS)freqfoobarz
2016-01-01z
2016-02-01)   r?   r@   z
2015-02-01)r&   r&   )r   r   r   r   )r&   r?   rA   )r   r,   r   r   r-   randomfrom_tuplesr   r   rE   rF   slicecopyr)   r(   )r   idxr1   r4   ZsubidxZsubcolsvalsrP   r   r   r   test_setitem_multiindex3Q   sF    
z.TestMultiIndexSetItem.test_setitem_multiindex3c              	   C   s   t ddddddgt ddddddgt dddg}tt jdd	|d
ddgd }|jdg d }| }|jdg  d9  < t	
|jdg | d}tjt|d |jd  d9  < W 5 Q R X d S )NrK   ZbazZquxonetwor      r*   r+   r   r=   r>   r@   r&   zAcannot align on a multi-index with out specifying the join levelsmatch)r-   r0   r.   r   rM   randn
sort_indexr   rP   rE   rF   pytestraises	TypeError)r   arraysdf_origr   r4   msgr   r   r   test_multiindex_setitem~   s       
z-TestMultiIndexSetItem.test_multiindex_setitemc              
   C   s   t ddddddddi}tj|jdd	d
gd|_| }|jdddg  d9  < tj}| }|j	|d d d d df d d f  d9  < t
|| | }|j	|d d d d df df  d9  < t
|| d S )NZpricer&   r?   r*   r7   r   ))DEZCoalStock)rb   Gasrc   )rb   ZElecZDemand)FRrd   rc   )re   ZSolarSupIm)re   ZWindrf   ZSitZComTyper$   r+   rc   )r   	from_dictr   rN   r)   rP   ilocpdZ
IndexSlicer   rE   rF   )r   r_   r   rQ   r4   r   r   r   test_multiindex_setitem2   s0     ,(z.TestMultiIndexSetItem.test_multiindex_setitem2c                 C   s~   t tjjddddddtddddgddd	ggd
}tj|d< tddg}||jd< t	
|jd t|ddgdd d S )Nr7   
   	   sizer+   abcr?      rL   r'   r                  ?)r?   r    )r)   name)r   r-   rM   randintrB   listr/   r0   r   rE   assert_series_equalr   )r   r4   arrr   r   r   test_multiindex_assignment   s    

z0TestMultiIndexSetItem.test_multiindex_assignmentc              	   C   s  t ddg}tt jjddddddtdd	d	d
gd
ddggt jd}|d jd d j	}||j
d< t|d
dgddd}|j
d }t|| |st||j	 |d |j
d< |j
d }|d }t|| d|j
d< tdd
dgddd}t|j
d | d}tjt|d ddddg|j
d< W 5 Q R X tjt|d dg|j
d< W 5 Q R X dg|j
d	dgf< |j
d dk std S )Nrr   rs   r7   rl   rm   rn   r+   rp   r?   rq   rL   )r(   r)   r:   cr&   )r?   rz   int64)r)   rt   r:   g      ?float64z@Must have equal len keys and value when setting with an iterablerW   r   r*   )r-   r0   r   rM   ru   rB   rv   r{   ri   valuesr   r   rE   rw   Zassert_numpy_array_equalr[   r\   
ValueErrorallr   )r   using_copy_on_writerx   r4   viewexpr   r`   r   r   r   'test_multiindex_assignment_single_dtype   s8    



z=TestMultiIndexSetItem.test_multiindex_assignment_single_dtypec           
      C   s   d}d}dd t tt| D }|d d }ttjjd||fdtj|d}|	|
 }|j|d d d	}tj|d
< |D ]&\}}t|jd }	|	|j|d
f< qd S )Nr!   rl   c                 S   s   g | ]}d | qS )r   r   ).0numr   r   r   
<listcomp>   s     z>TestMultiIndexSetItem.test_groupby_example.<locals>.<listcomp>r7   rn   )r:   r(   r?   )levelZnew_colr   )mapstrr-   r.   tolistr   rM   ru   r{   	set_indexrZ   groupbyr/   shaper   )
r   ZNUM_ROWSZNUM_COLSZ	col_namesZ
index_colsr4   grprt   Zdf2new_valsr   r   r   test_groupby_example   s    
z*TestMultiIndexSetItem.test_groupby_examplec              	   C   s   |}|d }t j|d< t|jdd  s0tt|jd d  sJtt|jdd   sdtt j|d< t|jd sttj	t
dd |d  W 5 Q R X d S )	Nr   )  r+   *   A   )r   r+   rl   1   Z49rW   )r-   r/   r   r}   r   r   r	   ri   r[   r\   KeyError)r   /multiindex_year_month_day_dataframe_random_dataymdsr   r   r   test_series_setitem  s    

z)TestMultiIndexSetItem.test_series_setitemc              	   C   s   |}|j  }|j}||dk }||dk}t|| d||dk< d||dk< t|j| d||dk< d||dk< t|j| d||d d dk < t|d d |d d dk d t|j| t	j
tdd d||d < W 5 Q R X d S )Nr   r7   r&   zboolean values onlyrW   )TrP   r}   whererE   rF   Zassert_almost_equalr-   Zputmaskr[   r\   r]   )r    multiindex_dataframe_random_dataframer4   r}   r   r   r   r   r   "test_frame_getitem_setitem_boolean  s"    
"z8TestMultiIndexSetItem.test_frame_getitem_setitem_booleanc                 C   s  ddgdddgg}dddddgdddddgg}t ||d d	gd
}tddddddgi|d}|jd d df }t|d | |j|jdd df }t|d dd | |jd d d d f }t|| |}d|jd d df< d|d< t|| d|jd d d d f< t|| d S )Nt1t2r   r   rz   r   r*   r&   id)codeslevelsr%   r   r+      rq   r)   rl   )r   r   r   rE   rw   r)   rF   )r   r   r   Zmidxr4   r   r   r   r   %test_frame_getitem_setitem_multislice5  s     z;TestMultiIndexSetItem.test_frame_getitem_setitem_multislicec                 C   s   t tjddddddgddddggd}| }|d |d< t|d |d  | }|d j|d< t|d |d  d S )Nrl   r?   r   r   r   r*   r(   )r   r-   rM   rY   rP   rE   rF   r}   )r   r4   cpr   r   r   test_frame_setitem_multi_columnL  s     z5TestMultiIndexSetItem.test_frame_setitem_multi_columnc                 C   s   t dddg}tdddg|d}d|d	< |d	 jd
k s@tdddg|d< |d |d	< |d }|d }|d }tj||dd tj||dd |jdkst|jdkst|jdkstd S )Nr   1r   2r=   r   r*   r+   r7   r@   rr   r   r   r&   F)Zcheck_names)	r   rN   r   r}   r   r   rE   rw   rt   )r   r(   r4   Z	sliced_a1Z	sliced_a2Z	sliced_b1r   r   r    test_frame_setitem_multi_column2Z  s    z6TestMultiIndexSetItem.test_frame_setitem_multi_column2c                 C   sH   |}|d d }|j ddddgf }|j d dddg }t|| d S )Nr7   )r   r*   rV   r   r=   r>   )r   rE   rw   )r   r   r   r4   r   r   r   r   r   #test_loc_getitem_tuple_plus_columnsr  s
    z9TestMultiIndexSetItem.test_loc_getitem_tuple_plus_columnsc              	   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t|d|dddd	gd
}t||}|jdd }|	|j
dd  }t|| d|jdd< |jdd dkj std S )Nr   r*   r&   )r   r   r?   r   r   rz   r    r@   r   )r   r   r-   rM   rY   lenrE   get_objr   reindexr)   r   r}   r   r   )r   Zframe_or_seriesr)   objresr   r   r   r   'test_loc_getitem_setitem_slice_integers}  s       
z=TestMultiIndexSetItem.test_loc_getitem_setitem_slice_integersc                 C   sd   |}|j }|d }|| k|d< t|d || k |jdgd}t|d || k d S )N)rJ   rU   r   )r   ZmedianrE   rw   r   )r   r   r   Zdftr   Z	reindexedr   r   r   test_setitem_change_dtype  s    z/TestMultiIndexSetItem.test_setitem_change_dtypec                 C   s~   |}|j dddg }d|j|< |j| jdk s6t| }|d }d||< |r`t|| n|j|df dk sztd S )Nr*   r?   r7   r;   r=   a   )r)   r   r}   r   r   rP   rE   rF   )r   r   r   r   ZsubsetZframe_originalcolr   r   r   test_set_column_scalar_with_loc  s    
z5TestMultiIndexSetItem.test_set_column_scalar_with_locc                 C   st   t ddddgddddgddddggtd	d
}|ddg}tdg}d|j|df< |dd dk sptd S )Nr*   r   r   yYr&   zZABCDr   r   r=   r*   r*   _r>   )	r   rv   r   r   rN   r   xsr   r   )r   r4   mir   r   r   test_nonunique_assignment_1750  s      z4TestMultiIndexSetItem.test_nonunique_assignment_1750c                 C   sZ   t dddg}ttdd|td}|j }|d 	tj
|d< t|j| d S )Nr   r   r   r+   )r*   r+   r9   r   )r   rN   r   r-   r.   rB   objectr)   rP   Zastyper|   rE   Zassert_index_equal)r   r1   r4   r)   r   r   r    test_astype_assignment_with_dups  s
    
z6TestMultiIndexSetItem.test_astype_assignment_with_dupsc                 C   sj   t jdddgddgd}tddd	g|d
gd}tjdddd|jd< td
dddgi|d}t|| d S )N)r   rz   )r   r   )r   r    l1l2r$   r   r*   r&   e)datar)   r(   r;   e   r{   )r:   )r   r   r!   r   )r   rN   r   r-   r.   r   rE   rF   )r   r)   r4   r   r   r   r   test_setitem_nonmonotonic  s     z/TestMultiIndexSetItem.test_setitem_nonmonotonic)__name__
__module____qualname__r   r   r5   rH   rS   tdZ&skip_array_manager_not_yet_implementedra   rk   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s,   -
 /r   c                   @   s   e Zd Zdd Zdd ZdS )"TestSetitemWithExpansionMultiIndexc                 C   s   ddddddgddddddgdd	d
dddgg}t t| }t|}ttjdd|d}| }| }ddddg|d< ddddg|d< t	
|| d S )Nr   topZroutine1Zroutine2 ZODZresult1Zresult2ZwxZwyr?   rV   r   r*   r&   r+   r   )r   r   r   )sortedzipr   rN   r   r-   rM   rY   rP   rE   rF   )r   r^   Ztuplesr)   r4   r   r   r   r   r   #test_setitem_new_column_mixed_depth  s    
zFTestSetitemWithExpansionMultiIndex.test_setitem_new_column_mixed_depthc                 C   s\   t dddg}tddgddgdd	gg|d
}tddd}||d< |d   sXtd S )N)1aZ2a)r   Z2b)r   Z2cr*   r&   r+   r?   r7   rV   r   )r   )r*   r&   new)r   rN   r   r   r   r   r   )r   Zmixr4   r   r   r   r   test_setitem_new_column_all_na  s
    zATestSetitemWithExpansionMultiIndex.test_setitem_new_column_all_naN)r   r   r   r   r   r   r   r   r   r     s   r   c                 C   s2   | j }d|d jd d < |d jdk s.td S )Nr   rJ   )r   r}   r   r   )r   r4   r   r   r   test_frame_setitem_view_direct  s    r   c              	   C   sF   | j }|rd|d d< n*d}tjt|d d|d d< W 5 Q R X d S Nr&   rJ   rT   zAA value is trying to be set on a copy of a slice from a DataFramerW   )r   r[   r\   r   )r   r   r4   r`   r   r   r   test_frame_setitem_copy_raises  s    r   c              	   C   sb   | j }|}| }|r$d|d d< n*d}tjt|d d|d d< W 5 Q R X |}t|| d S r   )r   rP   r[   r\   r   rE   rF   )r   r   r   r   r4   r`   r   r   r   r    test_frame_setitem_copy_no_write   s    r   )Znumpyr-   r[   Zpandas.errorsr   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasrj   r   r   r   r   r   r   r	   Zpandas._testingZ_testingrE   r   r   r   Zskip_array_manager_invalid_testr   r   r   r   r   r   r   <module>   s    $	   8
