a
    Pfg                     @   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*   b/var/www/ai-form-bot/venv/lib/python3.9/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]ZdtypeZint64r   r   r   r   r   )r   r   r6   r8   Zto_frameZdtypesrG   Zassert_series_equal)r7   Z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   Z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sVJ ||jjd jdksrJ 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	sDJ d S )Nc                 S   s    g | ]}t d ddt| qS )i  r3   r   .0ir*   r*   r+   
<listcomp>z       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freqrT   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   Zdir)   resexpZ	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    n1 sp0    Y  d S )NzLength mismatchmatchr   )r	   r$   Zarangelenr6   rG   assert_index_equalr8   pytestraises
ValueError)r7   Zfloat_string_framer)   rW   r*   r*   r+   test_set_index   s    
zTestSetIndex.test_set_indexc                 C   s8  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sXJ 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sJ t|	|jjtsJ t|	|jj| |jddg}t|	|j|gjtsJ t|	|j|gj| d S )N)r;   r/   ZABCDrL   c                 S   s   g | ]}d | qS )zi-r*   rY   r*   r*   r+   r\      r]   z5TestSetIndex.test_set_index_names.<locals>.<listcomp>r;   )rC   r8   rj   r   r   rD   )r   r   r   r   )r   r   r   r   r   r   )r   r$   Zonesr	   listobjectr_   r8   rj   r6   rE   r
   rF   TrP   r`   rG   ru   rename)r7   r)   miZ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}|rN j|ddn }||_|r  }|j||dd}|d u sJ n j||d	}t	
|| d S )
Nc                    s   g | ]} | qS r*   r*   rZ   rA   r(   r*   r+   r\      r]   z<TestSetIndex.test_set_index_drop_inplace.<locals>.<listcomp>rD   ri   r3   ZaxisT)r   r   )r   )r`   rz   r
   rF   r	   r   r8   copyr6   rG   rH   )	r7   r,   r   r   r   rW   rJ   rI   Z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}|rT j|ddn  }||_ j||dd}t	|| d S )Nc                    s   g | ]} | qS r*   r*   r   r(   r*   r+   r\      r]   z6TestSetIndex.test_set_index_append.<locals>.<listcomp>rD   r3   r   Tr   append)
r`   rz   r
   rF   r8   r   r   r6   rG   rH   )r7   r,   r   r   rW   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   r`   rz   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 )Nrg   rM   )valkeyr   r3   r   r   r   r   ri   c                 S   s   | dkS )Nr3   r*   )Zindxr*   r*   r+   <lambda>   r]   z<TestSetIndex.test_set_index_after_mutation.<locals>.<lambda>)r   r	   locr8   mapr6   rG   rH   )r7   r)   rJ   rN   rI   r*   r*   r+   test_set_index_after_mutation   s
    
z*TestSetIndex.test_set_index_after_mutationboxc                 C   s
   t | gS N)rz   rA   r*   r*   r+   r   	  r]   zTestSetIndex.<lambda>c                 C   s   t | gS r   r
   rF   r   r*   r*   r+   r   
  r]   zappend, index_name)TNTr   TtestFNc                 C   s   |}||j _||d }|tkrdd}tjt|d  |j|||d W d    q1 sX0    Y  njt|dd }	|	d u rt|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']rr   r   rE   rj   F)r8   rj   rz   rv   rw   KeyErrorr6   getattrrE   rG   rH   )r7   r,   r   r   
index_namer   r)   r   msgZname_mirj   rI   rJ   r*   r*   r+    test_set_index_pass_single_array  s    0z-TestSetIndex.test_set_index_pass_single_arrayc                 C   s   t | gS 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 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 )Nr   r   r   Fr3   r   )r8   rj   r$   arrayrz   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   s   t | gS r   r   r   r*   r*   r+   r   T  r]   c                 C   s   | j S r   ri   r   r*   r*   r+   r   U  r]   box1c                 C   s   t | gS r   r   r   r*   r*   r+   r   `  r]   c                 C   s   | j S r   ri   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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 )Nr   r   r   r3   FT)r8   rj   r6   r`   strrG   rH   )r7   r,   r   r   r   r   r   r)   r   rI   Z
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   ri   r   r;   r^   )r   rz   r   r$   r%   r&   r'   rP   r6   rG   ru   r8   rl   )r7   cir)   ra   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|| qXd S )N)r3   r   r3   r3   r   )r;            "   ZabaabZbacF)
categoriesorderedT)r   r   C1C2r   r   r   rB   )	r   r   rz   r6   rl   Z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sJ |dd}t	
|jjd tddgdd
 t	
