U
    NZf/                     @   s   d dl Zd dlZd dlmZ d dlmZ d dlZd dlm	Z	m
Z
 d dlmZ d+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ddgdd Zejd ddgd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Z dS ),    N)PY311)DatetimeTZDtype)CategoricalIndex
MultiIndexFc                 C   sP   t | t |kstt| |D ],\}}t|}t|}tj|||d qd S )Ncheck_dtype)lenAssertionErrorzipnpZasarraytmZassert_numpy_array_equal)actualexpectedr   Zactexp r   K/tmp/pip-unpacked-wheel-nbcvw55c/pandas/tests/indexes/multi/test_get_set.pyassert_matching   s
    

r   c              	   C   s~   ddg| _ | ddkst| ddks.td}tjt|d | d W 5 Q R X tjtdd | d W 5 Q R X d S )N   r   z/Too many levels: Index has only 2 levels, not 3match   zLevel fourth not foundZfourth)names_get_level_numberr	   pytestraises
IndexErrorKeyError)idxmsgr   r   r   test_get_level_number_integer   s    
r   c                  C   sh   t jdddgdddgtjdddd	gd
ddgd} ttdtdtddd}t	|| j
 d S )Nr   r      abc20200101UTCZperiodstzintstringdtr   int64Outcr'   )r(   r)   r*   r   from_productpd
date_rangeSeriesr   dtyper   r   assert_series_equaldtypesZidx_multityper   r   r   r   test_get_dtypes%   s     r9   c               	   C   s^   t dddgdddgtjdddd	g} ttd
tdtddd}t	|| j
 d S )Nr   r   r    r!   r"   r#   r$   r%   r&   r,   r-   r.   r/   )Zlevel_0Zlevel_1Zlevel_2r0   r8   r   r   r   test_get_dtypes_no_level_name5   s    r:   c                  C   sp   t jdddgdddgtjdddd	gd
d
d
gdj} tjtdtdtddgd
d
d
gd}t	
| | d S )Nr   r   r    r!   r"   r#   r$   r%   r&   Ar+   r,   r-   r.   r/   )index)r   r1   r2   r3   r7   r4   r   r5   r   r   r6   )resultr   r   r   r   %test_get_dtypes_duplicate_level_namesH   s    r>   c              	   C   sT   | }t jtdd |jd W 5 Q R X t jtdd |jd W 5 Q R X d S )NzToo many levelsr   r   znot a valid level number)r   r   r   r<   r   )Z multiindex_dataframe_random_dataframer   r   r   #test_get_level_number_out_of_boundsY   s
    rA   c              	   C   s  | j | jkstdd |D }| |}| j|ks6t|j|ksDtd}tjt|d |||  W 5 Q R X dd |D }|j|dd}|d kst|j|kst| j|d dd	}| j|kst|j|d |d
 gkst|j|d ddd}|d kst|j|d |d
 gkst| j|dd
gd	}| j|ks@t|j|ksPt|j|dd
gdd}|d ksrt|j|kstd S )Nc                 S   s   g | ]}|d  qS )ZSUFFIXr   .0namer   r   r   
<listcomp>e   s     z)test_set_name_methods.<locals>.<listcomp>z9Length of names must match number of levels in MultiIndexr   c                 S   s   g | ]}|d  qS )ZSUFFIX2r   rB   r   r   r   rE   l   s     T)inplacer   levelr   rH   rF   )rename	set_namesr	   r   r   r   
ValueError)r   Zindex_namesZ	new_namesindr   Z
new_names2resr   r   r   test_set_name_methodsb   s0    
rO   c              	   C   s   | j }dd |D }| j}|\}}dd |D }dd |D }||g}d}tjt|d || _ W 5 Q R X trrdnd}tjt|d || _W 5 Q R X d S )	Nc                 S   s   g | ]}d d |D qS )c                 S   s   g | ]}|d  qS r!   r   rC   Zlevr   r   r   rE      s     z=test_set_levels_codes_directly.<locals>.<listcomp>.<listcomp>r   rC   rH   r   r   r   rE      s     z2test_set_levels_codes_directly.<locals>.<listcomp>c                 S   s   g | ]}|d  d qS r   r    r   rC   xr   r   r   rE      s     c                 S   s   g | ]}|d  d  qS r   r   rT   r   r   r   rE      s     zCan't set attributer   z5property 'codes' of 'MultiIndex' object has no setterzcan't set attribute)levelscodesr   r   AttributeErrorr   )r   rW   
new_levelsrX   major_codesminor_codes	new_codesr   r   r   r   test_set_levels_codes_directly   s     r^   c              	   C   s  | j }dd |D }| |}t|j | t| j | | j|d dd}t|j |d |d g t| j | | j|d dd}t|j |d |d g t| j | | j|ddgd}t|j | t| j | |  }tjtdd | jdgdd W 5 Q R X t| j |j d	d
 tjtdd  | jddddddgdd W 5 Q R X t| j|jd	d
 tjt	dd | jddd W 5 Q R X t| j |j d	d
 tjt	dd | jddd W 5 Q R X t| j|jd	d
 d S )Nc                 S   s   g | ]}d d |D qS )c                 S   s   g | ]}|d  qS rP   r   rQ   r   r   r   rE      s     z.test_set_levels.<locals>.<listcomp>.<listcomp>r   rR   r   r   r   rE      s     z#test_set_levels.<locals>.<listcomp>r   rG   r   z^Onr   r#   Tr   r   r          z^Levelsz^Codes)
