a
    GGbB                     @   s   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 d dlm  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)	DataFrame
MultiIndexSeries	Timestamp
date_rangeisnanotnac                 C   s   | |ksJ d S N )abr
   r
   Llib/python3.9/site-packages/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 u r |}||| d S r	   )loc)selftargetindexersvalue
compare_fnexpectedresultr
   r
   r   check   s
    

zTestMultiIndexSetItem.checkc                 C   s   g d}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indexr   )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g d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   r+   r,   reshapesplitfloatr   tmassert_frame_equalr   )r   r2   Zrow_selectionZcol_selectionoutputr
   r
   r   test_setitem_multiindex2>   s     z.TestMultiIndexSetItem.test_setitem_multiindex2c                 C   s  t g d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 )Nr   r;   r<   z
2015-01-01z
2015-04-01ZMS)Zfreqfoobarz
2016-01-01z
2016-02-01)   r=   r>   r   z
2015-02-01)r$   r$   )r   r   r   r   )r$   r=   r?   )r   r*   r   r   r+   randomfrom_tuplesr   r   rC   rD   slicecopyr'   r&   )r   idxr/   r2   ZsubidxZsubcolsZvalsrN   r
   r
   r   test_setitem_multiindex3Q   sF    
z.TestMultiIndexSetItem.test_setitem_multiindex3c                 C   s   t g dt g dt dddg}tt jdd|g dd }|jd	g d
 }| }|jd	g  d
9  < t	
|jd	g | d}tjt|d" |jd	  d
9  < W d    n1 s0    Y  d S )N)rI   rI   ZbazquxrQ   rI   )onetworR   rR   rS   rR   r      r(   r)   rG   r>   rI   r$   zAcannot align on a multi-index with out specifying the join levelsmatch)r+   r.   r,   r   rK   randn
sort_indexr   rN   rC   rD   pytestraises	TypeError)r   arraysdf_origr   r2   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g dd	|_| }|jg d
  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(   r5   r   ))DEZCoalStock)r`   Gasra   )r`   ZElecZDemand)FRrb   ra   )rc   ZSolarSupIm)rc   ZWindrd   )ZSitZComTyper"   )r   r$   r)   ra   )r   Z	from_dictr   rL   r'   rN   ilocpdZ
IndexSlicer   rC   rD   )r   r]   r   rO   r2   r
   r
   r   test_multiindex_setitem2   s.    
,(z.TestMultiIndexSetItem.test_multiindex_setitem2c                 C   sz   t tjjddddddtdg dg dgd	}tj|d
< tddg}||jd< t	
|jd t|ddgd
d d S )Nr5   
   	   sizer)   abcr=   r=      ro   ri   rJ   r%   r                 ?)r=   r   ro   )r'   name)r   r+   rK   randintr@   listr-   r.   r   rC   assert_series_equalr   )r   r2   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g d	g d
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 g d|j
d< W d    n1 s40    Y  tjt|d dg|j
d< W d    n1 sp0    Y  dg|j
ddgf< |j
d dk sJ d S )Nrq   rr   r5   ri   rj   rk   r)   rm   rn   rp   )r&   r'   r8   cr$   )r=   ry   ro   int64)r'   rs   r8   g      ?float64z@Must have equal len keys and value when setting with an iterablerU   )r   r(   r$   r)   r   r=   )r+   r.   r   rK   rt   r@   ru   rz   rf   valuesr   r   rC   rv   Zassert_numpy_array_equalrY   rZ   
ValueErrorall)r   Zusing_array_managerrw   r2   Z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   ri   c                 S   s   g | ]}d | qS )r   r
   ).0Znumr
   r
   r   
<listcomp>       z>TestMultiIndexSetItem.test_groupby_example.<locals>.<listcomp>r5   rk   )r8   r&   r=   )levelZnew_colr   )mapstrr+   r,   tolistr   rK   rt   rz   	set_indexrX   groupbyr-   shaper   )
r   ZNUM_ROWSZNUM_COLSZ	col_namesZ
index_colsr2   Zgrprs   Zdf2Znew_valsr
   r
   r   test_groupby_example   s    
