U
    >vfC                     @   s@  d dl m Z  d dlZd dlZd dlm  mZ d dlm	Z
 d dlmZmZmZ d dlmZmZmZmZ d dlZd dlmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z( d dl)m*Z* d dl+m,Z, G d	d
 d
Z-G dd dZ.G dd dZ/G dd dZ0G dd dZ1G dd dZ2G dd dZ3dS )    )datetimeN)	_registry)is_categorical_dtypeis_interval_dtypeis_object_dtype)CategoricalDtypeDatetimeTZDtypeIntervalDtypePeriodDtype)Categorical	DataFrameDatetimeIndexIndexIntervalIntervalIndex
MultiIndexNaTPeriodPeriodIndexSeries	Timestampcut
date_rangenotnaperiod_range)SparseArray)BDayc                   @   s  e Zd Zdd Zejdddd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d"d# Zejd$ed%ed&fed'd(d)edd*fed+d,d-ed,d-fgd.d/ Zejd0d1d2 ejD d3d4g d5d6 Zd7d8 Zejd9d:d;d<d=d>d&d?gd@dA Zejd9d:d;d<d=d>d&d?gdBdC Z dDdE Z!dFdG Z"dHdI Z#ejddJdKdLgdMdN Z$ejdOdPdPggdQdR Z%dSdT Z&dUdV Z'ejdWdXdYdZgdXdXdXggd[d\ Z(d]d^ Z)d_d` Z*dadb Z+dcdd Z,dedf Z-ejdgdhd>d>dXgdidjdkdlgdlfd>dhd>dXgdidjdkdlgdlfdhdPdPdXgdidjdkdlgdlfdhdPdXgdidjdkgdkfdPdhdXgdkdjdigdifdhdXdPgdkdjdigdjfgdmdn Z.dodp Z/ejdqdrdPdhd>gdse0dsdsdsdsgdsdsdsdsgdsdsdsdsggdrdPdhd>gdtfdhd>gdsduge0didjdsdugdkdldsdugd(dvdsduggdrdPdhd>gdtfdrdPdhge1j2dsdudwge1j3dxe0dsdudwgdsdudwgdsdudwggdrdPdhgdtfdPdhd>gdsdudwgdydzd{gd|d}d~gge0didsdudwgdkdydzd{gd(d|d}d~ggdrdPdhd>gdtfdhdrd>ge1j2dsdudwgdydzd{gd|d}d~gge1j3dxe0dudjdsdwgdzdldyd{gd}dvd|d~ggdrdPdhd>gdtfdrdhge0dsdugdwdygdzd{ggdrdhgdte0dsdjdugdwdldygdzdvd{ggdrdPdhgdtfgdd Z4dd Z5dd Z6dd Z7dd Z8dd Z9dd Z:e;j<dd Z=ejdi ddXigdd Z>dd Z?dd Z@dd ZAdS )TestDataFrameSetItemc                 C   sv   G dd dt }dg}t|}tddgi|d}d|d< d	||d
< tddgddg|d
d	gi|d}t|| d S )Nc                   @   s   e Zd ZdS )z@TestDataFrameSetItem.test_setitem_str_subclass.<locals>.mystringN)__name__
__module____qualname__ r!   r!   L/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/frame/indexing/test_setitem.pymystring1   s   r#   z2020-10-22 01:21:00+00:00a   index   b   c)strr   r   tmZassert_equal)selfr#   datar'   dfexpectedr!   r!   r"   test_setitem_str_subclass/   s    "z.TestDataFrameSetItem.test_setitem_str_subclassdtypeint32int64uint32Zuint64float32float64c                 C   s>   t jddt|}t j||d||< || jj|ks:td S )Nr%   
   r3   )nprandomrandintlenarrayr3   nameAssertionError)r.   r3   float_framearrr!   r!   r"   test_setitem_dtype<   s    z'TestDataFrameSetItem.test_setitem_dtypec                 C   s8   t jt|d}||ddg< t|ddg j| d S )Nr(   AB)r;   r<   randnr>   r-   Zassert_almost_equalvalues)r.   rB   r/   r!   r!   r"   test_setitem_list_not_dataframeE   s    z4TestDataFrameSetItem.test_setitem_list_not_dataframec              	   C   s   t dddgdddgdtdd	d
gddd}tddddgtdd	d
dgdddd}d}tjt|d ||d< W 5 Q R X t tjddddd	d
dgd}d}tjt|d |	d	d
g
 |d< W 5 Q R X d S )Nr%   r(   r*   def)barZbazr$   r)   r+   foor@   r&   ghijZfizr'   r@   z/cannot reindex on an axis with duplicate labelsmatchZnewcolr   )   rW   columnszDCannot set a DataFrame with multiple columns to the single column grZgr)r   r   r   pytestraises
ValueErrorr;   r<   r=   groupbycount)r.   r0   sermsgr!   r!   r"   test_setitem_error_msmgsJ   s     
 z-TestDataFrameSetItem.test_setitem_error_msmgsc                 C   sh   d}d}t t|d}tj|}t|D ]}|||< q*t t||||t|d}t|| d S )Nr9      r&   )	r   ranger;   r<   rG   repeatZreshaper-   assert_frame_equal)r.   NKr0   Znew_colrR   r1   r!   r!   r"   test_setitem_benchmark`   s    
 z+TestDataFrameSetItem.test_setitem_benchmarkc              	   C   s^  t tjddtddddgd}|dd|d  |d	d