rW   
set_levelsr   copyr   r   rL   	set_codesrX   	TypeError)r   rW   rZ   ind2Zoriginal_indexr   r   r   test_set_levels   s6    
$rf   c           	      C   sD  | j }|\}}dd |D }dd |D }||g}| |}t|j | t| j | | j|d dd}t|j |d |d g t| j | | j|d dd}t|j |d |d g t| j | | j|ddgd}t|j | t| j | tdd tdD }td	d
d
}tdd |D }|j|dd}||s@td S )Nc                 S   s   g | ]}|d  d qS rS   r   rT   r   r   r   rE      s     z"test_set_codes.<locals>.<listcomp>c                 S   s   g | ]}|d  d  qS rV   r   rT   r   r   r   rE      s     r   rG   r   c                 S   s   g | ]}d |fqS r   r   rC   ir   r   r   rE      s           c                 S   s   g | ]}d |fqS rg   r   rh   r   r   r   rE      s     )rX   rH   )rX   rc   r   r   from_tuplesrangeequalsr	   )	r   rX   r[   r\   r]   re   rM   r   r=   r   r   r   test_set_codes   s,    
rp   c              	   C   s  | j | j }}| j}tjtdd | |d g W 5 Q R X tjtdd | |d g W 5 Q R X tjtdd | |d g W 5 Q R X tjt	dd | |d  W 5 Q R X tjt	dd | |d  W 5 Q R X tjt	dd | |d  W 5 Q R X tjt	dd | j|d ddgd	 W 5 Q R X tjt	dd | j|dd	 W 5 Q R X tjt	dd | j|d ddgd	 W 5 Q R X tjt	dd | j|dd	 W 5 Q R X tjtdd | j|d ddgd	 W 5 Q R X tjt	d
d | j|dd	 W 5 Q R X d S )NzLength of levelsr   r   zLength of codeszLength of nameszlist of lists-likez	list-liker   rG   zNames must be a)
rW   rX   r   r   r   rL   ra   rc   rK   rd   )r   rW   rX   r   r   r   r   %test_set_levels_codes_names_bad_input   s4       rq   rF   Tc                 C   sT   t ddggddggdgd}t ddgg}|jdd| d}| rD|}t|| d S )Nr   r   first)rW   rX   r   rI   )r   r1   rK   r   assert_index_equal)rF   r   mr=   r   r   r   test_set_names_with_nlevel_1  s    ru   orderedc                 C   s   t tdddddgg}ttd| d}|j|dd}t |ddddgg|jd	}t|| |d}ttd
|j	|j
d}t|| d S )NZxyzxr   r   r   r    Zbac)rv   rG   )rW   rX   Zbacb)
categoriesrv   )r   from_arrayslistr   ra   rX   r   rs   Zget_level_valuesrw   rv   )rv   r<   Zcidxr=   r   Z
result_lvlZexpected_lvlr   r   r   test_set_levels_categorical.  s    
  rz   c                  C   s   ddddddg} dddgd }t j| |gddgd	}tjtjd
dddddg|d}| }|jd kslt	|j
jdks|t	d|jd< |jd kst	|j
jdkst	d S )NZhansgrethe123r   NameNumberr+      r_   oneZtwoZthreeZfour)columnsr<   )r   r   g(\X@))r{   4r   )r   rx   r2   Z	DataFramer   randomZrandnZ
sort_indexZ_is_copyr	   r<   r   at)Zlev1Zlev2r   Zdfr   r   r   test_set_value_keeps_names?  s     
 
r   c                  C   st   dddg} dgd }t j| |gddgd}|jttdd	d
gdd}dddg}t j||gddgd}t|| d S )Nr   r   r    Zblacksizecolorr+   r~   r}   r|   rG   )r   rx   ra   mapr(   r   rs   )Zsizescolorsr<   r=   Zexpected_sizesr   r   r   r   test_set_levels_with_iterableO  s    


r   c                  C   sN   t jg gdgd} | jtg dd}t jtg gdgd}t|| d S )Nr;   r+   r   rG   )r   rx   ra   r2   ZDatetimeIndexr   rs   )Zmidxr=   r   r   r   r   test_set_empty_level\  s    r   c               	   C   sx   t jddgddgd} tjtdd | dd	d
gd W 5 Q R X tjtdd | ddgddggd W 5 Q R X d S )N)r   r   )r    r   Zfoobarr+   zpositional argumentsr   r!   r"   r#   r   r   )r   rm   r   r   rd   ra   rc   )r   r   r   r    test_set_levels_pos_args_removald  s    r   )F)!Znumpyr   r   Zpandas.compatr   Zpandas.core.dtypes.dtypesr   Zpandasr2   r   r   Zpandas._testingZ_testingr   r   r   r9   r:   r>   rA   rO   r^   rf   rp   rq   markZparametrizeru   rz   r   r   r   r   r   r   r   r   <module>   s2   

	"-&/