|jjd | |jjddgks
J 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)utcrd   )r   r   r   ri   rR   r#   r   r   r3   r   r   r   z
US/EasternrS   )2012-04-01 09:00r   r   2012-04-02 09:00r   r   z2011-01-01 09:00z
Asia/Tokyo)re   rT   r   r   )r   r_   r   popr8   rU   r   Ztz_localizer6   rG   ru   levelsr	   rE   Z	swaplevelr$   r%   r&   r   rm   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re   rf   z2013-01-01 09:00rc   Z2005YTr   r   r3   )r   r$   r%   r&   r   r   r6   rG   ru   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   rO   rQ   rX   rb   rp   ry   r   rv   markparametrizer   r   r   r   r   r	   r$   r   rz   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 s60    Y  t jtdd* |j|d |d gdd W d    n1 s~0    Y  d S )NzIndex has duplicate keysrr   r   T)Zverify_integrity)rv   rw   rx   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<0    Y  t jtdd. |j|d |d dg||d W d    n1 s0    Y  d}t jt|d( |jt|d ||d W d    n1 s0    Y  t jt|d2 |jd|d t|d g||d W d    n1 s$0    Y  d S )	Nz['foo', 'bar', 'baz']rr   )r   r   Zbazr   Xr   r   z%[('foo', 'foo', 'foo', 'bar', 'bar')])rv   rw   r   r6   r!   )r7   r,   r   r   r)   r   r*   r*   r+   test_set_index_raise_keys,  s    2<6z-TestSetIndexInvalid.test_set_index_raise_keysr   set)Zidsc                 C   s   |}d}t jt|d( |j||d ||d W d    n1 sD0    Y  t jt|d2 |jd|d ||d g||d W d    n1 s0    Y  d S )N,The parameter "keys" may be a column key, .*rr   r   r   )rv   rw   	TypeErrorr6   )r7   r,   r   r   r   r)   r   r*   r*   r+   test_set_index_raise_on_typeB  s    6z0TestSetIndexInvalid.test_set_index_raise_on_typec                 C   s   t | gS r   r   r   r*   r*   r+   r   T  r]   zTestSetIndexInvalid.<lambda>)r   r	   znp.arrayr   r
   lengthr/   r0   Z	too_shortZtoo_longc           	      C   s   |}t jddd|f}d}tjt|d$ |j||||d W d    n1 sX0    Y  tjt|d, |jd|j||g||d W d    n1 s0    Y  d S )Nr   r   r;   z<Length mismatch: Expected 5 rows, received array of length.*rr   r   r   )	r$   r%   r&   Zintegersrv   rw   rx   r6   r   )	r7   r,   r   r   r   r   r)   rP   r   r*   r*   r+   test_set_index_raise_on_lenR  s    2z/TestSetIndexInvalid.test_set_index_raise_on_lenN)r   r   r   r   rv   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 s0    Y  tjt|d ||g W d    n1 s0    Y  d S )Nc                   @   s,   e Zd ZddddZedddZeZdS )zKTestSetIndexCustomLabelType.test_set_index_custom_label_type.<locals>.ThingNreturnc                 S   s   || _ || _d S r   rj   colorr7   rj   r   r*   r*   r+   __init__r  s    zTTestSetIndexCustomLabelType.test_set_index_custom_label_type.<locals>.Thing.__init__c                 S   s   dt | j dS Nz<Thing >reprrj   r7   r*   r*   r+   __str__v  s    zSTestSetIndexCustomLabelType.test_set_index_custom_label_type.<locals>.Thing.__str__)r   r   r   r   r   r   __repr__r*   r*   r*   r+   Thingq  s   r   OneredTwobluer   r3   r   r.   ri   rk   Threepinkz<Thing 'Three'>rr   )r   r	   r6   rG   rH   rv   rw   r   	r7   r   thing1thing2r)   rJ   rI   Z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 s0    Y  tjt|d ||g W d    n1 s0    Y  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   )r7   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   r3   r   r.   ri   rk   r   r   z frozenset\(\{'Three', 'pink'\}\)rr   )		frozensetr   r	   r6   rG   rH   rv   rw   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 sr0    Y  tjt|d ||g W d    n1 s0    Y  d S )Nc                   @   s(   e Zd ZddddZedddZdS )zRTestSetIndexCustomLabelType.test_set_index_custom_label_type_raises.<locals>.ThingNr   c                 S   s   || _ || _d S r   r   r   r*   r*   r+   r     s    z[TestSetIndexCustomLabelType.test_set_index_custom_label_type_raises.<locals>.Thing.__init__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__)r   r   r   r   r   r   r*   r*   r*   r+   r     s   r   r   r   r   r   r   r   r3   r.   rB   r   rr   )r   r   rv   rw   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   Z2013r   )	r   r$   r%   r&   r   r6   rG   ru   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$   rv   Zpandasr   r   r   r   r	   r
   r   r   r   r   Zpandas._testingZ_testingrG   Zfixturer,   r-   r   r   r*   r*   r*   r+   <module>   s   0
   mK