U
    f/eP@                     @   s&  d dl Zd dl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ejdddgdd Zdd Zejdddg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S )/    N)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-tiezk1ph/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pdZ
date_rangeZSeriesr
   Zdtyper   r   Zassert_series_equalZdtypesZidx_multityper   r   r   r   test_get_dtypes#   s     r3   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_2r/   r2   r   r   r   test_get_dtypes_no_level_name3   s    r4   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   indexr   )Z multiindex_dataframe_random_dataframer   r   r   #test_get_level_number_out_of_boundsF   s
    r8   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>R   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   r9   r   r   r   r<   Y   s     Tinplacer   levelr   r@   r>   )rename	set_namesr   r   r   r   
ValueError)r   Zindex_namesZ	new_namesindr   Z
new_names2resr   r   r   test_set_name_methodsO   s0    
rG   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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   r:   Zlevr   r   r   r<   u   s     z=test_set_levels_codes_directly.<locals>.<listcomp>.<listcomp>r   r:   r@   r   r   r   r<   u   s     z2test_set_levels_codes_directly.<locals>.<listcomp>c                 S   s   g | ]}|d  d qS r   r   r   r:   xr   r   r   r<   y   s     c                 S   s   g | ]}|d  d  qS r   r   rL   r   r   r   r<   z   s     z[Cc]an't set attributer   )levelscodesr   r   AttributeError)r   rO   
new_levelsrP   major_codesminor_codes	new_codesr   r   r   r   test_set_levels_codes_directlyq   s    rV   c                 C   s  | j }dd |D }| |}t|j | t| j | |  }tt |j|dd}W 5 Q R X |d ksnt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t |j|d ddd}W 5 Q R X |d ksPtt|j |d |d g t| j | |  }tt |j|d ddd}W 5 Q R X |d kstt|j |d |d g t| j | |  }tt |j|ddgdd}W 5 Q R X |d kstt|j | t| j | |  }d	D ]\}tj	t
d
d. tt | jdgd|d W 5 Q R X W 5 Q R X t| j |j dd tj	t
d
d8 tt" | jddddddgd|d W 5 Q R X W 5 Q R X t| j|jdd tj	tdd, tt | jdd|d W 5 Q R X W 5 Q R X t| j |j dd tj	tdd, tt | jdd|d W 5 Q R X W 5 Q R X t| j|jdd q<d S )Nc                 S   s   g | ]}d d |D qS )c                 S   s   g | ]}|d  qS rH   r   rI   r   r   r   r<      s     z.test_set_levels.<locals>.<listcomp>.<listcomp>r   rJ   r   r   r   r<      s     z#test_set_levels.<locals>.<listcomp>Tr=   r   r?   r   rA   )TFz^Onr   r"   r   r   r         z^Levelsz^Codes)rO   
set_levelsr   copyr   assert_produces_warningFutureWarningr   r   r   rD   	set_codesrP   	TypeError)r   rO   rR   ind2inplace_returnZoriginal_indexr>   r   r   r   test_set_levels   sn    

&0$$ra   c           
   	   C   s  | j }|\}}dd |D }dd |D }||g}| |}t|j | t| j | |  }tt |j|dd}W 5 Q R X |d kst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t |j|d ddd	}W 5 Q R X |d ksntt|j |d |d g t| j | |  }tt |j|d ddd	}W 5 Q R X |d kstt|j |d |d g t| j | |  }tt |j|ddgdd	}W 5 Q R X |d ks6tt|j | t| j | t	d
