U
    *if{e                     @   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 ddlm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	DataFrameDatetimeIndexIndex
MultiIndexSeries
date_rangeperiod_rangeto_datetimec                   @   s~  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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*d+d,d-d.gejdddgd/d0 Zejd&eeejed1d( gejd*d+d2d,d-d.gejdddgd3d4 Zejd5eeejeed6d( d7d( gejd8eeejeed9d( d:d( gejd*d+d2d-d.gejdddgd;d< Zejd=ddgejdddgd>d? Zd@dA ZdBdC ZdDdE Z dFdG Z!dHS )ITestSetIndexc                 C   sL   dddgdddgd}t |}dd	d
g}||d< t|d }|| d S )N   g      @            )t1t2)r      )r   r   )r   r   tuples)r   r	   from_tuples	set_index)selfddfr   index r   \/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/frame/methods/test_set_index.pytest_set_index_multiindex   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ddddgd}|ddg}|ddg }tj|d |d gddgd|_t|| d S )Nr   r   )apr   
   )r!   mr         )r!   r$   r"   r         r!   r$   r"   xcolumnsnames)r   r   r	   from_arraysr   tmassert_frame_equal)r   r   resultexpectedr   r   r   test_set_index_empty_column'   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])ZdtypeZint64)r!   bcr!   r4   )r   r
   r   r   Zto_frameZdtypesr/   Zassert_series_equal)r   Zdf1df2r1   r2   r   r   r   test_set_index_empty_dataframe9   s    z+TestSetIndex.test_set_index_empty_dataframec                 C   s   t dddg}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)foor   )r8   r   )barr   r   r*   r   r   )r	   r   r   nprandomrandnr   r+   Zilocvaluesr   r-   r/   r0   )r   r+   r   r1   r2   r   r   r    test_set_index_multiindexcolumnsD   s    z-TestSetIndex.test_set_index_multiindexcolumnsc                 C   sv   t dgddd}td|i}||jd jdks:tt t|jd jdksVt||jjd jdksrtd S )Nz2014-01-01 10:10:10UTCtzzEurope/RomeAr   r%   )	r   
tz_convertr   r   r   hourAssertionErrorr
   rB   )r   idxr   r   r   r   test_set_index_timezoneO   s
    z$TestSetIndex.test_set_index_timezonec                 C   sB   t dd tdD tjdd}|d}t|jts>t	d S )Nc                 S   s    g | ]}t d ddt| qS )i  r   r   ).0ir   r   r   
<listcomp>[   s     zBTestSetIndex.test_set_index_cast_datetimeindex.<locals>.<listcomp>i  rB   BrB   )
r   ranger:   r;   r<   r   
isinstancer   r   rE   )r   r   idfr   r   r   !test_set_index_cast_datetimeindexX   s    

z.TestSetIndex.test_set_index_cast_datetimeindexc                 C   s   t ddddd}tdddgdd	d
gd|d }|d}tdddgdd	d
gdt|ddd}|jd |_t|| |ddg}t	j
|dddggddgd}tddd	d
gi|d}t|| d S )Nz2006-10-29 00:00:00r   H
US/Pacific)periodsfreqrA   r   r   r   r   r   )r!   r4   )datar   r   namer!   r,   r4   r   )r   r   reset_indexr   r   r   
_with_freqr/   r0   r	   r.   )r   Zdir   resexpZ	exp_indexr   r   r   test_set_index_dstc   s    "