|d  |d d|d< |j}tt	dgd t	dg ddd
dddgd}t
|| |d d|d< |j}tt	dgd t	dgd	  ddd
dddgd}t
|| |d d|d< |j}tt	dgd t	dgd	  t	dg ddd
ddddgd}t
|| d S )Nrb   r*   r+   r)   r$   r'   rY   r   rN   r(   rM   r7   xr8   r&   rW   r4   y)r   r;   r<   rG   arangeinsertastypedtypesr   r3   r-   assert_series_equalr.   r0   resultr1   r!   r!   r"   test_setitem_different_dtypek   s8      *z1TestDataFrameSetItem.test_setitem_different_dtypec                 C   sT   t dddgd}|j|d< dddg|d< t ddddgidddgd	}t|| d S )
NrE   rF   Cr&   Xrj   rk   z)r/   r'   )r   r'   r-   re   r.   r0   expr!   r!   r"   test_setitem_empty_columns   s
    
z/TestDataFrameSetItem.test_setitem_empty_columnsc                 C   sF   t dddd}ttt|d}||d< |d jtdksBtd S )Nz1/1/2000 00:00:00z1/1/2000 1:59:50Z10s)freqr&   rE   M8[ns])r   r   r;   rl   r>   r3   rA   )r.   rngr0   r!   r!   r"   %test_setitem_dt64_index_empty_columns   s    z:TestDataFrameSetItem.test_setitem_dt64_index_empty_columnsc                 C   sT   t tdd}tddd|d< t tdddggd ddd	gdgd
}t|| d S )Nr*   r&   Z20130101UTCtznowr   r%   r(   ri   )r   rc   r   r-   re   r.   r0   r1   r!   r!   r"   $test_setitem_timestamp_empty_columns   s      z9TestDataFrameSetItem.test_setitem_timestamp_empty_columnsc              	   C   sp   t ddddddgdddg}ttddgd	}d
t| dt| d}tjt|d ||d< W 5 Q R X d S )Nr   r%   r(   r$   r)   r+   r9   rM   rX   zLength of values \(z$\) does not match length of index \(z\)rU   rN   )r   Z
from_codesr   rc   r>   rZ   r[   r\   )r.   catr0   r`   r!   r!   r"   2test_setitem_wrong_length_categorical_dtype_raises   s    zGTestDataFrameSetItem.test_setitem_wrong_length_categorical_dtype_raisesc                 C   sP   t dddgdddgd}tddd	g}||d
< t|d
d}t|d
 | d S )Nr$   r)   r+         ?       @      @Zc_1Zn_1r   r%   
new_columnrO   )r   r   r   r-   rp   )r.   r0   Zsp_arrayr1   r!   r!   r"   test_setitem_with_sparse_value   s
    z3TestDataFrameSetItem.test_setitem_with_sparse_valuec                 C   sh   t dddgdddgd}ttddd	gd
d	dgd}||d< ttd	ddgdd}t|d | d S )Nr$   r)   r+   r   r   r   r   r   r%   r(   r&   r   rO   )r   r   r   r-   rp   )r.   r0   Z	sp_seriesr1   r!   r!   r"   (test_setitem_with_unaligned_sparse_value   s
    z=TestDataFrameSetItem.test_setitem_with_unaligned_sparse_valuec                 C   s8   t ddg}tg }||d< td|i}t|| d S )Nz2003-12Dr$   )r   r   r-   re   )r.   r/   rr   r1   r!   r!   r"   #test_setitem_period_preserves_dtype   s
    z8TestDataFrameSetItem.test_setitem_period_preserves_dtypec                 C   s   t tdddgddtdddgtdtdddgtdtdddgddd}t tg ddtg tdtg tdtg ddd}tdddgD ]4\}}t|t|t|t|d|j|jd < qt	
|| d S )	Nr   r%   r(   r5   r:   r*   r6   r$   r)   r+   rJ   )r   r   float	enumerateintr;   r6   locshaper-   re   )r.   r1   r0   idxr)   r!   r!   r"   "test_setitem_dict_preserves_dtypes   s*    



z7TestDataFrameSetItem.test_setitem_dict_preserves_dtypesz	obj,dtypez2020-01Mr   rb   )leftrightr   z
2011-01-01z
US/Easternr   c                 C   sL   t dddgt|gd |dd}t ddddgi}||d< t|| d S )Nr%   r(   r*   r:   )r   objr   r   r   r   r-   re   )r.   r   r3   r1   r0   r!   r!   r"   test_setitem_extension_types   s    "z1TestDataFrameSetItem.test_setitem_extension_typesea_namec                 C   s   g | ]}t |jts|jqS r!   )
isinstancer@   property).0r3   r!   r!   r"   
<listcomp>   s   zTestDataFrameSetItem.<listcomp>zdatetime64[ns, UTC]z	period[D]c                 C   s8   t dg}dg||< t ddg|dgi}t|| d S )Nr   r%   r   r-   re   )r.   r   rr   r1   r!   r!   r"   test_setitem_with_ea_name   s    

z.TestDataFrameSetItem.test_setitem_with_ea_namec                 C   s   t jddgdd}t| }||d< tdd gdd gddd}t|| t jddgdd}||d< t|d |d  t|d 	 | d S )	Nr%   Znatdatetime64[ns]r:   new)r   r   datetime64[s]r   )
r;   r?   r   Zto_framer   r-   re   rp   assert_numpy_array_equalZto_numpy)r.   Zdata_nsrr   r1   Zdata_sr!   r!   r"   6test_setitem_dt64_ndarray_with_NaT_and_diff_time_units  s    zKTestDataFrameSetItem.test_setitem_dt64_ndarray_with_NaT_and_diff_time_unitsunitrQ   msmsr   Yc                 C   s   d}t d| d}t j|t jd|}|dkr:|}n
|d}tdt |it |d}|||< || j|jks|t|| j|k	 std S )	Nd   M8[]r:   )r   r   r   intsr&   )
r;   r3   rl   r5   viewrn   r   rA   rH   allr.   r   nr3   valsZex_valsr0   r!   r!   r"   -test_frame_setitem_datetime64_col_other_units  s    
zBTestDataFrameSetItem.test_frame_setitem_datetime64_col_other_unitsc                 C   s   d}t d| d}t j|t jd|}|d}tdt |it |d}t j|t jdd|d	< ||d	< |d	 j|k st	d S )
Nr   r   r   r:   r   r   r&   r{   dates)
r;   r3   rl   r5   r   rn   r   rH   r   rA   r   r!   r!   r"   6test_frame_setitem_existing_datetime64_col_other_units1  s    
zKTestDataFrameSetItem.test_frame_setitem_existing_datetime64_col_other_unitsc           
      C   s  |}|d  d}||d< t|d t|dd d|d< ||d< t|d t|dd |d= |jjd }|jjd }t|| |jj}|jj}|d kst	|t	|kst
| }t|jd< t|jd	< |d }	tt|	td
dd
gdd t|j|j d S )NrF   rN   rt   rO   r   r%   r(   )r%   r%   r%   r(   TF)renamer-   rp   r   _mgrZarraysZassert_extension_array_equalZ_ndarraybaseidrA   copyr   ilocr   ro   )
r.   Ztimezone_framer0   r   Zv1Zv2Zv1baseZv2basedf2rr   r!   r!   r"   test_setitem_dt64tzB  s(    

z(TestDataFrameSetItem.test_setitem_dt64tzc                 C   s   t dddd}ttjdd|d}||d< t|d }tj||dd	 |jdksVt	|jdksdt	|
 d}t|jtst	t|j| d S )
Nz1/1/2000rb   r'   )periodsr@   r*   r&   r   FZcheck_names)r   r   r;   r<   rG   r   r-   assert_index_equalr@   rA   Zreset_indexZ	set_indexr   r'   r   )r.   r|   r0   rsr!   r!   r"   test_setitem_periodindex`  s    z-TestDataFrameSetItem.test_setitem_periodindexc                 C   s   t dddgdddgd}tddgddgddgg}||d	d
g< t dddgdddgdddgdddgd}|d	 |j|d	< |d
 |j|d
