o
    ŀgg                     @   s   d Z ddlmZmZ ddl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 ddlmZ ejdd ZG dd dZG d	d
 d
ZG dd dZdS )z/
See also: test_reindex.py:TestReindexSetIndex
    datetime	timedeltaN)
CategoricalCategoricalIndex	DataFrameDatetimeIndexIndex
MultiIndexSeries
date_rangeperiod_rangeto_datetimec               	   C   sP   t g dg dg dtjddtjddtjddd} | S )aM  
    Fixture for DataFrame of columns that can be used for indexing

    Columns are ['A', 'B', 'C', 'D', 'E', ('tuple', 'as', 'label')];
    'A' & 'B' contain duplicates (but are jointly unique), the rest are unique.

         A      B  C         D         E  (tuple, as, label)
    0  foo    one  a  0.608477 -0.012500           -1.664297
    1  foo    two  b -0.633460  0.249614           -0.364411
    2  foo  three  c  0.615256  2.154968           -0.834666
    3  bar    one  d  0.234246  1.085675            0.718445
    4  bar    two  e  0.533841 -0.005702           -3.533912
    )foor   r   barr   )onetwothreer   r   )abcde      )ABCDEtupleaslabel)r   nprandomdefault_rngstandard_normaldf r*   ]/var/www/html/myenv/lib/python3.10/site-packages/pandas/tests/frame/methods/test_set_index.pyframe_of_index_cols   s   
r,   c                   @   sh  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ejdddddgdgejdddgejdddgdd Zejdddddgdgejdddgdd Zejdddddgdgejdddgd d! Zd"d# Zejd$eeejed%d& d'd& gejd(g d)ejdddgd*d+ Zejd$eeejed,d& gejd(g d-ejdddgd.d/ Zejd0eeejeed1d& d2d& gejd3eeejeed4d& d5d& gejd(g d6ejdddgd7d8 Zejd9ddgejdddgd:d; Zd<d= Zd>d? Zd@dA ZdBdC Z dDS )ETestSetIndexc                 C   sF   g dg dd}t |}g d}||d< t|d }|| d S )N)r   g      @   )   r      )t1t2))r      )r   r   )r3   r   tuples)r   r
   from_tuples	set_index)selfr   r)   r4   indexr*   r*   r+   test_set_index_multiindex9   s   z&TestSetIndex.test_set_index_multiindexc                 C   s~   t ddddddddd	d
dddd
gg dd}|ddg}|ddg }tj|d |d gddgd|_t|| d S )Nr3   r   )r   pr   
   )r   mr.         )r   r<   r:   r/         )r   r<   r:   xcolumnsr   rA   r<   r:   names)r   r6   r
   from_arraysr8   tmassert_frame_equal)r7   r)   resultexpectedr*   r*   r+   test_set_index_empty_columnD   s   


 z(TestSetIndex.test_set_index_empty_columnc                 C   sT   t tddtddg d}|ddg}|j j}|ddg j}t|| d S )Nzdatetime64[ns]dtypeint64r   r   r   r   r   )r   r   r6   r8   to_framedtypesrG   assert_series_equal)r7   df1df2rI   rJ   r*   r*   r+   test_set_index_empty_dataframeV   s   z+TestSetIndex.test_set_index_empty_dataframec                 C   s   t g d}ttjdd|d}||jd }|j	d d dd f }|j	d d df j
|_|jd g|j_t|| d S )N))r   r3   )r   r   )r   r3   r   )r.   r.   rB   r   r3   )r
   r5   r   r$   r%   r&   r'   r6   rC   ilocvaluesr8   rE   rG   rH   )r7   rC   r)   rI   rJ   r*   r*   r+    test_set_index_multiindexcolumnsa   s   z-TestSetIndex.test_set_index_multiindexcolumnsc                 C   sv   t dgddd}td|i}||jd jdksJ t t|jd jdks+J ||jjd jdks9J d S )Nz2014-01-01 10:10:10UTCtzzEurope/Romer   r   r=   )r   
tz_convertr   r6   r8   hourr   r   )r7   idxr)   r*   r*   r+   test_set_index_timezonen   s
    z$TestSetIndex.test_set_index_timezonec                 C   sH   t dd tdD tjddd}|d}t|jt	s"J d S )Nc                 S   s    g | ]}t d ddt| qS )i  r3   r   .0ir*   r*   r+   