zTestSetIndex.test_set_index_dstc              	   C   sj   |}t tt|d d d }||}t|j| tj	t
dd ||d d d  W 5 Q R X d S )NzLength mismatchmatchr   )r   r:   Zarangelenr   r/   assert_index_equalr   pytestraises
ValueError)r   Zfloat_string_framer   rF   r   r   r   test_set_indexv   s    
zTestSetIndex.test_set_indexc                 C   s  t  }d|j_||jjjdgks*ttj|ddg j	j
ddgd}tj|ddddg j	j
ddddgd}|ddg}||jjjddgkstt||jjtstt ||jj| |jddg}t||j|gjtstt ||j|gj| d S )NrW   rB   rL   r,   CD)r/   ZmakeDataFramer   rW   r   r-   rE   r	   r.   Tr=   rN   rb   rename)r   r   miZmi2idx2r   r   r   test_set_index_names   s     
z!TestSetIndex.test_set_index_namesc                 C   sH   t dddgdddgddd	d
gd}||jtj}t|| d S )Ng?g@gffffff
@g      @gffffff@g@rK   i  i  i  rX   )r   r   r   Zastyper:   Zint32r/   r0   )r   r   r6   r   r   r   test_set_index_cast   s     z TestSetIndex.test_set_index_castkeysrB   rg   rL   )tupleaslabelinplaceTFdropc           	         s   | t |tr,tj fdd|D |d}nt | |d}|rN j|ddn }||_|r  }|j||dd}|d kst	n j||d	}t
|| d S )
Nc                    s   g | ]} | qS r   r   rH   r)   r   r   r   rJ      s     z<TestSetIndex.test_set_index_drop_inplace.<locals>.<listcomp>r,   rV   r   ZaxisT)rt   rs   )rt   )rN   listr	   r.   r   rt   r   copyr   rE   r/   r0   )	r   frame_of_index_colsrt   rs   ro   rF   r2   r1   Zreturn_valuer   rv   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}|rT j|ddn  }||_ j||dd}t	|| d S )Nc                    s   g | ]} | qS r   r   ru   rv   r   r   rJ      s     z6TestSetIndex.test_set_index_append.<locals>.<listcomp>r,   r   rw   Trt   append)
rN   rx   r	   r.   r   rt   ry   r   r/   r0   )r   rz   rt   ro   rF   r2   r1   r   rv   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 )Nrh   Tr|   )r   rN   rx   r/   r0   )r   rz   rt   ro   r   r2   r1   r   r   r   #test_set_index_append_to_multiindex   s
    z0TestSetIndex.test_set_index_append_to_multiindexc                 C   sh   t dddgdddgd}t dddgitddgd	d
}|j|jdd  }|d	}t|| d S )Nr   r   r   r!   r4   r5   )valkeyr   r   rV   c                 S   s   | dkS )Nr   r   )Zindxr   r   r   <lambda>       z<TestSetIndex.test_set_index_after_mutation.<locals>.<lambda>)r   r   locr   mapr   r/   r0   )r   r   r2   r6   r1   r   r   r   test_set_index_after_mutation   s
    
z*TestSetIndex.test_set_index_after_mutationboxc                 C   s
   t | gS N)rx   r)   r   r   r   r      r   zTestSetIndex.<lambda>c                 C   s   t | gS r   r	   r.   r   r   r   r   r      r   zappend, index_name)TN)TrL   )Ttest)FNc              	   C   s   |}||j _||d }|tkrPd}tjt|d |j|||d W 5 Q R X njt|dd }	|	d krrt|dd gn|	}
|j|||d}|jdgd|d}|r|g|
 n|
|j _t	
|| d S )NrL   z%['one', 'two', 'three', 'one', 'two']r_   r|   r-   rW   F)r   rW   rx   rc   rd   KeyErrorr   getattrr-   r/   r0   )r   rz   rt   r}   
index_namer   r   r   msgZname_mirW   r1   r2   r   r   r    test_set_index_pass_single_array   s    z-TestSetIndex.test_set_index_pass_single_arrayc                 C   s   t | gS r   r   r   r   r   r   r     r   )TrB   c                 C   s   |}||j _d||d g}d|tjtttfkr4d ndg}|j|||d}	|jddgd|d}
|rp|
jdddn|
}
|r|g| n||
j _	t
|	|
 d S )NrB   rL   r|   Fr   rw   )r   rW   r:   arrayrx   rp   iterr   rt   r-   r/   r0   )r   rz   rt   r}   r   r   r   ro   r-   r1   r2   r   r   r   test_set_index_pass_arrays  s    z'TestSetIndex.test_set_index_pass_arraysbox2c                 C   s   t | gS r   r   r   r   r   r   r   9  r   c                 C   s   | j S r   rV   r   r   r   r   r   :  r   box1c                 C   s   t | gS r   r   r   r   r   r   r   E  r   c                 C   s   | j S r   rV   r   r   r   r   r   F  r   c                 C   s   |}||j _||d ||d g}|j|||d}	||d ||d g}t|d tr|d dkrt|d tr|d dkrdn|}