z*TestMultiIndexSetItem.test_groupby_examplec                 C   s   |}|d }t j|d< t|jdd  s0J t|jd d  sJJ t|jdd   sdJ t j|d< t|jd sJ tjt	dd |d  W d    n1 s0    Y  d S )	Nr   )  r)   *   A   )r   r)   ri   1   Z49rU   )
r+   r-   r   r|   r~   r   rf   rY   rZ   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 d    n1 s0    Y  d S )Nr   r5   r$   zboolean values onlyrU   )TrN   r|   whererC   rD   Zassert_almost_equalr+   ZputmaskrY   rZ   r[   )r    multiindex_dataframe_random_dataframer2   r|   r   r   r
   r
   r   "test_frame_getitem_setitem_boolean  s"    
"z8TestMultiIndexSetItem.test_frame_getitem_setitem_booleanc                 C   s
  ddgg dg}g dg dg}t ||d dgd}tdg d	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t2)r   r   ry   )r   r   r   r(   r(   )r   r(   r$   r   r(   id)codeslevelsr#   r   )r(   r$   r)      ro   r'   r(   r)   ri   )r   r   r   rC   rv   r'   rD   )r   r   r   Zmidxr2   r   r
   r
   r   %test_frame_getitem_setitem_multislice6  s     z;TestMultiIndexSetItem.test_frame_getitem_setitem_multislicec                 C   sx   t tjddg dg dgd}| }|d |d< t|d |d  | }|d j|d< t|d |d  d S )Nri   r=   )r   r   r   r   )r   r(   r   r(   r&   r   r   )r   r+   rK   rW   rN   rC   rD   r|   )r   r2   Zcpr
   r
   r   test_frame_setitem_multi_columnM  s    z5TestMultiIndexSetItem.test_frame_setitem_multi_columnc                 C   s   t g d}tg d|d}d|d< |d jdk s<J g d|d< |d |d< |d	 }|d
 }|d }tj||dd tj||dd |jd	ksJ |jd
ksJ |jdksJ d S )N)r   1r   2r;   r   )r(   r)   r5   r>   rq   r   r   )r(   r$   r)   r   r   r   F)Zcheck_names)r   rL   r   r|   r~   rC   rv   rs   )r   r&   r2   Z	sliced_a1Z	sliced_a2Z	sliced_b1r
   r
   r    test_frame_setitem_multi_column2[  s    z6TestMultiIndexSetItem.test_frame_setitem_multi_column2c                 C   sD   |}|d d }|j dg df }|j d g d }t|| d S )Nr5   )r   r(   rT   rG   )r   rC   rv   )r   r   r   r2   r   r   r
   r
   r   #test_loc_getitem_tuple_plus_columnss  s
    z9TestMultiIndexSetItem.test_loc_getitem_tuple_plus_columnsc                 C   s   t g dddggg dg dgd}ttjt|d|g dd	}t||}|jd
d }|	|j
dd  }t|| d|jd
d< |jd
d dkj sJ d S )Nr   r(   r$   r   r$   )r   r   r(   r(   r$   r$   )r   r(   r   r(   r   r(   )r   r   r=   )r   r   ry   r   r>   r(   r   )r   r   r+   rK   rW   lenrC   Zget_objr   reindexr'   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)rH   rS   r   )r   ZmedianrC   rv   r   )r   r   r   Zdftr   Z	reindexedr
   r
   r   test_setitem_change_dtype  s    z/TestMultiIndexSetItem.test_setitem_change_dtypec                 C   sb   |}|j g d }d|j|< |j| jdk s4J |d }d||< |j|df dk s^J d S )N)r(   r=   r5   r9   r;   a   )r'   r   r|   r~   )r   r   r   Zsubsetcolr
   r
   r   test_set_column_scalar_with_loc  s    