< |d	 j|jkst|d
 j|jkstt|| d S )NZoneZtwoZthreer%   r(   r*   r$   r)   rb   r+   rJ   r   )r   r;   r?   rn   r3   rA   r-   re   r.   r0   rC   r1   r!   r!   r"   'test_setitem_complete_column_with_arrayn  s    z<TestDataFrameSetItem.test_setitem_complete_column_with_arrayf8i8u8c                 C   sx   t dddg|d}ttjdd|d}dddg|d	< t dddd	gtd}|d
krft dddd	gtd}t|j| d S )Nr%   r(   r*   r:   rX   r$   r)   r+   Fr   r   r   r   )	r   r   r;   r<   rG   objectr-   r   rY   )r.   r3   colsr0   Zexpected_colsr!   r!   r"   $test_setitem_bool_with_numeric_index  s    z9TestDataFrameSetItem.test_setitem_bool_with_numeric_indexindexerrF   c                 C   sb   t ddgd}t dddgi}|||< t tjgd ddgd}|d d|d< t|| d S )NrE   rF   rX   r%   r(   rE   rF   r   )r   r;   nanrn   r-   re   )r.   r   r0   otherr1   r!   r!   r"   #test_setitem_frame_length_0_str_key  s    z8TestDataFrameSetItem.test_setitem_frame_length_0_str_keyc              	   C   s   dddgd }t td|d}d|jd< d	|jd d df< d
|d< t ddddddgtjddtjddgtjddtjddggdd}|d tj|d< |d tj|d< ||_t	|| d S )NrE   rF   rt   r(   r*   ri   )r   r*   )r   rE   )r%   rW   r(   rb   r   r%   rW   rb   r   r:   )
r   rc   r   r;   r   rn   r5   rY   r-   re   )r.   r   r0   r1   r!   r!   r"   $test_setitem_frame_duplicate_columns  s     

z9TestDataFrameSetItem.test_setitem_frame_duplicate_columnsc              	   C   s   dddgd }t td|d}tjtdd d	|dg< W 5 Q R X |jd d d df }tjtdd d	|dg< W 5 Q R X d S )
NrE   rF   rt   r(   r*   ri   "Columns must be same length as keyrU   )r   r*   rb   )r   rc   rZ   r[   r\   r   )r.   r   r0   r   r!   r!   r"   2test_setitem_frame_duplicate_columns_size_mismatch  s    zGTestDataFrameSetItem.test_setitem_frame_duplicate_columns_size_mismatchr   r$   r)   r+   c              	   C   sT   t dddgg|d}t ddggddgd}d	}tjt|d
 ||d< W 5 Q R X d S )Nr%   r(   r*   rX   r9      rJ   rK   r   rU   r$   r   rZ   r[   r\   )r.   r   r0   rhsr`   r!   r!   r"   #test_setitem_df_wrong_column_number  s
    z8TestDataFrameSetItem.test_setitem_df_wrong_column_numberc                 C   s   t dddggdddgd}t ddd	ggdddgd}||ddg< t ddd	ggdddgd}t|| ||d
dg< t ddd	dggdddd
gd}t|| d S )Nr%   r(   r*   r$   r)   rX   r9   r      r+   r   )r.   r0   r   r1   r!   r!   r"   /test_setitem_listlike_indexer_duplicate_columns  s    zDTestDataFrameSetItem.test_setitem_listlike_indexer_duplicate_columnsc              	   C   s^   t dddggdddgd}t ddggddgd}d	}tjt|d
 ||ddg< W 5 Q R X d S )Nr%   r(   r*   r$   r)   rX   r9   r   r   rU   r   )r.   r0   r   r`   r!   r!   r"   @test_setitem_listlike_indexer_duplicate_columns_not_equal_length  s
    zUTestDataFrameSetItem.test_setitem_listlike_indexer_duplicate_columns_not_equal_lengthc                 C   s  t dtdi}t|d d}t|jjts0t||d< t	||d< |j