d t
dD }t
ddd}t	dd |D }|j|dd}	|	|st| }	tt |	j|ddd W 5 Q R X |	|std S )Nc                 S   s   g | ]}|d  d qS rK   r   rL   r   r   r   r<      s     z"test_set_codes.<locals>.<listcomp>c                 S   s   g | ]}|d  d  qS rN   r   rL   r   r   r   r<      s     Tr=   r   r?   r   rA   c                 S   s   g | ]}d |fqS r   r   r:   ir   r   r   r<     s           c                 S   s   g | ]}d |fqS rb   r   rc   r   r   r   r<     s     )rP   r@   rP   r@   r>   )rP   r]   r   rZ   r   r[   r\   r   r   from_tuplesrangeequals)
r   rP   rS   rT   rU   r_   r`   rE   r   resultr   r   r   test_set_codes   sb    
rm   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   r?   zNames must be a)
rO   rP   r   r   r   rD   rY   r]   rC   r^   )r   rO   rP   r   r   r   r   %test_set_levels_codes_names_bad_input  s4       rn   r>   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rO   rP   r   rA   )r   r0   rC   r   assert_index_equal)r>   r   mrl   r   r   r   test_set_names_with_nlevel_1M  s    rs   c               	   C   s   t ddgddgg} d}tjt|d | ddgd }W 5 Q R X t ddgddggd	d	d
d
gd	d
d	d
ggddgd}t|| d S )NpythonZcobrai  i  zxIn a future version of pandas all arguments of MultiIndex.set_names except for the argument 'names' will be keyword-onlyr   kindyearr   r   rp   )r   r0   r   r[   r\   rC   rq   r   r   rl   r   r   r   r   )test_multi_set_names_pos_args_deprecation\  s    rx   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)ry   r?   )rO   rP   Zbacb)
categoriesry   )r   from_arrayslistr   rY   rP   r   rq   Zget_level_valuesrz   ry   )ry   r6   Zcidxrl   r   Z
result_lvlZexpected_lvlr   r   r   test_set_levels_categoricalm  s    
  r}   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*      rW   onetwoZthreeZfour)columnsr6   )r   r   g(\X@))r~   4r   )r   r{   r1   Z	DataFramer
   randomZrandnZ
sort_indexZ_is_copyr   r6   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   r?   )r   r{   rY   mapr'   r   rq   )Zsizescolorsr6   rl   Zexpected_sizesr   r   r   r   test_set_levels_with_iterable  s    


r   c              	   C   s>   | j d d d d }tt | j|d|d W 5 Q R X d S )Nr   rg   rh   )rP   r   r[   r\   r]   )r   r>   rU   r   r   r   !test_set_codes_inplace_deprecated  s    r   c              	   C   s8   | j d  }tt | j|d|d W 5 Q R X d S )Nr   )rO   r@   r>   )rO   rZ   r   r[   r\   rY   )r   r>   Z	new_levelr   r   r   "test_set_levels_inplace_deprecated  s    r   c               	   C   sp   t jdddgddgd} d}tjt|d | d	d
dgd}W 5 Q R X t jdddgddgd}t|| d S )N)r   r   )r   r   )r   r   foobarr*   zzIn a future version of pandas all arguments of MultiIndex.set_levels except for the argument 'levels' will be keyword-onlyr   r    r!   r"   r   )r    r   )r!   r   )r"   r   )r   ri   r   r[   r\   rY   rq   rw   r   r   r   $test_set_levels_pos_args_deprecation  s&    	r   c              
   C   sx   d}t jt|d2 | ddddddgddddddggddg}W 5 Q R X tjddd	d
ddgddgd}t || d S )NzxIn a future version of pandas all arguments of MultiIndex.set_codes except for the argument 'codes' will be keyword-onlyr   r   r   r   r   )r   r   )r   r   )r   r   )Zbazr   )quxr   )r   r   ro   secondr*   )r   r[   r\   r]   r   ri   rq   rw   r   r   r   $test_set_codes_pos_args_depreciation  s    6r   )F)!Znumpyr
   r   Zpandas.core.dtypes.dtypesr   Zpandasr1   r   r   Zpandas._testingZ_testingr   r   r   r3   r4   r8   rG   rV   ra   rm   rn   markZparametrizers   rx   r}   r   r   r   r   r   r   r   r   r   r   <module>   s8   

	"PJ/



