U
    NZfh                     @   s  d dl mZm Z  d dlZ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mZmZmZ d dlm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ejddddejddddfedddd d!edddd"d!fej d#dddej d$dddfgd%d& Z!d'd( Z"d)d* Z#d+d, Z$ejd-d.d.gd.d/gd.gd/gd.d/ggd0d0gd0d1gd0gd1gd2d3d.gd/fd.d/gfd0d4d5d0gd1fd2d/gd.d6gd4d1gd7d8d9gd:d; Z%ejd<d.d/dgd0d1gfg d0d1gfd.d/dgg fgd=d> Z&d?d@ Z'dAdB Z(dCdD Z)dEdF Z*dGdH Z+dIdJ Z,dKdL Z-dMdN Z.dOdP Z/ejdQg g fdRdSdTgg fg d0d1dUgfgdVdW Z0ejdXe1e2dYdZd[ Z3ejd\d.d.gd.d/gd.gd/gd0d0gd0d1gd0gd1ggd]d^ Z4d_d` Z5dadb Z6ejdcdddegejdfdgdh didh djdh gdkdl Z7dmdn Z8dodp Z9ejdqed.d/dgdRdred0d1gdSdrdRdSgfed.d/dgdRdrd0d1gdRdgfd.d/dgd0d1gdfgdsdt Z:dudv Z;dwdx Z<dydz Z=d{d| Z>ejj?ed}d~dd Z@ejded.d/ddYgd.d/ddYgd.d/gddYgddgged.d/ddYgeAd.d/gddYgddggdgdd ZBdd ZCejddddgfddgddgfgdd ZDejddd0d1dUgdfgdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdS )    )datedatetimeN)pa_version_under7p0)'construct_1d_object_array_from_listlike)Index
MultiIndexSeries	Timestamp
date_rangec                  C   sl   t ddddggddddggd	gd
} t| t s2ttddddgd	d}t| jd | | jd	gkshtd S )Nfoobarbazquxr            firstlevelscodesnamesname)r   
isinstanceAssertionErrorr   tmassert_index_equalr   r   resultexpected r    P/tmp/pip-unpacked-wheel-nbcvw55c/pandas/tests/indexes/multi/test_constructors.pytest_constructor_single_level   s      r"   c               	   C   sz   d} t jt| d tg g d W 5 Q R X d} t jt| d tg d W 5 Q R X t jt| d tg d W 5 Q R X d S )Nznon-zero number of levels/codesmatchr   r   zMust pass both levels and codesr   )r   )pytestraises
ValueErrorr   	TypeErrormsgr    r    r!   test_constructor_no_levels#   s    r-   c               	   C   s   ddgddgg} ddddgddddgg}dgdgf}d}t jt|d	 t| ||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
}dgdgg}t jt|d	 |j|d W 5 Q R X t jt|d	 |j|d W 5 Q R X d S )Nr   r   onetwor   r   r   z(MultiIndex\.name must be a hashable typer#   r   )r   r   ZfoorZbarrr   )r'   r(   r*   r   renameZ	set_names)r   r   r   r,   miZrenamedr    r    r!   "test_constructor_nonhashable_names/   s     r3   c              	   C   s  t dgt dgt dgg}dg}d}tjt|d t||d W 5 Q R X d}d	}d
}tjt|d. tdgdggddddgddddggd W 5 Q R X tjt|d* tdgdggddddgddggd W 5 Q R X tjt|d |  dgdgg W 5 Q R X tjt|d$ |  ddddgddgg W 5 Q R X |  jddddgddggdd tjt|d& tdgdggddgddggd W 5 Q R X d S )Nr   r   r   az+Length of levels and codes must be the samer#   r%   zbOn level 0, code max \(3\) >= length of level \(1\)\. NOTE: this index is in an inconsistent statezUnequal code lengths: \[4, 2\]z"On level 0, code value \(-2\) < -1br      F)r   Zverify_integrity)	nparrayr'   r(   r)   r   copy
set_levels	set_codes)idxr   r   r,   Zlength_errorZlabel_errorZcode_value_errorr    r    r!   (test_constructor_mismatched_codes_levelsG   s(    "2. ("r>   c                  C   sV  t tjd tjddggddddddggd} t tjd tjddggddddddggd}t| | t tjd	tjdd ggddddddggd} t tjd	tjdd ggddddddggd}t| | t ddddd
ggddddddggdtjd	tjdd gg} t| | t tjd	tjdd ggddddddggdddddddgg} t| | d S )N   r   r   r   r   r6   r%   s   )	r   r8   nanpdNaTr   r   r;   r<   r   r    r    r!   test_na_levelsm   s@          rF   c               	   C   s   t dddg} t dddddddg}|d }t| | g||gdd}|jd d |ks\td	|d< |jd d |kszt| d }d
| d< |jd d |kstd S )Nr4   r5   cr   r   r   T)r   r   r:      ZPANDA)r8   r9   r   r   r   r   )r   r   valr2   r    r    r!   test_copy_in_constructor   s    rJ   c                 C   s   dd t | j| jD }tj|| jd}t||  ttj	t
dgddgg}|jd tt
dgsnt|jd tddgstd S )	Nc                 S   s    g | ]\}}t ||qS r    r8   asarraytake.0levZlevel_codesr    r    r!   
<listcomp>   s   z$test_from_arrays.<locals>.<listcomp>r0   Z20130101r4   r5   r   r   )zipr   r   r   from_arraysr   r   r   rD   rE   r	   equalsr   r   r=   arraysr   r    r    r!   test_from_arrays   s    rW   c              	   C   sd   dd t | j| jD }tjt|| jd}t||  d}t	j
t|d td W 5 Q R X d S )Nc                 S   s    g | ]\}}t ||qS r    rK   rN   r    r    r!   rQ      s   z-test_from_arrays_iterator.<locals>.<listcomp>r0   z/Input must be a list / sequence of array-likes.r#   r   )rR   r   r   r   rS   iterr   r   r   r'   r(   r*   )r=   rV   r   r,   r    r    r!   test_from_arrays_iterator   s    rY   c                 C   s<   t dd t| j| jD }tj|| jd}t||  d S )Nc                 s   s&   | ]\}}t t||V  qd S N)tupler8   rL   rM   rN   r    r    r!   	<genexpr>   s   z*test_from_arrays_tuples.<locals>.<genexpr>r0   )	r[   rR   r   r   r   rS   r   r   r   rU   r    r    r!   test_from_arrays_tuples   s
    r]   )idx1idx2