|d< t	|j
|d< |t|d< t|d jstt|d jjstt|d jstt|d jjstt|d stt|d stt|d std	d
 }t||j||j tj||j||jdd tj||j||jdd tj||j||jdd t|d |d  tj|d |d dd t|d |d  tj|d |d dd d S )NrE   r9   rb   rF   rt   r   EFc                 S   s   t t| S N)r   r;   r?   rj   r!   r!   r"   <lambda>      z=TestDataFrameSetItem.test_setitem_intervals.<locals>.<lambda>Fr   )r   rc   r   r   r   
categoriesr   rA   r;   r?   rH   rn   r   r   r3   r   r   r-   r   rF   rt   r   rp   )r.   r0   r_   r+   r!   r!   r"   test_setitem_intervals  s0    
z+TestDataFrameSetItem.test_setitem_intervalsc                 C   s\   t dttddi}|jjddg|_t dtddgddgi}t	|| d S )NrQ   mncategoryr   r   )
r   r   listrn   rQ   r   Zreorder_categoriesr   r-   re   r   r!   r!   r"   test_setitem_categorical  s    z-TestDataFrameSetItem.test_setitem_categoricalc                 C   sD   t g dd}tdg|d}g |d< tdg|d}t|j|j d S )Nr   rO   rE   rY   r'   )r   r   r-   r   r'   )r.   r'   rr   r1   r!   r!   r"    test_setitem_with_empty_listlike  s
    z5TestDataFrameSetItem.test_setitem_with_empty_listlikezcols, values, expectedrt   r%   r(   r*   rW   c                 C   s8   t |g|d}|d |d< |d jd }||ks4td S )NrX   r$   r   )r   rH   rA   )r.   r   rH   r1   r0   rr   r!   r!   r"   test_setitem_same_column  s    z-TestDataFrameSetItem.test_setitem_same_columnc                 C   s$  dddgddgdddgf}t |}td	d
d}tjddt|t|f}t|||d}|jj	
 |d d d   }}tj| |d j|d d df |d< t|d |d  tj| |d j||f |d< t|d |d  tj| |d j||f |d< t|d |d  d S )NZjimjoejoliefirstlastr   centerr   Z20141006   )r   r%   i  r   )r   r   )r   r   )r   r   )r   r   )r   Zfrom_productr   r;   r<   r=   r>   r   r'   rH   r   shuffler   r-   re   )r.   itr   r'   r   r0   rR   rS   r!   r!   r"   test_setitem_multi_index'  s    
z-TestDataFrameSetItem.test_setitem_multi_indexzcolumns,box,expectedrE      rX         	   r:   r9   r   r            c                 C   s:   t ddgddgddggddgd	}|||< t|| d S )
Nr%   r(   r*   rW   rb   r   rE   rF   rX   r   )r.   rY   boxr1   r0   r!   r!   r"   !test_setitem_list_missing_columns?  s    3"z6TestDataFrameSetItem.test_setitem_list_missing_columnsc                 C   sF   t t|d |d }||d< |d }t||jdd}t|| d S )NrE   rF   tuplesrT   )r   zipr   r'   r-   rp   )r.   rB   r  rr   r1   r!   r!   r"   test_setitem_list_of_tuplesv  s
    z0TestDataFrameSetItem.test_setitem_list_of_tuplesc                 C   s\   t dddgdddgd}dd	 d
D }d|j|< t dddgdddgd}t|| d S )Nr%   r(   r*   rW   rb   r   r   c                 s   s   | ]
}|V  qd S r   r!   r   rj   r!   r!   r"   	<genexpr>  s     zCTestDataFrameSetItem.test_setitem_iloc_generator.<locals>.<genexpr>r   r   r   r-   re   r.   r0   r   r1   r!   r!   r"   test_setitem_iloc_generator~  s
    