<listcomp>z   s     zBTestSetIndex.test_set_index_cast_datetimeindex.<locals>.<listcomp>i  r   r   r   r   )
r   ranger$   r%   r&   r'   r6   
isinstancer8   r   )r7   r)   idfr*   r*   r+   !test_set_index_cast_datetimeindexw   s   
z.TestSetIndex.test_set_index_cast_datetimeindexc                 C   s   t ddddd}tg dg dd|d	 }|d
}tg dg ddt|d
dd	}|jd |_t|| |d
dg}t	j
|g dgd
dgd}tdg di|d}t|| d S )Nz2006-10-29 00:00:00r.   h
US/Pacific)periodsfreqr[   r   r3   r   )r.   r/   r   )r   r   )datar8   r8   namer   rD   r   r8   )r   r   reset_indexr6   r	   r8   
_with_freqrG   rH   r
   rF   )r7   dir)   resexp	exp_indexr*   r*   r+   test_set_index_dst   s   

zTestSetIndex.test_set_index_dstc                 C   s   |}t tt|d d d }||}t|j| tj	t
dd ||d d d  W d    d S 1 s9w   Y  d S )NzLength mismatchmatchr   )r	   r$   arangelenr6   rG   assert_index_equalr8   pytestraises
ValueError)r7   float_string_framer)   r^   r*   r*   r+   test_set_index   s   
"zTestSetIndex.test_set_indexc                 C   s6  t tdttdtdtdd tdD tdd}d|j_|	|jjj
dgks,J tj|d	d
g jjd	d
gd}tj|g d jjg dd}|	d	d
g}|	|jjj
d	d
gks_J t|	|jjtskJ t|	|jj| |jddg}t|	|j|gjtsJ t|	|j|gj| d S )N)r;   r/   ABCDrL   c                 S   s   g | ]}d | qS )zi-r*   r`   r*   r*   r+   rc      s    z5TestSetIndex.test_set_index_names.<locals>.<listcomp>r;   )rC   r8   rp   r   r   rD   )r   r   r   r   )r   r   r   r   r   r   )r   r$   onesr	   listobjectre   r8   rp   r6   rE   r
   rF   TrW   rf   rG   r~   rename)r7   r)   mimi2idx2r*   r*   r+   test_set_index_names   s$   z!TestSetIndex.test_set_index_nameskeysr   r   r   r    inplaceTFdropc           	         s   | t |trtj fdd|D |d}nt | |d}|r' j|ddn }||_|rA  }|j||dd}|d u s@J n j||d	}t	
|| d S )
Nc                       g | ]} | qS r*   r*   ra   rA   r(   r*   r+   rc          z<TestSetIndex.test_set_index_drop_inplace.<locals>.<listcomp>rD   ro   r3   axisT)r   r   )r   )rf   r   r
   rF   r	   r   r8   copyr6   rG   rH   )	r7   r,   r   r   r   r^   rJ   rI   return_valuer*   r(   r+   test_set_index_drop_inplace   s   
z(TestSetIndex.test_set_index_drop_inplacec                    s   | t |tr	|n|g}tj jg fdd|D  d g| d}|r* j|ddn  }||_ j||dd}t	|| d S )Nc                    r   r*   r*   r   r(   r*   r+   rc      r   z6TestSetIndex.test_set_index_append.<locals>.<listcomp>rD   r3   r   Tr   append)
rf   r   r
   rF   r8   r   r   r6   rG   rH   )r7   r,   r   r   r^   rJ   rI   r*   r(   r+   test_set_index_append   s    z"TestSetIndex.test_set_index_appendc                 C   s\   |j dg|dd}t|tr|n|g}|j dg| |dd}|j ||dd}t|| d S )Nr   Tr   )r6   rf   r   rG   rH   )r7   r,   r   r   r)   rJ   rI   r*   r*   r+   #test_set_index_append_to_multiindex   s
   z0TestSetIndex.test_set_index_append_to_multiindexc                 C   sd   t g dg dd}t dddgitddgd	d
}|j|jdd  }|d	}t|| d S )Nrm   rO   )valkeyr   r3   r   r   r   r   ro   c                 S   s   | dkS )Nr3   r*   )indxr*   r*   r+   <lambda>   s    z<TestSetIndex.test_set_index_after_mutation.<locals>.<lambda>)r   r	   locr8   mapr6   rG   rH   )r7   r)   rJ   rT   rI   r*   r*   r+   test_set_index_after_mutation   s
   
z*TestSetIndex.test_set_index_after_mutationboxc                 C   s
   t | gS N)r   rA   r*   r*   r+   r   	  s   
 zTestSetIndex.<lambda>c                 C      t | gS r   r
   rF   r   r*   r*   r+   r   
      zappend, index_name)TNTr   TtestFNc                 C   s   |}||j _||d }|tkr4d}tjt|d |j|||d W d    d S 1 s-w   Y  d S t|dd }	|	d u rEt|dd gn|	}
|j|||d}|jdgd|d}|r_|g|
 n|
|j _t	
|| d S )Nr   z%['one', 'two', 'three', 'one', 'two']rz   r   rE   rp   F)r8   rp   r   r   r   KeyErrorr6   getattrrE   rG   rH   )r7   r,   r   r   
index_namer   r)   r   msgname_mirp   rI   rJ   r*   r*   r+    test_set_index_pass_single_array  s   "z-TestSetIndex.test_set_index_pass_single_arrayc                 C   r   r   r   r   r*   r*   r+   r   .  r   )r   Tr   r   r   r   c                 C   s   |}||j _d||d g}d|tjtttfv rd ndg}|j|||d}	|jddgd|d}
|r8|
jdddn|
}
|rA|g| n||
j _	t
|	|
 d S )Nr   r   r   Fr3   r   )r8   rp   r$   arrayr   r!   iterr6   r   rE   rG   rH   )r7   r,   r   r   r   r   r)   r   rE   rI   rJ   r*   r*   r+   test_set_index_pass_arrays-  s   z'TestSetIndex.test_set_index_pass_arraysbox2c                 C   r   r   r   r   r*   r*   r+   r   T  r   c                 C      | j S r   ro   r   r*   r*   r+   r   U      box1c                 C   r   r   r   r   r*   r*   r+   r   `  r   c                 C   r   r   ro   r   r*   r*   r+   r   a  r   )r   r   r   r   c                 C   s   |}||j _||d ||d g}|j|||d}	||d ||d g}t|d trB|d dkrBt|d trB|d dkrBdn|}