2011-01-01Dr   freqperiodsz
2015-01-01H2015-01-01 10:00
US/Easternrc   rd   tz
Asia/Tokyo1 daysz2 hoursc                 C   s|   t | |g}t|d|  t|d| t t| t|g}t|d|  t|d| t|| d S )Nr   r   )r   rS   r   r   get_level_valuesr   )r^   r_   r   result2r    r    r!   =test_from_arrays_index_series_period_datetimetz_and_timedelta   s    rn   c                  C   s  t ddddd} t dddd}tjdddd}tjd	ddd}t| |||g}t|d
|  t|d| t|d| t|d| tt	| t	|t	|t	|g}t|d
|  t|d| t|d| t|d| t|| d S )Nrf   ra   r   rg   rh   re   rb   rk   r`   r   r   r   )
r
   rD   timedelta_rangeperiod_ranger   rS   r   r   rl   r   )r^   r_   Zidx3Zidx4r   rm   r    r    r!   )test_from_arrays_index_datetimelike_mixed   s"    rq   c                  C   s   t jtdtddd} t jtdtddd}t| |g}t|d|  t|d| tt| t|g}t|d|  t|d| t| j	|j	g}t|d|  t|d| d S )NabcaabbacF
categoriesorderedTr   r   )
rD   CategoricalIndexlistr   rS   r   r   rl   r   values)r^   r_   r   rm   Zresult3r    r    r!   )test_from_arrays_index_series_categorical   s    rz   c               	   C   s   d} t jt| d tjg d W 5 Q R X tjg gdgd}t|tsJttg dd}t	|j
d | |jdgksxtdD ]R}g g| }td	d | }tj||d}tg g| g g| |d
}t	|| q|d S )N)Must pass non-zero number of levels/codesr#   rV   ArV   r   r   r   )r   r   ABCr   )r'   r(   r)   r   rS   r   r   r   r   r   r   r   rx   )r,   r   r   NrV   r   r    r    r!   test_from_arrays_empty  s    
r   invalid_sequence_of_arraysr   r   r4   r5   r   r   r   r4   r4   r5   r   )r   r   )r   r   )r   r5   c              	   C   s.   d}t jt|d tj| d W 5 Q R X d S )Nz.Input must be a list / sequence of array-likesr#   r|   )r'   r(   r*   r   rS   )r   r,   r    r    r!   test_from_arrays_invalid_input%  s    r   z
idx1, idx2c              	   C   s0   d}t jt|d t| |g W 5 Q R X d S )Nz ^all arrays must be same length$r#   )r'   r(   r)   r   rS   )r^   r_   r,   r    r    r!   "test_from_arrays_different_lengthsG  s    r   c                  C   st   t dddgdd} t dddgd	d}tj| |gd d
}tdddgdddggdddgdddggd d}t|| d S )Nr   r   r   r   r   r4   r5   rG   r   r0   r   r   )r   r   rS   r   r   r4   r5   r   r   r    r    r!   $test_from_arrays_respects_none_namesQ  s      r   c               	   C   st   d} t jt| d tg  W 5 Q R X tddgddggddgddggdd	gd
}tjddd	gd}t|| d S )Nz-Cannot infer number of levels from empty listr#   r   r   r   r6   r   r4   r5   r   )r   )r   r6   r0   )r'   r(   r*   r   from_tuplesr   r   )r,   r   r   r    r    r!   test_from_tuplesa  s      r   c               	   C   s   t ddgddggddgddggddgd} t jtddgddgddgd	}t||  d
}tjt|d t d W 5 Q R X d S )Nr   r   r   r6   r   r4   r5   r   r0   z/Input must be a list / sequence of tuple-likes.r#   )r   r   rR   r   r   r'   r(   r*   )r   r   r,   r    r    r!   test_from_tuples_iteratoro  s       r   c                  C   s8   t jg ddgd} t jg g gddgd}t| | d S )Nr4   r5   r0   r~   )r   r   rS   r   r   r   r    r    r!   test_from_tuples_empty  s    r   c                 C   s"   t | }|j| jk std S rZ   )r   r   ry   allr   )r=   r   r    r    r!   test_from_tuples_index_values  s    
r   c               	   C   s^   dddg} d}t jt|d t| dd W 5 Q R X t jt|d t| dd W 5 Q R X d S )	N)r   r   r   )r   r   r   )r   r   r   *Names should be list-like for a MultiIndexr#   abcr   r4   )r'   r(   r)   r   )lir,   r    r    r!   test_tuples_with_name_string  s    
r   c                  C   sf   t jdddgdddggdddgd	ddg} tjd
dgdd}t jddgdg|d}t| | d S )Nr   r   r6   r   r   r4   r5   rG   columns)r   r   )r6   r   r   r0   )r   index)rD   	DataFrameZ	set_indexr   r   r   Zassert_frame_equal)r   r=   r   r    r    r!   !test_from_tuples_with_tuple_label  s     r   c               	   C   s,   d} t jt| d tg  W 5 Q R X d S )Nr{   r#   )r'   r(   r)   r   from_productr+   r    r    r!   #test_from_product_empty_zero_levels  s    r   c                  C   sD   t jg gdgd} tg dd}t| jd | | jdgks@td S )Nr}   r0   r   r   )r   r   r   r   r   r   r   r   r   r    r    r!   !test_from_product_empty_one_level  s    r   zfirst, secondr   r   r   rG   c                 C   s@   ddg}t j| |g|d}t | |gg g g|d}t|| d S )Nr}   Br0   r   r   r   r   r   )r   secondr   r   r   r    r    r!   "test_from_product_empty_two_levels  s    r   r   r6   c                 C   sT   dddg}t t| }tjg |g g|d}tg |g gg g g g|d}t|| d S )Nr}   r   Cr0   r   )rx   ranger   r   r   r   )r   r   Zlvl2r   r   r    r    r!   $test_from_product_empty_three_levels  s
    
r   invalid_inputc              	   C   s.   d}t jt|d tj| d W 5 Q R X d S )NzDInput must be a list / sequence of iterables|Input must be list-liker#   )	iterables)r'   r(   r*   r   r   )r   r,   r    r    r!   test_from_product_invalid_input  s    r   c                  C   s`   t ddd} tddg| g}tdtdfdtdfdtdfdtdfg}t|j| d S )Nz
2000-01-01r   )rd   r   z
2000-01-02)r
   r   r   r   r	   r   Zassert_numpy_array_equalry   )Zdt_indexr2   Zetalonr    r    r!   test_from_product_datetimeindex  s    