z0TestDataFrameSetItem.test_setitem_iloc_generatorc                 C   s`   t dddgdddgd}dd	 d
D }d|j|df< t dddgdddgd}t|| d S )Nr%   r(   r*   rW   rb   r   r   c                 s   s   | ]
}|V  qd S r   r!   r  r!   r!   r"   r    s     zSTestDataFrameSetItem.test_setitem_iloc_two_dimensional_generator.<locals>.<genexpr>r   r  r	  r!   r!   r"   +test_setitem_iloc_two_dimensional_generator  s
    z@TestDataFrameSetItem.test_setitem_iloc_two_dimensional_generatorc                 C   s   t ddd}t|d}t d|tjd|d< t d|dd|d< t d	|dd|d	< t d
|tjd|d
< |j}t tjtttjgtdd}t	|| d S )Nr   ZS24)r@   r3   r&   r$   )r@   r'   r3   r)   ZS64r+   rJ   Zabcd)
r   r   r;   r6   Zuint8ro   r   r   r-   rp   )r.   r'   r0   rr   r1   r!   r!   r"   (test_setitem_dtypes_bytes_type_to_object  s    
z=TestDataFrameSetItem.test_setitem_dtypes_bytes_type_to_objectc                 C   s   t ddgddgdddd}td|jd	}|d
 |j|d
f< |d |j|df< t ddgddgdddd}t|| d S )Nr*   rW   rb   r   r   r5   Int64Fr&   r$   r)   )r   rn   r   r'   r   r-   re   )r.   rr   maskr1   r!   r!   r"    test_boolean_mask_nullable_int64  s    z5TestDataFrameSetItem.test_boolean_mask_nullable_int64c                 C   sH   t dddgi}tddgdd|d< t dddgidd}t|| d S )Nr$   r%   r(   r  r:   r   r   r!   r!   r"    test_setitem_ea_dtype_rhs_series  s    z5TestDataFrameSetItem.test_setitem_ea_dtype_rhs_seriesc              	   C   sz   t tdtddtdd}td}t tdd}||d< tt t||d< W 5 Q R X t|| d S )Nr9   )np-array	np-matrixr&   )r9   r%   r  r  )	r   r;   onesrl   r-   Zassert_produces_warningPendingDeprecationWarningZmatrixre   )r.   r1   r$   r0   r!   r!   r"   test_setitem_npmatrix_2d  s     
z-TestDataFrameSetItem.test_setitem_npmatrix_2dr   rJ   c                 C   s   t ddgddgd|}ddd|jd d d	f< d
dd|jd d df< dd
i|jd d df< t ddgddgd|d
dgtjd
gd}t|| d S )Nr%   r(   r*   rW   r   r      )r%   r   r$   rb   r   r   r%   r+   rK   )r+   rK   )r   r   r;   r   r-   re   )r.   r   r0   r1   r!   r!   r"   %test_setitem_aligning_dict_with_index  s    &z:TestDataFrameSetItem.test_setitem_aligning_dict_with_indexc                 C   s   t dddgi}t dddgiddgd|d< t dtjdgi}t|| t dddgi}|dt dddgiddgd t|| d S )Nr$   r%   r(   r9   r   r&   r   )r   r;   r   r-   re   Zisetitemr   r!   r!   r"   test_setitem_rhs_dataframe  s     z/TestDataFrameSetItem.test_setitem_rhs_dataframec                 C   sb   t ddgddgddggd}t ddd	gi|d
|d< t tdd	g|d
ddgd}t|| d S )Nr$   r)   r%   r(   r*   rW   rY   r/   r9   r   r:   r   r   r.   Zany_numeric_ea_dtyper0   r1   r!   r!   r"   *test_setitem_frame_overwrite_with_ea_dtype  s    z?TestDataFrameSetItem.test_setitem_frame_overwrite_with_ea_dtypec                 C   s8   t ddgi}| }d}||g ||< t|| d S )Nr   r9   r   r   r-   re   )r.   r0   r1   Zcol_namer!   r!   r"   test_setitem_frame_midx_columns  s
    z4TestDataFrameSetItem.test_setitem_frame_midx_columnsN)Br   r   r    r2   rZ   markparametrizerD   rI   ra   rh   rs   ry   r}   r   r   r   r   r   r   r   r
   r   r	   r   r   r   ea_registryro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r;   r?   r5   r  r  r
  r  r  r  r  tdZ&skip_array_manager_not_yet_implementedr  r  r  r  r  r!   r!   r!   r"   r   .   s    
#
	


	





	
,	

 
	 
	( 
	& 
	  1


r   c                   @   s@   e Zd Zejdd Zejdd Zdd Zdd Zd	d
 Z	dS )TestSetitemTZAwareValuesc                 C   s   t ddgdd}|d}|S )Nz2013-1-1 13:00z2013-1-2 14:00rF   rO   z
US/Pacific)r   tz_localize)r.   Znaiver   r!   r!   r"   r     s    
zTestSetitemTZAwareValues.idxc                 C   s.   t tj| dddd}|j|jks*t|S )Nr   r:   rF   rO   )r   r;   r?   tolistr3   rA   )r.   r   r1   r!   r!   r"   r1     s    z!TestSetitemTZAwareValues.expectedc                 C   sl   t tjdddgd}||d< |jddgdjd |d< |d }t|dd dd	}t	
|| d S )
Nr(   r%   rE   rX   rF   r   r&   r~   rO   )r   r;   r<   rG   Z	to_seriesdtZ
tz_convertr   r$  r-   rp   )r.   r   r1   r0   rr   compr!   r!   r"   test_setitem_dt64series  s    z0TestSetitemTZAwareValues.test_setitem_dt64seriesc                 C   s8   t tjdddgd}||d< |d }t|| d S Nr(   r%   rE   rX   rF   )r   r;   r<   rG   r-   rp   r.   r   r1   r0   rr   r!   r!   r"   test_setitem_datetimeindex  s    z3TestSetitemTZAwareValues.test_setitem_datetimeindexc                 C   s<   t tjdddgd}| |d< |d }t|| d S r)  )r   r;   r<   rG   Zto_pydatetimer-   rp   r*  r!   r!   r"   .test_setitem_object_array_of_tzaware_datetimes  s    zGTestSetitemTZAwareValues.test_setitem_object_array_of_tzaware_datetimesN)
r   r   r    rZ   Zfixturer   r1   r(  r+  r,  r!   r!   r!   r"   r#    s   


	r#  c                   @   sT   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S )!TestDataFrameSetItemWithExpansionc                 C   s   t dddgdddgd}|d }tdd	gd
dgddgg|ddg< d|jd< |rhtdddgdd}ntdddgdd}t|| d S )Nr%   r(   r*   rW   r   r   r$   g?g?g333333?g?      ?r+   rJ   r   )r   r   rO   )r   r;   r?   r   r   r-   rp   )r.   using_copy_on_writer0   r_   r1   r!   r!   r"   test_setitem_listlike_views  s    $
z=TestDataFrameSetItemWithExpansion.test_setitem_listlike_viewsc                 C   sR   t ddgddgg}ddg|d< t dddgdddggdddgd	}t|| d S )
Nr%   r(   r*   rW   rb   r   z0 - Namer   rX   r   r   r!   r!   r"   .test_setitem_string_column_numpy_dtype_raising*  s    "zPTestDataFrameSetItemWithExpansion.test_setitem_string_column_numpy_dtype_raisingc                 C   sf   t dddgdd}ttd|jd d df< t dtjtjgdtjtjggdddgd}t|| d S )	Nr$   r)   r8   rY   r3   r(   r   r%   rX   )r   r   rc   r   r;   r   r-   re   )r.   r/  r0   r1   r!   r!   r"   'test_setitem_empty_df_duplicate_columns1  s     zITestDataFrameSetItemWithExpansion.test_setitem_empty_df_duplicate_columnsc           	      C   s>  t dtjtjdddddi}tdd tddd	D }|jdgd
d}t|j	tddd	d|d}|j
}||d< t| |j}ttdt|ddgddgd}t|| ||d< t| |j}ttdt|ddt|ddgdddgd}t|| |d }|d }t|jj| d|_t| |  d S )Nvaluer   i'  r   r4   r:   c                 S   s   g | ]}| d |d  qS )z - i  r!   r   rR   r!   r!   r"   r   ?  s     zcTestDataFrameSetItemWithExpansion.test_setitem_with_expansion_categorical_dtype.<locals>.<listcomp>i  T)ZbyZ	ascendingi)  F)r   labelsr   )r   Zorderedr&   r   )r   r;   r?   r<   r=   r   rc   sort_valuesr   r4  rH   r,   ro   r   r3   r   r-   rp   Zassert_categorical_equalr   r@   Z
sort_index)	r.   r0   r6  r_   r   rr   r1   Zresult1Zresult2r!   r!   r"   -test_setitem_with_expansion_categorical_dtype:  s>    

zOTestDataFrameSetItemWithExpansion.test_setitem_with_expansion_categorical_dtypec                 C   s2   t  }d|d< t dgdtj}t|| d S )Nr%   rN   rX   )r   rn   r;   r5   r-   re   r   r!   r!   r"   test_setitem_scalars_no_indexg  s    z?TestDataFrameSetItemWithExpansion.test_setitem_scalars_no_indexc                 C   sL   d|j kst|d |d< d|j ks(t|d }|d }tj||dd d S )Nr   rE   Fr   )rY   rA   r-   rp   )r.   rB   rr   r1   r!   r!   r"   test_setitem_newcol_tuple_keyn  s    z?TestDataFrameSetItemWithExpansion.test_setitem_newcol_tuple_keyc                 C   sX   t ddt d}t|tdd}tddd}t|}tj||< t|| 	 sTt
d S )	Nz1/1/2012z2/1/2012)startendrz   r9   r   i  r   r%   )r   r   r   rc   r   r   r;   r   isnanr   rA   )r.   rY   r/   ttsr!   r!   r"   #test_frame_setitem_newcol_timestampz  s    
zETestDataFrameSetItemWithExpansion.test_frame_setitem_newcol_timestampc                 C   sh   t dddgi}|j|d< d|jddgdf< |jdgd d f }t dgdgddgd}t|| d S )	Nr$   r)   r   FTr%   r   r&   )r   r'   r   r-   re   rq   r!   r!   r"   *test_frame_setitem_rangeindex_into_new_col  s    
zLTestDataFrameSetItemWithExpansion.test_frame_setitem_rangeindex_into_new_colc                 C   sh   t ddgddgddggd}t ddd	gi|d
|d< t ddgddgtdd	g|d
d}t|| d S )Nr$   r)   r%   r(   r*   rW   r  r9   r   r:   r+   r$   r)   r+   r   r  r!   r!   r"    test_setitem_frame_keep_ea_dtype  s    zBTestDataFrameSetItemWithExpansion.test_setitem_frame_keep_ea_dtypeN)r   r   r    r0  r1  r3  r8  r9  r:  r@  rA  rC  r!   r!   r!   r"   r-    s   	-		r-  c                   @   s   e Zd Zdd Zejdejej	gejde
ejeejgejddddgd	d
 Zejde
ejeejgejddddgdd Zejdejej	gejde
ejeejgejddddgdd ZdS )TestDataFrameSetItemSlicingc                 C   sH   t td}d|dd < td}d|dd < t |}t|| d S )N)r   r%   r%   )r   r;   zerosr-   re   r   r!   r!   r"   test_setitem_slice_position  s    
z7TestDataFrameSetItemSlicing.test_setitem_slice_positionr   r  r   r%   r(   r*   c                 C   s~   t dddggdddgg|  ddd	gd
}|dddg||dd < t dddggdddgg|  ddd	gd
}t|| d S Nr%   r*   rb   r(   rW   r   r$   r)   r+   rX   r9   r   r   r   r.   r   r  r   r0   r1   r!   r!   r"   +test_setitem_slice_indexer_broadcasting_rhs  s    **zGTestDataFrameSetItemSlicing.test_setitem_slice_indexer_broadcasting_rhsc                 C   s   t dddggdddgg|  ddd	gd
}|dddg|jttd|d < t dddggdddgg|  ddd	gd
}t|| d S rH  )r   r   r   rc   r-   re   )r.   r   r  r0   r1   r!   r!   r"   *test_setitem_list_indexer_broadcasting_rhs  s    *"*zFTestDataFrameSetItemSlicing.test_setitem_list_indexer_broadcasting_rhsc                 C   s   t dddgdddggddd	gg|  d
ddgd}|dddg||dd < t dddggdddgg|d   d
ddgdd}t|| d S )Nr%   r*   rb   rj   rk   rv   r(   rW   r   r$   r)   r+   rX   r9   r   r   r   r2  r   rI  r!   r!   r"   0test_setitem_slice_broadcasting_rhs_mixed_dtypes  s    " zLTestDataFrameSetItemSlicing.test_setitem_slice_broadcasting_rhs_mixed_dtypesN)r   r   r    rG  rZ   r  r   r-   setitemr   r   r;   r?   r   pdrJ  rK  rL  r!   r!   r!   r"   rD    s   	rD  c                   @   s   e Zd Zdd Zdd ZdS )TestDataFrameSetItemCallablec                 C   s`   t ddddgddddgd	}d
dddg|dd < t d
dddgddddgd	}t|| d S )Nr%   r(   r*   rW   rb   r   r   r   r   r   r   r   r   c                 S   s   dS )NrE   r!   r   r!   r!   r"   r     r   zDTestDataFrameSetItemCallable.test_setitem_callable.<locals>.<lambda>r   rw   r!   r!   r"   test_setitem_callable  s    z2TestDataFrameSetItemCallable.test_setitem_callablec                 C   sL   dd }t ddgddgg}|||dk< t d|g|dgg}t|| d S )Nc                 S   s   | d S )Nr%   r!   r   r!   r!   r"   inc  s    zETestDataFrameSetItemCallable.test_setitem_other_callable.<locals>.incr   r%   r   r   )r.   rQ  r0   r1   r!   r!   r"   test_setitem_other_callable  s
    z8TestDataFrameSetItemCallable.test_setitem_other_callableN)r   r   r    rP  rR  r!   r!   r!   r"   rO    s   rO  c                   @   s   e Zd Zejejjddd dd gddgddd	 Zejj	d
