o
    5cC                     @   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J d S N )abr   r   c/var/www/html/gps/gps/lib/python3.10/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dprofitr   d   P   time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   r5   row_selection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-01MS)freqfoobarz
2016-01-01z
2016-02-01)   r@   rA   r   z
2015-02-01)r'   r'   )r   r   r   r   )r'   r@   rB   )r   r-   r   r   r.   randomfrom_tuplesr   r   rF   rG   slicecopyr*   r)   )r   idxr2   r5   subidxsubcolsvalsrU   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    d S 1 sbw   Y  d S )N)rP   rP   bazquxr\   rP   )onetwor]   r]   r^   r]   r      r+   r,   rL   rA   rP   r'   zAcannot align on a multi-index with out specifying the join levelsmatch)r.   r1   r/   r   rR   randn
sort_indexr   rU   rF   rG   pytestraises	TypeError)r   arraysdf_origr   r5   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 )Npricer'   r@   r+   r8   r   ))DECoalStock)rl   Gasrn   )rl   ElecDemand)FRro   rn   )rr   SolarSupIm)rr   Windrt   )SitComTyper%   )r   r'   r,   rn   )r   	from_dictr   rS   r*   rU   ilocpd
IndexSlicer   rF   rG   )r   rh   r   rV   r5   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 )Nr8   
   	   sizer,   abcr@   r@      r   r~   rQ   r(   r                 ?)r@   r   r   )r*   name)r   r.   rR   randintrC   listr0   r1   r   rF   assert_series_equalr   )r   r5   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|| |sPt||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 sw   Y  tjt|d dg|j
d< W d    n1 sw   Y  dg|j
ddgf< |j
d dk sJ d S )Nr   r   r8   r~   r   r   r,   r   r   r   )r)   r*   r;   cr'   )r@   r   r   int64)r*   r   r;   g      ?float64z@Must have equal len keys and value when setting with an iterabler`   )r   r+   r'   r,   r   r@   )r.   r1   r   rR   r   rC   r   r   rz   valuesr   r   rF   r   assert_numpy_array_equalrd   re   
ValueErrorall)r   using_copy_on_writer   r5   viewexpr   ri   r   r   r   'test_multiindex_assignment_single_dtype   s<   



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< qAd S )Nr!   r~   c                 S   s   g | ]}d | qS )r   r   ).0numr   r   r   
<listcomp>   s    z>TestMultiIndexSetItem.test_groupby_example.<locals>.<listcomp>r8   r   )r;   r)   r@   )levelnew_colr   )mapstrr.   r/   tolistr   rR   r   r   	set_indexrc   groupbyr0   shaper   )
r   NUM_ROWSNUM_COLS	col_names
index_colsr5   grpr   df2new_valsr   r   r   test_groupby_example   s    
z*TestMultiIndexSetItem.test_groupby_examplec                 C   s   |}|d }t j|d< t|jdd  sJ t|jd d  s%J t|jdd   s2J t j|d< t|jd s@J tjt	dd |d  W d    d S 1 sWw   Y  d S )	Nr   )  r,   *   A   )r   r,   r~   1   49r`   )
r.   r0   r   r   r   r	   rz   rd   re   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    d S 1 s~w   Y  d S )Nr   r8   r'   zboolean values onlyr`   )TrU   r   whererF   rG   assert_almost_equalr.   putmaskrd   re   rf   )r    multiindex_dataframe_random_dataframer5   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   r   )r   r   r   r+   r+   )r   r+   r'   r   r+   id)codeslevelsr&   r   )r+   r'   r,      r   r*   r+   r,   r~   )r   r   r   rF   r   r*   rG   )r   r   r   midxr5   r   r   r   r   %test_frame_getitem_setitem_multislice5  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 )Nr~   r@   )r   r   r   r   )r   r+   r   r+   r)   r   r   )r   r.   rR   rb   rU   rF   rG   r   )r   r5   cpr   r   r   test_frame_setitem_multi_columnL  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sMJ |jd
ksTJ |jdks[J d S )N)r   1r   2r>   r   )r+   r,   r8   rA   r   r   r   )r+   r'   r,   r   r   r   F)check_names)r   rS   r   r   r   rF   r   r   )r   r)   r5   	sliced_a1	sliced_a2	sliced_b1r   r   r    test_frame_setitem_multi_column2Z  s   z6TestMultiIndexSetItem.test_frame_setitem_multi_column2c                 C   sD   |}|d d }|j dg df }|j d g d }t|| d S )Nr8   )r   r+   r_   rL   )r   rF   r   )r   r   r   r5   r   r   r   r   r   #test_loc_getitem_tuple_plus_columnsr  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 sTJ 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   r   r   rA   r+   r   )r   r   r.   rR   rb   lenrF   get_objr   reindexr*   r   r   r   )r   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)rO   r^   r   )r   medianrF   r   r   )r   r   r   dftr   	reindexedr   r   r   test_setitem_change_dtype  s   z/TestMultiIndexSetItem.test_setitem_change_dtypec                 C   s~   |}|j g d }d|j|< |j| jdk sJ | }|d }d||< |r0t|| d S |j|df dk s=J d S )N)r+   r@   r8   r<   r>   a   )r*   r   r   r   rU   rF   rG   )r   r   r   r   subsetframe_original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 s2J d S )N)r+   r+   r   r   )r+   r+   yY)r+   r'   zZABCDr   r   r>   r+   r+   _r?   )r   r   r   r   rS   r   xsr   )r   r5   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,   r:   r   )r   rS   r   r.   r/   rC   objectr*   rU   astyper   rF   assert_index_equal)r   r2   r5   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   r   )r   r   )r   r   l1l2r%   r   e)datar*   r)   r<   e   r   )r;   )r   r   )r<   r+   r!   r   )r   rS   r   r.   r/   r   rF   rG   )r   r*   r5   r   r   r   r   test_setitem_nonmonotonic  s   z/TestMultiIndexSetItem.test_setitem_nonmonotonic)__name__
__module____qualname__r   r   r6   rK   rZ   td&skip_array_manager_not_yet_implementedrj   r}   r   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   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  routine2) ODr  result1result2r  )r  wxwyr  r  r  r@   r_   r   )r+   r'   r,   r@   r   )r   r  r  )sortedzipr   rS   r   r.   rR   rb   rU   rF   rG   )r   rg   tuplesr*   r5   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
   s+J d S )N))1a2a)r  2b)r  2cr+   r'   r,   r@   r8   r_   r   )r   )r+   r'   new)r   rS   r   r   r   r   )r   mixr5   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   rO   )r   r   r   )r   r5   r   r   r   test_frame_setitem_view_direct  s   r  c                 C   s^   | j }|rd|d d< d S d}tjt|d d|d d< W d    d S 1 s(w   Y  d S Nr'   rO   r]   zAA value is trying to be set on a copy of a slice from a DataFramer`   )r   rd   re   r   )r   r   r5   ri   r   r   r   test_frame_setitem_copy_raises  s   "r  c                 C   sv   | j }|}| }|rd|d d< nd}tjt|d d|d d< W d    n1 s,w   Y  |}t|| d S r  )r   rU   rd   re   r   rF   rG   )r   r   r   r   r5   ri   r   r   r   r    test_frame_setitem_copy_no_write   s   r  )numpyr.   rd   pandas.errorsr   pandas.util._test_decoratorsutil_test_decoratorsr   pandasr{   r   r   r   r   r   r   r	   pandas._testing_testingrF   r   r   r   skip_array_manager_invalid_testr  r  r  r   r   r   r   <module>   s"    $	   8