r   c                  C   s<   t td} ddg}t| |g}tj|jd | dd d S )NrB   r4   r5   r   T)exact)r   r   r   r   r   r   Z_levels)rngotherr2   r    r    r!   test_from_product_rangeindex  s    r   rv   FTfc                 C   s   | S rZ   r    xr    r    r!   <lambda>      r   c                 C   s   t | S rZ   )r   r   r    r    r!   r     r   c                 C   s   | j S rZ   )ry   r   r    r    r!   r     r   c                 C   sh   ddg}t jtdtd| d}t jtdtd td| d}t|||g}t|d| d S )Nr   r   rr   rs   rt   r   )rD   rw   rx   r   r   r   r   rl   )rv   r   r   r=   r   r   r    r    r!   *test_from_product_index_series_categorical  s      r   c               	   C   sb   dddg} dddg}ddg}t j| |g|d	}d
ddddddddg	}t j||d	}t|| d S )Nr   r   buzr4   r5   rG   r   r   r0   r   r4   r   r5   r   rG   r   r4   r   r5   r   rG   r   r4   r   r5   r   rG   )r   r   r   r   r   )r   r   r   r   tuplesr   r    r    r!   test_from_product  s     

r   c               	   C   s   dddg} dddg}ddg}d	d
dddddddg	}t j||d}t jt| |g|d}t|| d}tjt|d t d W 5 Q R X d S )Nr   r   r   r4   r5   rG   r   r   r   r   r   r   r   r   r   r   r   r0   z-Input must be a list / sequence of iterables.r#   r   )	r   r   r   rX   r   r   r'   r(   r*   )r   r   r   r   r   r   r,   r    r    r!   test_from_product_iterator	  s&    