dejde
ejegdd Zejde
ejegdd Zejdejejgdd Zdd Zejdddgejdi ddgiddgigdd Zd d! Zd"d# Zd$d% Zd&S )'TestDataFrameSetItemBooleanMask	mask_typec                 C   s   | t | d kS Nr(   )r;   absr0   r!   r!   r"   r     r   z(TestDataFrameSetItemBooleanMask.<lambda>c                 C   s   | t | d kjS rU  )r;   rV  rH   rW  r!   r!   r"   r     r   Z	dataframer?   )idsc                 C   s^   |  }||}|  }tj||< |j  }tj|t|< t||j|jd}t	|| d S )Nri   )
r   r;   r   rH   r?   r   r'   rY   r-   re   )r.   rT  rB   r0   r  rr   r1   r!   r!   r"   test_setitem_boolean_mask  s    

z9TestDataFrameSetItemBooleanMask.test_setitem_boolean_maskz1Currently empty indexers are treated as all False)reasonr  c              	   C   sh   t dgdgdgd}|tkr,|g dd}n|g }d}tjt|d dg|j|dgf< W 5 Q R X d S )	Nr$   r%   rB  r   r:   z@Must have equal len keys and value when setting with an iterablerU   r)   )r   r   rZ   r[   r\   r   )r.   r  r0   r   r`   r!   r!   r"   :test_setitem_loc_empty_indexer_raises_with_non_empty_value  s    zZTestDataFrameSetItemBooleanMask.test_setitem_loc_empty_indexer_raises_with_non_empty_valuec                 C   sz   t dgdgdgd}|dg}d|d  |j|dgf< t dgdgdgd}t|| d|j|dgf< t|| d S )	Nr$   r%   rB  Fr9   r+   r)   r   )r   r   r-   re   )r.   r  r0   r   r1   r!   r!   r"   1test_setitem_loc_only_false_indexer_dtype_changed  s    
zQTestDataFrameSetItemBooleanMask.test_setitem_loc_only_false_indexer_dtype_changedr   c                 C   s\   t ddddgddddgd	}| }|d
 dk}||| d
|||< t|| d S )Nr%   rW   r(   r*   rb   r   r   r   r   r$   )r   r   r7  r-   re   )r.   r   r0   r1   r  r!   r!   r"   "test_setitem_boolean_mask_aligning  s
    zBTestDataFrameSetItemBooleanMask.test_setitem_boolean_mask_aligningc                 C   s   t dddddddgddgd}tdddddd	d
g}dddddddg}t||d|d}t dddddddgdddgd}tdddddd	d
g}dddddddg}t||d|d}| }	|	d jdddg|	d< |d dk}
ddg||
< t||	 d S )Nr$   r)   )r   rQ   rR   rS   klr   r   r%   r(   )catsrH   r&   r+   r*   r`  )r   r   r   r   r   Zset_categoriesr-   re   )r.   Zcats2Zidx2Zvalues2Zexp_multi_rowZcatsfZidxfZvaluesfr0   Z	exp_fancyr  r!   r!   r"   test_setitem_mask_categorical  s      z=TestDataFrameSetItemBooleanMask.test_setitem_mask_categoricalr3   r   r5   kwargsr'   r%   rY   rE   c                 C   s6   ||d< t f |}| }d|||k< t|| d S )Nr3   /   r  )r.   r3   rb  r0   r   r!   r!   r"   %test_setitem_empty_frame_with_boolean-  s
    