z5TestMultiIndexSetItem.test_set_column_scalar_with_locc                 C   sh   t g dg dg dgtdd}|ddg}tdg}d	|j|d
f< |dd
 d	k sdJ d S )N)r(   r(   r   r   )r(   r(   yY)r(   r$   zZZABCDr   r   r;   r(   r(   _r<   )r   ru   r   r   rL   r   Zxsr~   )r   r2   mir
   r
   r   test_nonunique_assignment_1750  s    z4TestMultiIndexSetItem.test_nonunique_assignment_1750c                 C   sX   t g d}ttdd|td}|j }|d 	tj
|d< t|j| d S )N)r   r   r   r)   )r(   r)   r7   r   )r   rL   r   r+   r,   r@   objectr'   rN   Zastyper{   rC   Zassert_index_equal)r   r/   r2   r'   r
   r
   r    test_astype_assignment_with_dups  s
    
z6TestMultiIndexSetItem.test_astype_assignment_with_dupsc                 C   sd   t jg dddgd}tg d|dgd}tjdd	d
d|jd< tdg di|d}t|| d S )N))r   ry   )r   r   )r   r   l1l2r"   r   e)datar'   r&   r9   e   rz   )r8   )r   r   )r9   r(   r   r   )r   rL   r   r+   r,   r   rC   rD   )r   r'   r2   r   r
   r
   r   test_setitem_nonmonotonic  s    z/TestMultiIndexSetItem.test_setitem_nonmonotonic)__name__
__module____qualname__r   r   r3   rF   rP   tdZ&skip_array_manager_not_yet_implementedr_   rh   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r
   r
   r   r      s,   -
 0r   c                   @   s   e Zd Zdd Zdd ZdS )"TestSetitemWithExpansionMultiIndexc                 C   sz   g dg dg dg}t t| }t|}ttjdd|d}| }| }g d|d< g d|d	< t	
|| d S )
N)r   topr   routine1r   Zroutine2) ODr   result1Zresult2r   )r   ZwxZwyr   r   r   r=   rT   r   )r(   r$   r)   r=   r   )r   r   r   )sortedzipr   rL   r   r+   rK   rW   rN   rC   rD   )r   r\   Ztuplesr'   r2   r   r   r
   r
   r   #test_setitem_new_column_mixed_depth  s    
zFTestSetitemWithExpansionMultiIndex.test_setitem_new_column_mixed_depthc                 C   sZ   t g d}tddgddgddgg|d}tddd	}||d
< |d
   sVJ d S )N))1aZ2a)r   Z2b)r   Z2cr(   r$   r)   r=   r5   rT   r   )r   )r(   r$   new)r   rL   r   r   r   r~   )r   Zmixr2   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.J d S )Nr   rH   )r   r|   r~   )r   r2   r
   r
   r   test_frame_setitem_view_direct  s    r   c                 C   sJ   | j }d}tjtj|d d|d d< W d    n1 s<0    Y  d S NzAA value is trying to be set on a copy of a slice from a DataFramerU   r$   rH   rR   )r   rY   rZ   comSettingWithCopyError)r   r2   r^   r
   r
   r   test_frame_setitem_copy_raises  s    r   c                 C   sf   | j }|}| }d}tjtj|d d|d d< W d    n1 sH0    Y  |}t|| d S r   )r   rN   rY   rZ   r   r   rC   rD   )r   r   r   r2   r^   r   r
   r
   r    test_frame_setitem_copy_no_write  s    *r   )Znumpyr+   rY   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasrg   r   r   r   r   r   r   r   Zpandas._testingZ_testingrC   Zpandas.core.commoncorecommonr   r   r   r   Zskip_array_manager_invalid_testr   r   r   r
   r
   r
   r   <module>   s    $	   2