|j|d g|
|d}|j|d g|dd}t|	| d S )NrB   r|   r   r   FT)r   rW   r   rN   strr/   r0   )r   rz   rt   r}   r   r   r   r   ro   r1   Z
first_dropr2   r   r   r   $test_set_index_pass_arrays_duplicate1  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 )NrB   rL   r,   r|   F)r	   r.   r   r/   r0   )r   rz   rt   r}   r   ro   r1   r2   r   r   r   test_set_index_pass_multiindexm  s
    z+TestSetIndex.test_set_index_pass_multiindexc                 C   s   t d}d|_ttjd|jd}|d}t 	|j
| ttjd|d}|d}t 	|j
| | d}t 	|j
| d S )Nr#   rL   rK   )r/   ZmakeCategoricalIndexrW   r   r:   r;   r<   r=   r   rb   r   rY   )r   cir   rO   r   r   r   (test_construction_with_categorical_indexz  s    


z5TestSetIndex.test_construction_with_categorical_indexc              	   C   s   t dddddgdddddg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|| qdd S )Nr   r   r#            "   ZabaabZbacF)
categoriesZorderedT)rB   rL   C1C2r   r   rB   r*   )	r   r   rx   r   rY   Zreindexr+   r/   r0   )r   r   colsr1   r   r   r   )test_set_index_preserve_categorical_dtype  s    z6TestSetIndex.test_set_index_preserve_categorical_dtypec                 C   s8  t ddddddgddddddgtdd}t|dd	d
|_|jd|_tdddg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st|dd}t	
|jjd tddgdd t	
|jjd | |jjddgkstt tjd}tddddddgdd}tddddddgdd}tdddd}|d }||}|j|d	d}|j|d	d}tdddg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 )Nr!   r4   z2011-07-19 07:00:00z2011-07-19 08:00:00z2011-07-19 09:00:00r   )rr   r   valuer   T)utcrR   rV   r?   rr   r}   r   r   z
US/Easternr@   z2012-04-01 09:00z2012-04-02 09:00z2011-01-01 09:00z
Asia/Tokyo)rS   rA   r   )r   rM   r   popr   rC   r   Ztz_localizer   r/   rb   levelsr   r-   rE   Z	swaplevelr:   r;   r   rZ   get_level_values)r   r   r2   idx1rl   idx3	expected1	expected2r   r   r   test_set_index_datetime  s      

 z$TestSetIndex.test_set_index_datetimec                 C   s  t tj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   z
2011-01-01r   MrS   rT   z2013-01-01 09:00r   rQ   Z2005rB   Tr   r   r   )r   r:   r;   r   r}   r   r/   rb   r   r   r   )r   r   r   rl   r   r   r   r   r   r   test_set_index_period  s"    