zETestDataFrameSetItemBooleanMask.test_setitem_empty_frame_with_booleanc              	   C   s   t td}dddg}t||tjdddgdd	d
gdddggtdd}t||tt|t|fd}t||tjdddgdd	dgdddggtdd}d||d	| k< t	|| t
jtdd d||jd d dk< W 5 Q R X d S )Nr*   rE   rF   rt           r.  r   g      ?r   g      @r   g      @g      @r:   )r'   rY   r/   r   zItem wrong lengthrU   r(   )r   rc   r   r;   r?   r   r  r>   r-   re   rZ   r[   r\   r'   )r.   r   r   Zdf1r   r1   r!   r!   r"   test_setitem_boolean_indexing8  s(    
  $z=TestDataFrameSetItemBooleanMask.test_setitem_boolean_indexingc                 C   sd   t ddgddgdd}| }tddgdd	}t d
ddgiddgd|j|d
gf< t|| d S )Nr%   r(   r*   rW   r$   rB  Fr+   rO   r)   rb   r   r   r&   )r   r   r   r   r-   re   )r.   r0   r1   r   r!   r!   r"   -test_loc_setitem_all_false_boolean_two_blocksO  s
    $zMTestDataFrameSetItemBooleanMask.test_loc_setitem_all_false_boolean_two_blocksc                 C   sh   t ddgddgg}t ddgddgg}t tddgdd	ttjdgdd	d
}d||< t|| d S )Nr   r(   r*   rE  r   TFbooleanr:   r  )r   r   rN  ZNAr-   re   )r.   r0   r1   Zboolean_indexerr!   r!   r"   test_setitem_ea_boolean_maskW  s    z<TestDataFrameSetItemBooleanMask.test_setitem_ea_boolean_maskN)r   r   r    r"  skip_array_manager_invalid_testrZ   r  r   rY  xfailr   r;   r?   r   r[  r\  r-   rM  r   r]  ra  rd  rf  rg  ri  r!   r!   r!   r"   rS    s*   

	rS  c                   @   s  e Zd Zdd Zejdddgdd Zdd	 Zejd