r   za, b, expected_namesr   c              	   C   sV   t | |g}t dddgddggddddddgddddddgg|d}t|| d S )Nr   r   r   r4   r5   r   r   r   )r4   r5   Zexpected_namesr   r   r    r    r!   test_from_product_infer_names%  s    r   c               	   C   s|   t dddgdd} t ddgdd}tj| |gd d	}tdddgddggd
d
ddddgd
dd
dd
dggd d}t|| d S )Nr   r   r   r   r   r4   r5   r   r0   r   r   )r   r   r   r   r   r   r    r    r!   %test_from_product_respects_none_names<  s    r   c                  C   sN   t td} ddg}t| |g}| jdd t| |g}t|| d S )Nr   r4   r5   F)write)r8   r9   r   r   r   Zsetflagsr   r   )r4   r5   r   r   r    r    r!   test_from_product_readonlyJ  s    r   c                 C   sz   | }ddg|_ t|}ttddddddgd	d
}t|| t|dd}ttddddddgd	d
dd}t|| d S )Nr   r   )r   r.   )r   r/   )r   r.   )r   r/   )r   r.   )r   r/   objectdtyper}   r   )r   r   r   r   )r=   r   r   r   r    r    r!   test_create_index_existing_nameU  s>    
r   c                  C   s^   t jddgddgddgddggddgd} tjdddd	gddgd
}t| }t|| d S )Nr4   r5   L1L2r   )r4   r4   r   )r5   r4   )r5   r5   r0   )rD   r   r   r   
from_framer   r   )dfr   r   r    r    r!   test_from_frame  s     
 
r   zminimum pyarrow not installed)reasonc               
   C   s   dd l } ttddd gddt | dtjd gd}t	