|j|d g|
|d}|j|d g|dd}t|	| d S )Nr   r   r   r3   FT)r8   rp   r6   rf   strrG   rH   )r7   r,   r   r   r   r   r   r)   r   rI   
first_droprJ   r*   r*   r+   $test_set_index_pass_arrays_duplicateL  s"   z1TestSetIndex.test_set_index_pass_arrays_duplicater   c                 C   sV   |}t j|d |d gddgd}|j|||d}|jddgd|d}t|| d S )Nr   r   rD   r   F)r
   rF   r6   rG   rH   )r7   r,   r   r   r)   r   rI   rJ   r*   r*   r+   test_set_index_pass_multiindex  s
   z+TestSetIndex.test_set_index_pass_multiindexc                 C   s   t tdd dd}ttjdd|jd}|d}t	
|j| ttjdd|d}|d}t	
|j| | d}t	
|j| d S )Nabr   r   ro   r   r;   rd   )r   r   r   r$   r%   r&   r'   rW   r6   rG   r~   r8   rr   )r7   cir)   rg   r*   r*   r+   (test_construction_with_categorical_index  s   

z5TestSetIndex.test_construction_with_categorical_indexc              	   C   s   t g dg dttdtdddttdtdddd}d	d
dd	gdd
gd	d
gfD ]}|| }|j|jd}t|| q,d S )N)r3   r   r3   r3   r   )r;            "   abaabbacF)
categoriesorderedT)r   r   C1C2r   r   r   rB   )	r   r   r   r6   rr   reindexrC   rG   rH   )r7   r)   colsrI   r*   r*   r+   )test_set_index_preserve_categorical_dtype  s   z6TestSetIndex.test_set_index_preserve_categorical_dtypec                 C   s  t g dg dtdd}t|ddd|_|jd|_tg d	dd
}|dd}|jddd}t	
|jjd | t	
|jjd tddgdd
 |jjddgksZJ |dd}t	
|jjd tddgdd
 t	