z"TestSetIndex.test_set_index_periodN)"__name__
__module____qualname__r    r3   r7   r>   rG   rP   r]   rf   rm   rn   rc   markparametrizer{   r~   r   r   r
   r   r:   r   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r      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dddddg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   sd   |}t jtdd |jddd W 5 Q R X t jtdd  |j|d |d gdd W 5 Q R X d S )NzIndex has duplicate keysr_   rB   T)Zverify_integrity)rc   rd   re   r   )r   rz   r   r   r   r   test_set_index_verify_integrity  s
    z3TestSetIndexInvalid.test_set_index_verify_integrityr}   TFrt   c              	   C   s   |}t jtdd |jdddg||d W 5 Q R X t jtdd$ |j|d |d	 dg||d W 5 Q R X d
}t jt|d |jt|d ||d W 5 Q R X t jt|d( |jd|d t|d g||d W 5 Q R X d S )Nz['foo', 'bar', 'baz']r_   r8   r9   Zbazr|   XrB   rL   z%[('foo', 'foo', 'foo', 'bar', 'bar')])rc   rd   r   r   rp   )r   rz   rt   r}   r   r   r   r   r   test_set_index_raise_keys  s     ("z-TestSetIndexInvalid.test_set_index_raise_keysr   set)Zidsc              	   C   sz   |}d}t jt|d |j||d ||d W 5 Q R X t jt|d( |jd|d ||d g||d W 5 Q R X d S )N,The parameter "keys" may be a column key, .*r_   rB   r|   )rc   rd   	TypeErrorr   )r   rz   r   rt   r}   r   r   r   r   r   test_set_index_raise_on_type&  s    "z0TestSetIndexInvalid.test_set_index_raise_on_typec                 C   s   t | gS r   r   r   r   r   r   r   8  r   zTestSetIndexInvalid.<lambda>r
   r   znp.arrayr   r	   lengthr   r   Z	too_shortZtoo_longc           	   	   C   s   |}t jdd|f}d}tjt|d |j||||d W 5 Q R X tjt|d" |jd|j||g||d W 5 Q R X d S )Nr   r#   z<Length mismatch: Expected 5 rows, received array of length.*r_   r|   rB   )r:   r;   randintrc   rd   re   r   rB   )	r   rz   r   r   rt   r}   r   r=   r   r   r   r   test_set_index_raise_on_len6  s    z/TestSetIndexInvalid.test_set_index_raise_on_lenN)r   r   r   r   rc   r   r   r   r   r   r
   r   r:   r   r   r   r   r   r   r   r     s"   	r   c                   @   s4   e Zd Zd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 5 Q R X tjt|d ||g W 5 Q R X d S )Nc                   @   s&   e Zd Zdd ZedddZeZdS )zKTestSetIndexCustomLabelType.test_set_index_custom_label_type.<locals>.Thingc                 S   s   || _ || _d S r   rW   colorr   rW   r   r   r   r   __init__V  s    zTTestSetIndexCustomLabelType.test_set_index_custom_label_type.<locals>.Thing.__init__returnc                 S   s   dt | j dS Nz<Thing >reprrW   r   r   r   r   __str__Z  s    zSTestSetIndexCustomLabelType.test_set_index_custom_label_type.<locals>.Thing.__str__N)r   r   r   r   r   r   __repr__r   r   r   r   ThingU  s   r   OneredTwobluer   r   r   r   rV   rX   Threepinkz<Thing 'Three'>r_   )r   r   r   r/   r0   rc   rd   r   	r   r   thing1thing2r   r2   r1   Zthing3r   r   r   r    test_set_index_custom_label_typeR  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 5 Q R X tjt|d ||g W 5 Q R X d S )Nc                   @   s   e Zd Zed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   )r   tmpZ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   r   r   r   rV   rX   r   r   z frozenset\(\{'Three', 'pink'\}\)r_   )		frozensetr   r   r   r/   r0   rc   rd   r   r   r   r   r   -test_set_index_custom_label_hashable_iterablex  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 5 Q R X tjt|d ||g W 5 Q R X d S )Nc                   @   s"   e Zd Zdd ZedddZdS )zRTestSetIndexCustomLabelType.test_set_index_custom_label_type_raises.<locals>.Thingc                 S   s   || _ || _d S r   r   r   r   r   r   r     s    z[TestSetIndexCustomLabelType.test_set_index_custom_label_type_raises.<locals>.Thing.__init__r   c                 S   s   dt | j dS r   r   r   r   r   r   r     s    zZTestSetIndexCustomLabelType.test_set_index_custom_label_type_raises.<locals>.Thing.__str__N)r   r   r   r   r   r   r   r   r   r   r     s   r   r   r   r   r   r   r   r   r   r*   r   r_   )r   r   rc   rd   r   r   )r   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   s`   t tjd}tdddd}tdddd}||}t|j| ||}t|j| d S )Nr   z
2011/01/01r   r   Z2013rB   )r   r:   r;   r   r   r/   rb   r   )r   r   r   rl   r   r   r   test_set_index_periodindex  s    

z6TestSetIndexCustomLabelType.test_set_index_periodindexc              	   C   sd   t ddddgi}d}tjt|d |dd}W 5 Q R X t tdddgddd	}t|| d S )
Nr!   r   r   r   zwIn a future version of pandas all arguments of DataFrame\.set_index except for the argument 'keys' will be keyword-onlyr_   TrV   rX   )r   r/   Zassert_produces_warningFutureWarningr   r   r0   )r   r   r   r1   r2   r   r   r   test_drop_pos_args_deprecation  s    z:TestSetIndexCustomLabelType.test_drop_pos_args_deprecationN)r   r   r   r   r   r   r   r   r   r   r   r   r   Q  s
   &'r   )__doc__r   r   numpyr:   rc   Zpandasr   r   r   r   r	   r
   r   r   r   Zpandas._testingZ_testingr/   r   r   r   r   r   r   r   <module>   s   ,   nK