|}t	jtddd gdt | dtjd ggdd	gd
}t|| d S )Nr   r   r   ZInt64r   g?r   r4   r5   r0   )ZpyarrowrD   r   r   ZFloat64DtypeZ__from_arrow__r9   r8   rC   r   r   rS   Zastyper   r   )par   Zmulti_indexedr   r    r    r!   )test_from_frame_missing_values_multiIndex  s    
r   	non_framerB         c              	   C   s(   t jtdd t|  W 5 Q R X d S )NzInput must be a DataFramer#   )r'   r(   r*   r   r   )r   r    r    r!   test_from_frame_error  s    r   c                     s   t tddddddddddgt jddddd	d	gd
dddddddgd} | j }tjtddddddddddgt jddddd	d	gd
dddddddggdddd	gd}t|   fddt	 j
D }t|  ||kstd S )NZ19910905r   rg   )rd   ri   r   r   r4   r5   rG   T)rv   r   yz)datesr4   r5   rG   r   r0   c                    s   i | ]\}}| j | jqS r    )r   r   )rO   ir   r2   r    r!   
<dictcomp>  s      z2test_from_frame_dtype_fidelity.<locals>.<dictcomp>)rD   r   r
   ZCategoricaldtypesZto_dictr   rS   r   	enumerater   r   r   r   )r   Zoriginal_dtypesZexpected_miZ	mi_dtypesr    r   r!   test_from_frame_dtype_fidelity  s(    

	
r   znames_in,names_outr   r   r   r   r   r   c                 C   sP   t jddgddgddgddggtddgd}tj|| d}|j|ksLtd S )Nr4   r5   r   r   r   r0   )rD   r   r   r   r   r   r   )Znames_inZ	names_outr   r2   r    r    r!   test_from_frame_valid_names  s    r   znames,expected_error_msg)Z	bad_inputr   z9Length of names must match number of levels in MultiIndexc              	   C   s\   t jddgddgddgddggtddgd}tjt|d tj|| d W 5 Q R X d S )Nr4   r5   r   r   r   r#   r0   )rD   r   r   r   r'   r(   r)   r   )r   Zexpected_error_msgr   r    r    r!   test_from_frame_invalid_names  s    	r   c                  C   s@   t g g gg g gddgd} t jg g gddgd}t| | d S )Nr4   r5   r   r~   )r   rS   r   r   r   r    r    r!   test_index_equal_empty_iterable  s    r   c               
   C   s   ddgdddgg} t | ddddddgddddddggdd tjtdd0 t | ddddddgddddddggdd W 5 Q R X tjtdd0 t | ddddddgddddddggdd W 5 Q R X d S )Nr   r   r   )r   r   Z	sortorderz%.* sortorder 2 with lexsort_depth 1.*r#   z%.* sortorder 1 with lexsort_depth 0.*)r   r'   r(   r)   r&   r    r    r!   test_raise_invalid_sortorder  s$          r   c                  C   s6  t jdddgd dd} tddd	d
d}t| |g}t jdddgdd}t|jd | t|jd | t	d}t
 }t }t|||g|||gD ]F\}}t|g|gg}	t|	jd t jstt|	jd t jstqt }
t|
g|gg}	t|	jd t jrtt|	jd t js2td S )Nz2013-04-01 9:00z2013-04-02 9:00z2013-04-03 9:00r   rj   )ri   z
2010/01/01r   Mrg   )rd   rc   ri   r   r   today)rD   DatetimeIndexr
   r   rS   r   r   r   r8   Z
datetime64r   r   r	   	itertoolsproductr   r   r   r   )r^   r_   r=   Z	expected1Zdate1Zdate2Zdate3d1Zd2r   Zdate4r    r    r!   test_datetimeindex	  s.      
 r   c                  C   s   t jddgddd} t jddgdd	d}t| |g}|jddgksHtt|jd
 |  t|jd | tt	| t	|g}|jddgkstt|jd
 |  t|jd | d S )Nz2013/01/01 09:00z2013/01/02 09:00Zdt1z
US/Pacific)r   ri   z2014/01/01 09:00z2014/01/02 09:00Zdt2rj   r   r   )
rD   r   r   rS   r   r   r   r   r   r   )r   r   r   r    r    r!   test_constructor_with_tz)  s$        r   c                  C   s   t  } | | g}t|}|jtks&tt|g}|jd }|jtksJtt	|g}|jd }|jtksntt
dd |D }|jd }|jtkstd S )Nr   c                 S   s   g | ]
}|fqS r    r    )rO   r   r    r    r!   rQ   P  s     z9test_multiindex_inference_consistency.<locals>.<listcomp>)r   r   r   r   r   r   r   rS   r   r   r   )vZarrr=   r2   rP   r    r    r!   %test_multiindex_inference_consistency>  s    


r   c                  C   sJ   t jdgdggddgd} | j}tddgt ddgd}t|| d S )	Nr   r4   r   )rG   dr0   Zint64r   )r   )r   rS   r   r   r   r   Zassert_series_equal)Zpmidxr   r   r    r    r!   test_dtype_representationU  s     r   )Lr   r   r   Znumpyr8   r'   Zpandas.compatr   Zpandas.core.dtypes.castr   ZpandasrD   r   r   r   r	   r
   Zpandas._testingZ_testingr   r"   r-   r3   r>   rF   rJ   rW   rY   r]   markZparametrizerp   ro   rn   rq   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   Zskipifr   r9   r   r   r   r   r   r   r   r   r   r   r    r    r    r!   <module>   s  
& 

 (
  

	 *

*


 



 