de	j
dgdggdddgdgggdd Zejd
de	
dgdggdgdgggdd Zejdddgejddgejjddddgejdddededfdgdd Zejd d! Zd"S )#%TestDataFrameSetitemCopyViewSemanticsc                 C   sZ   d|j kst|d  }||d< tj|jdd|j df< t|dd  sVtd S )Nr   rE   rb   r9   )	rY   rA   r   r;   r   r   Zget_locr   r   )r.   rB   r   r!   r!   r"   test_setitem_always_copyf  s
    z>TestDataFrameSetitemCopyViewSemantics.test_setitem_always_copyconsolidateTFc                 C   s   t ddddgddddgd	d
dddgd}|ddtj |st|r`|  t|jjdksttnt|jjdkstt|d j	}d|j
dd df< ttjtjddg|jdd}t|d | |st||j t||d j	std S )Ng?g @g@gffffff@gffffff@gffffff@gffffff@g333333 @)rj   rk   r   r%   r(   r*   r&   rv   *   rT   )r   rm   r;   r   Z_consolidate_inplacer>   r   blocksrA   Z_valuesr   r   r'   r-   rp   r   rH   Zshares_memory)r.   rn  using_array_managerr/  r0   Zzvalsr1   r!   r!   r"   #test_setitem_partial_column_inplacen  s"    	 

zITestDataFrameSetitemCopyViewSemantics.test_setitem_partial_column_inplacec                 C   sj   ddgd }t ddg|d}| }|d d  }d|d< t ddddgg|d	}t|| t|| d S )
NrE   rF   r(   re  r   ri   r   rb   rX   r  )r.   r   r0   df_copydf_viewr1   r!   r!   r"   *test_setitem_duplicate_columns_not_inplace  s    zPTestDataFrameSetitemCopyViewSemantics.test_setitem_duplicate_columns_not_inplacer4  r%   r5   r:   c                 C   sl   ddg}t dddg|d}| }|d d  }||dg< t ddgddgg|d}t|| t|| d S )NrE   rF   r   r%   ri   rX   r  )r.   r4  rq  r   r0   rs  rt  r1   r!   r!   r"   #test_setitem_same_dtype_not_inplace  s    
zITestDataFrameSetitemCopyViewSemantics.test_setitem_same_dtype_not_inplacer   c                 C   sl   ddg}t dddg|d}| }|d d  }||dg< t ddgddgg|d}t|| t|| d S )NrE   rF   r   r%   ri   r   rX   r  )r.   r4  r   r0   rs  rt  r1   r!   r!   r"   2test_setitem_listlike_key_scalar_value_not_inplace  s    
zXTestDataFrameSetitemCopyViewSemantics.test_setitem_listlike_key_scalar_value_not_inplacer   r$   z+Boolean indexer incorrectly setting inplace)rZ  strict)Zmarkszvalue, set_value)r%   rb   )r   g      @z
2020-12-31z
2021-12-31r   c                 C   s@   t d|iddgd}| }|d d  }|||< t|| d S )Nr$   r   r%   r&   r  )r.   r4  	set_valuer   r0   r1   r   r!   r!   r"   "test_setitem_not_operating_inplace  s
    zHTestDataFrameSetitemCopyViewSemantics.test_setitem_not_operating_inplacec              	      s   dd t dD  t fdd D  d}|jjd j}|s~|jD ]}d|| |< qDt|tdtdf dkst	nRt
  |jD ]}d|| |< qW 5 Q R X t|tdtdf dkst	d S )	Nc                 S   s   g | ]}d | qS )r+   r!   r5  r!   r!   r"   r     s     z\TestDataFrameSetitemCopyViewSemantics.test_setitem_column_update_inplace.<locals>.<listcomp>r9   c                    s   i | ]}|t t qS r!   )r;   rF  r>   )r   colr6  r!   r"   
<dictcomp>  s      z\TestDataFrameSetitemCopyViewSemantics.test_setitem_column_update_inplace.<locals>.<dictcomp>r&   r   r%   )rc   r   r   rp  rH   rY   r;   r   rl   rA   r-   Zraises_chained_assignment_error)r.   r/  r0   rH   labelr!   r|  r"   "test_setitem_column_update_inplace  s    
(

zHTestDataFrameSetitemCopyViewSemantics.test_setitem_column_update_inplaceN)r   r   r    rm  rZ   r  r   rr  ru  r;   r?   rv  rw  paramrk  r   rz  r"  rj  r  r!   r!   r!   r"   rl  e  sF   
 "
(
	rl  )4r   Znumpyr;   rZ   Zpandas.util._test_decoratorsutilZ_test_decoratorsr"  Zpandas.core.dtypes.baser   r!  Zpandas.core.dtypes.commonr   r   r   Zpandas.core.dtypes.dtypesr   r   r	   r
   ZpandasrN  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zpandas._testingZ_testingr-   Zpandas.core.arraysr   Zpandas.tseries.offsetsr   r   r#  r-  rD  rO  rS  rl  r!   r!   r!   r"   <module>   s2   H     C* . 	