|jjd | |jjddgksJ t tjdd}tg ddd}tg ddd}tdddd}|d }||}|j|dd}|j|dd}tg d	dd}tddgdd}t	
|jjd | t	
|jjd | t	
|jjd | t	
|jd| t	
|jd| t	
|jd| d S )N)r   r   r   r   r   r   )2011-07-19 07:00:002011-07-19 08:00:002011-07-19 09:00:00r   r   r   r0   )r#   r   valuer   T)utcrj   )r   r   r   ro   rY   r#   r   r   r3   r   r   r   z
US/EasternrZ   )2012-04-01 09:00r   r   2012-04-02 09:00r   r   z2011-01-01 09:00z
Asia/Tokyo)rk   r[   r   r   )r   re   r   popr8   r\   r   tz_localizer6   rG   r~   levelsr	   rE   	swaplevelr$   r%   r&   r   rs   get_level_values)r7   r)   rJ   idx1r   idx3	expected1	expected2r*   r*   r+   test_set_index_datetime  s`     

z$TestSetIndex.test_set_index_datetimec                 C   s  t tjdd}tdddd}||}tdddd}|||}td	dd
d}||}|j|dd}|j|dd}tdddd}tdddd}t|j	j
d | t|j	j
d | t|j	j
d | t|j	d| t|j	d| t|j	d| d S )Nr   r0   z
2011-01-01r.   Mrk   rl   z2013-01-01 09:00ri   2005YTr   r   r3   )r   r$   r%   r&   r   r   r6   rG   r~   r8   r   r   )r7   r)   r   r   r   r   r   r*   r*   r+   test_set_index_period	  s"   

z"TestSetIndex.test_set_index_periodN)!__name__
__module____qualname__r9   rK   rU   rX   r_   rh   rx   r   r   r   markparametrizer   r   r   r   r   r	   r$   r   r   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   r-   8   s    		# Rr-   c                   @   s   e Zd Zdd Zejdddgejdddgdd Zejdddgejdddgejjd	egd
gddd Z	ejjd	e
eejedd gg ddejjdddgddgdejdddgejdddgdd ZdS )TestSetIndexInvalidc                 C   s   |}t jtdd |jddd W d    n1 sw   Y  t jtdd |j|d |d gdd W d    d S 1 s@w   Y  d S )NzIndex has duplicate keysrz   r   T)verify_integrity)r   r   r   r6   )r7   r,   r)   r*   r*   r+   test_set_index_verify_integrity#  s   "z3TestSetIndexInvalid.test_set_index_verify_integrityr   TFr   c                 C   s2  |}t jtdd |jg d||d W d    n1 sw   Y  t jtdd |j|d |d dg||d W d    n1 sDw   Y  d}t jt|d |jt|d ||d W d    n1 siw   Y  t jt|d |jd|d t|d g||d W d    d S 1 sw   Y  d S )	Nz['foo', 'bar', 'baz']rz   )r   r   bazr   Xr   r   z%[('foo', 'foo', 'foo', 'bar', 'bar')])r   r   r   r6   r!   )r7   r,   r   r   r)   r   r*   r*   r+   test_set_index_raise_keys,  s    $"z-TestSetIndexInvalid.test_set_index_raise_keysr   set)idsc                 C   s   |}d}t jt|d |j||d ||d W d    n1 s"w   Y  t jt|d |jd|d ||d g||d W d    d S 1 sKw   Y  d S )N,The parameter "keys" may be a column key, .*rz   r   r   )r   r   	TypeErrorr6   )r7   r,   r   r   r   r)   r   r*   r*   r+   test_set_index_raise_on_typeB  s   $"z0TestSetIndexInvalid.test_set_index_raise_on_typec                 C   r   r   r   r   r*   r*   r+   r   T  r   zTestSetIndexInvalid.<lambda>)r   r	   znp.arrayr   r
   lengthr/   r0   	too_shorttoo_longc           	      C   s   |}t jddd|f}d}tjt|d |j||||d W d    n1 s,w   Y  tjt|d |jd|j||g||d W d    d S 1 sRw   Y  d S )Nr   r   r;   z<Length mismatch: Expected 5 rows, received array of length.*rz   r   r   )	r$   r%   r&   integersr   r   r   r6   r   )	r7   r,   r   r   r   r   r)   rW   r   r*   r*   r+   test_set_index_raise_on_lenR  s   "z/TestSetIndexInvalid.test_set_index_raise_on_lenN)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d Zdd Zd	S )
TestSetIndexCustomLabelTypec           	      C   s  G dd d}|dd}|dd}t |ddg|d	d
gi}t |ddgitd	d
g|dd}||}t|| ||g}t|| |dd}d}tjt|d || W d    n1 sbw   Y  tjt|d ||g W d    d S 1 sw   Y  d S )Nc                   @   s(   e Zd ZdddZdefddZeZdS )zKTestSetIndexCustomLabelType.test_set_index_custom_label_type.<locals>.ThingreturnNc                 S      || _ || _d S r   rp   colorr7   rp   r  r*   r*   r+   __init__r     
zTTestSetIndexCustomLabelType.test_set_index_custom_label_type.<locals>.Thing.__init__c                 S      dt | j dS Nz<Thing >reprrp   r7   r*   r*   r+   __str__v     zSTestSetIndexCustomLabelType.test_set_index_custom_label_type.<locals>.Thing.__str__r   N)r   r   r   r  r   r  __repr__r*   r*   r*   r+   Thingq  s    
r  OneredTwobluer   r3   r   r.   ro   rq   Threepinkz<Thing 'Three'>rz   )r   r	   r6   rG   rH   r   r   r   	r7   r  thing1thing2r)   rJ   rI   thing3r   r*   r*   r+    test_set_index_custom_label_typen  s"   

 

"z<TestSetIndexCustomLabelType.test_set_index_custom_label_typec           	      C   s  G dd dt }|ddg}|ddg}t|ddg|d	d
gi}t|ddgitd	d
g|dd}||}t|| ||g}t|| |ddg}d}tjt|d || W d    n1 sfw   Y  tjt|d ||g W d    d S 1 sw   Y  d S )Nc                   @   s   e Zd ZdefddZdS )zXTestSetIndexCustomLabelType.test_set_index_custom_label_hashable_iterable.<locals>.Thingr   c                 S   s$   t | }dtt|}d| dS )Nz, zfrozenset({z}))sortedjoinr   r	  )r7   tmpjoined_reprsr*   r*   r+   r    s   zaTestSetIndexCustomLabelType.test_set_index_custom_label_hashable_iterable.<locals>.Thing.__repr__N)r   r   r   r   r  r*   r*   r*   r+   r    s    r  r  r  r  r  r   r3   r   r.   ro   rq   r  r  z frozenset\(\{'Three', 'pink'\}\)rz   )		frozensetr   r	   r6   rG   rH   r   r   r   r  r*   r*   r+   -test_set_index_custom_label_hashable_iterable  s"    
"zITestSetIndexCustomLabelType.test_set_index_custom_label_hashable_iterablec                 C   s   G dd dt }|dd}|dd}tddgd	d
gg||gd}d}tjt|d || W d    n1 s9w   Y  tjt|d ||g W d    d S 1 sWw   Y  d S )Nc                   @   s$   e Zd ZdddZdefddZdS )zRTestSetIndexCustomLabelType.test_set_index_custom_label_type_raises.<locals>.Thingr   Nc                 S   r   r   r   r  r*   r*   r+   r    r  z[TestSetIndexCustomLabelType.test_set_index_custom_label_type_raises.<locals>.Thing.__init__c                 S   r  r  r  r
  r*   r*   r+   r    r  zZTestSetIndexCustomLabelType.test_set_index_custom_label_type_raises.<locals>.Thing.__str__r  )r   r   r   r  r   r  r*   r*   r*   r+   r    s    
r  r  r  r  r  r   r   r3   r.   rB   r   rz   )r   r   r   r   r   r6   )r7   r  r  r  r)   r   r*   r*   r+   'test_set_index_custom_label_type_raises  s   

"zCTestSetIndexCustomLabelType.test_set_index_custom_label_type_raisesc                 C   sf   t tjdd}tdddd}tdddd}||}t|j| ||}t|j| d S )Nr   r0   z
2011/01/01r   r   2013r   )	r   r$   r%   r&   r   r6   rG   r~   r8   )r7   r)   r   r   r*   r*   r+   test_set_index_periodindex  s   

z6TestSetIndexCustomLabelType.test_set_index_periodindexN)r   r   r   r  r   r!  r#  r*   r*   r*   r+   r   m  s
    &'r   )__doc__r   r   numpyr$   r   pandasr   r   r   r   r	   r
   r   r   r   r   pandas._testing_testingrG   fixturer,   r-   r   r   r*   r*   r*   r+   <module>   s    0
   mK