o
    ŀgh                     @   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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d/d/gd/d0gd/gd0gd1d2d-gd.fd-d.gfd/d3d4d/gd0fd1d.gd-d5gd3d0gd6d7d8gd9d: Z#ejd;g d<d/d0gfg d/d0gfg d<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g dRg fg g dSfgdTdU Z.ejdVe/e0dWdXdY Z1ejdZd-d-gd-d.gd-gd.gd/d/gd/d0gd/gd0ggd[d\ Z2d]d^ Z3d_d` Z4ejdadbdcgejdddedf dgdf dhdf gdidj Z5dkdl Z6dmdn Z7ejdoeg d<dpdqed/d0gdrdqdpdrgfeg d<dpdqd/d0gdpdgfg d<d/d0gdfgdsdt Z8dudv Z9dwdx Z:dydz Z;d{d| Z<d}d~ Z=ejdeg dg dd-d.gddWgddgge
g de>d-d.gddWgddggdgdd Z?dd Z@ejddddgfddgddgfgdd ZAejddg dSdfgdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdS )    )datedatetimeN)'construct_1d_object_array_from_listlike)Index
MultiIndexSeries	Timestamp
date_rangec                  C   s`   t g dgg dgdgd} t| t sJ tg ddd}t| jd | | jdgks.J d S )N)foobarbazquxr            firstlevelscodesnamesnamer   )r   
isinstancer   tmassert_index_equalr   r   resultexpected r   `/var/www/html/myenv/lib/python3.10/site-packages/pandas/tests/indexes/multi/test_constructors.pytest_constructor_single_level   s   r!   c                  C   s   d} t jt| d tg g d W d    n1 sw   Y  d} t jt| d tg d W d    n1 s8w   Y  t jt| d tg d W d    d S 1 sUw   Y  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} g dg dg}dgdgf}d	}t jt|d
 t| ||d W d    n1 s1w   Y  tddgddggg dg dgdd}dgdgg}t jt|d
 |j|d W d    n1 sgw   Y  t jt|d
 |j|d W d    d S 1 sw   Y  d S )Nr   r   onetwo)r   r   r   r   )r   r   r   r   r
   r   z(MultiIndex\.name must be a hashable typer"   r   )r
   r   fooobarrr   )r&   r'   r)   r   rename	set_names)r   r   r   r+   mirenamedr   r   r    "test_constructor_nonhashable_names-   s&   "r6   c                 C   s  t dgt dgt dgg}dg}d}tjt|d t||d W d    n1 s.w   Y  d}d	}d
}tjt|d tdgdggg dg dgd W d    n1 s[w   Y  tjt|d tdgdggg dddggd W d    n1 sw   Y  tjt|d |  dgdgg W d    n1 sw   Y  tjt|d |  g dddgg W d    n1 sw   Y  |  jg d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 d    d S 1 sw   Y  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   )r   r      r   )r   r   r   r   r   F)r   verify_integrity)	nparrayr&   r'   r(   r   copy
set_levels	set_codes)idxr   r   r+   length_errorlabel_errorcode_value_errorr   r   r    (test_constructor_mismatched_codes_levelsE   s4   """""rE   c                  C   s  t tjd tjddggg dgd} t tjd tjddggg dgd}t| | t tjdtjdd ggg dgd} t tjdtjdd ggg dgd}t| | t g dgg dgdtjdtjdd gg} t| | t tjdtjdd ggg d	gdg dg} t| | d S )
N   r   )r   r   r   r   r9   r$   )rG   rG   rG   rG   r   r9   s)rG   rG   r   rG   r   rG   )r   r   r   r9      )r   r   r   r   r   r   )	r   r<   nanpdNaTr   r   r?   r@   r   r   r   r    test_na_levelsk   s4   rM   c                  C   s   t g d} t g d}|d }t| | g||gdd}|jd d |ks(J d|d< |jd d |ks7J | d }d| d< |jd d |ksJJ d S )Nr7   r8   c)r   r   r   r   r   r   r   r   T)r   r   r>      PANDA)r<   r=   r   r   r   )r   r   valr4   r   r   r    test_copy_in_constructor   s   rS   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s7J |jd tddgsEJ d S )	Nc                 S       g | ]\}}t ||qS r   r<   asarraytake.0levlevel_codesr   r   r    
<listcomp>       z$test_from_arrays.<locals>.<listcomp>r1   20130101r7   r8   r   r   )zipr   r   r   from_arraysr   r   r   rK   rL   r   equalsr   rA   arraysr   r   r   r    test_from_arrays   s    rd   c                 C   sz   dd t | j| jD }tjt|| jd}t||  d}t	j
t|d td W d    d S 1 s6w   Y  d S )Nc                 S   rT   r   rU   rX   r   r   r    r\      r]   z-test_from_arrays_iterator.<locals>.<listcomp>r1   z/Input must be a list / sequence of array-likes.r"   r   )r_   r   r   r   r`   iterr   r   r   r&   r'   r)   )rA   rc   r   r+   r   r   r    test_from_arrays_iterator   s   "rf   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)tupler<   rV   rW   rX   r   r   r    	<genexpr>   s
    
z*test_from_arrays_tuples.<locals>.<genexpr>r1   )	rh   r_   r   r   r   r`   r   r   r   rb   r   r   r    test_from_arrays_tuples   s
   rj   )idx1idx2
2011-01-01Dr   freqperiodsz
2015-01-01h2015-01-01 10:00
US/Easternrp   rq   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   r`   r   r   get_level_valuesr   )rk   rl   r   result2r   r   r    =test_from_arrays_index_series_period_datetimetz_and_timedelta   s   r{   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 )Nrs   rn   r   rt   ru   rr   ro   rx   rm   r   r   r   )
r	   rK   timedelta_rangeperiod_ranger   r`   r   r   ry   r   )rk   rl   idx3idx4r   rz   r   r   r    )test_from_arrays_index_datetimelike_mixed   s"   r   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   )
rK   CategoricalIndexlistr   r`   r   r   ry   r   values)rk   rl   r   rz   result3r   r   r    )test_from_arrays_index_series_categorical   s   r   c                  C   s   d} t jt| d tjg d W d    n1 sw   Y  tjg gdgd}t|ts/J tg dd}t|j	d | |j
dgksFJ dD ])}g g| }td	d | }tj||d}tg g| g g| |d
}t|| qHd S )N)Must pass non-zero number of levels/codesr"   rc   Arc   r   r   r   )r   r   ABCr   )r&   r'   r(   r   r`   r   r   r   r   r   r   r   )r+   r   r   Nrc   r   r   r   r    test_from_arrays_empty  s    
r   invalid_sequence_of_arraysr   r   r7   r8   r   r   r   r7   r7   r8   r   )r   r   )r   r   )r   r8   c                 C   D   d}t jt|d tj| d W d    d S 1 sw   Y  d S )Nz.Input must be a list / sequence of array-likesr"   r   )r&   r'   r)   r   r`   )r   r+   r   r   r    test_from_arrays_invalid_input#  s   "r   z
idx1, idx2r   r   r   c                 C   sF   d}t jt|d t| |g W d    d S 1 sw   Y  d S )Nz ^all arrays must be same length$r"   )r&   r'   r(   r   r`   )rk   rl   r+   r   r   r    "test_from_arrays_different_lengthsE  s   "r   c                  C   sh   t g ddd} t g ddd}tj| |gd d}tg dg dgg dg dgd d}t|| d S )	Nr   r
   r   rN   r   r1   r   r   r   r   )r   r   r`   r   r   r7   r8   r   r   r   r   r    $test_from_arrays_respects_none_namesO  s   r   c                  C   s   d} t jt| d tg  W d    n1 sw   Y  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   r9   r   r7   r8   r   )r   )r   r9   r1   )r&   r'   r)   r   from_tuplesr   r   )r+   r   r   r   r   r    test_from_tuples_  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 d    d S 1 sEw   Y  d S )Nr   r   r   r9   r   r7   r8   r   r1   z/Input must be a list / sequence of tuple-likes.r"   )r   r   r_   r   r   r&   r'   r)   )r   r   r+   r   r   r    test_from_tuples_iteratorm  s   " "r   c                  C   s8   t jg ddgd} t jg g gddgd}t| | d S )Nr7   r8   r1   r   )r   r   r`   r   r   r   r   r   r    test_from_tuples_empty}  s   r   c                 C   s"   t | }|j| jk sJ d S rg   )r   r   r   all)rA   r   r   r   r    test_from_tuples_index_values  s   
r   c                  C   s   g d} d}t jt|d t| dd W d    n1 sw   Y  t jt|d t| dd W d    d S 1 s<w   Y  d S )N))r   r   r   )r   r   r   )r   r   r   *Names should be list-like for a MultiIndexr"   abcr   r7   )r&   r'   r(   r   )lir+   r   r   r    test_tuples_with_name_string  s   "r   c                  C   s`   t jg dg dgg ddddg} tjddgd	d
}t jddgdg|d}t| | d S )N)r   r   r   )r9   r   r   rN   columnsr7   r8   )r   r   )r9   r   r   r1   r   r   rO   )r   index)rK   	DataFrame	set_indexr   r   r   assert_frame_equal)r   rA   r   r   r   r    !test_from_tuples_with_tuple_label  s   
r   c                  C   sB   d} t jt| d tg  W d    d S 1 sw   Y  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 J d S )Nr   r1   r   r   )r   r   r   r   r   r   r   r   r   r   r    !test_from_product_empty_one_level  s   r   zfirst, second)r
   r   r   rN   c                 C   s@   ddg}t j| |g|d}t | |gg g g|d}t|| d S )Nr   Br1   r   r   r   r   r   )r   secondr   r   r   r   r   r    "test_from_product_empty_two_levels  s   r   r   r9   c                 C   sR   g d}t t| }tjg |g g|d}tg |g gg g g g|d}t|| d S )N)r   r   Cr1   r   )r   ranger   r   r   r   )r   r   lvl2r   r   r   r   r    $test_from_product_empty_three_levels  s
   r   invalid_inputc                 C   r   )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   )rq   r   z
2000-01-02)r	   r   r   r   r   r   assert_numpy_array_equalr   )dt_indexr4   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 )NrI   r7   r8   r   T)exact)r   r   r   r   r   r   _levels)rngotherr4   r   r   r    test_from_product_rangeindex  s   r   r   FTfc                 C   s   | S rg   r   xr   r   r    <lambda>  s    r   c                 C   s   t | S rg   )r   r   r   r   r    r     s    c                 C   s   | j S rg   )r   r   r   r   r    r     s    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   r   r   r   r   )rK   r   r   r   r   r   r   ry   )r   r   r   rA   r   r   r   r   r    *test_from_product_index_series_categorical  s   r   c                  C   sP   g d} g d}ddg}t j| |g|d}g d}t j||d}t|| d S )Nr
   r   buzrN   r   r   r1   	)r
   r7   )r
   r8   )r
   rO   )r   r7   )r   r8   )r   rO   )r   r7   )r   r8   )r   rO   )r   r   r   r   r   )r   r   r   r   tuplesr   r   r   r    test_from_product  s   r   c                  C   s   g d} g d}ddg}g d}t j||d}t jt| |g|d}t|| d}tjt|d t d	 W d    d S 1 sBw   Y  d S )
Nr   rN   r   r   r   r1   z-Input must be a list / sequence of iterables.r"   r   )	r   r   r   re   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
   r   r   c                 C   sD   t | |g}t g dddggg dg dg|d}t|| d S )Nr   r7   r8   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r7   r8   expected_namesr   r   r   r   r    test_from_product_infer_names#  s   r   c                  C   sh   t g ddd} t ddgdd}tj| |gd d}tg dddggg dg d	gd d
}t|| d S )Nr   r
   r   r7   r8   r   r1   r   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   r7   r8   F)write)r<   r=   r   r   r   setflagsr   r   )r7   r8   r   r   r   r   r    test_from_product_readonlyH  s   r   c                 C   sj   | }ddg|_ t|}ttg ddd}t|| t|dd}ttg d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   )rA   r   r   r   r   r   r    test_create_index_existing_nameS  s&   
r   c                  C   sZ   t jddgddgddgddggddgd} tjg dddgd}t| }t|| d S )Nr7   r8   L1L2r   ))r7   r7   r   )r8   r7   )r8   r8   r1   )rK   r   r   r   
from_framer   r   )dfr   r   r   r   r    test_from_frame}  s    
r   c               
   C   s   t d} ttg dddt | dtj	d gd}t
|}t
jtg ddt | dtj	d ggddgd	}t|| d S )
Npyarrow)r   r   NInt64r   g?r   r7   r8   r1   )r&   importorskiprK   r   r   Float64Dtype__from_arrow__r=   r<   rJ   r   r   r`   astyper   r   )par   multi_indexedr   r   r   r    )test_from_frame_missing_values_multiIndex  s   

r   	non_frame)r   r   r   r9   rI         c                 C   s>   t jtdd t|  W d    d S 1 sw   Y  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g dt jg dddg d	d
} | j }tjtddddg dt jg dddg d	gg d
d}t|   fddt	 j
D }t|  ||ksYJ d S )N19910905r   rt   )rq   rv   )r   r   r   r   r   r   )r7   r7   r8   r8   rO   rO   T)r   )r   r   yzr   r   )datesr7   r8   rO   r1   c                    s   i | ]\}}| j | jqS r   )r   r   )rY   ir   r4   r   r    
<dictcomp>  s    z2test_from_frame_dtype_fidelity.<locals>.<dictcomp>)rK   r   r	   Categoricaldtypesto_dictr   r`   r   	enumerater   r   r   )r   original_dtypesexpected_mi	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s&J d S )Nr7   r8   r   r   r   r1   )rK   r   r   r   r   r   )names_in	names_outr   r4   r   r   r    test_from_frame_valid_names  s   r  znames,expected_error_msg)	bad_inputr   z9Length of names must match number of levels in MultiIndexc                 C   sr   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 d    d S 1 s2w   Y  d S )Nr7   r8   r   r   r   r"   r1   )rK   r   r   r   r&   r'   r(   r   )r   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 )Nr7   r8   r   r   )r   r`   r   r   r   r   r   r    test_index_equal_empty_iterable  s   r  c                  C   s   ddgg dg} t | g dg dgdd tjtdd	 t | g dg d
gdd W d    n1 s4w   Y  tjtdd	 t | g dg dgdd W d    d S 1 sYw   Y  d S )Nr   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   	sortorderz%.* sortorder 2 with lexsort_depth 1.*r"   )r   r   r   r   r   r   z%.* sortorder 1 with lexsort_depth 0.*)r   r   r   r   r   r   )r   r   r   r   r   r   )r   r&   r'   r(   r%   r   r   r    test_raise_invalid_sortorder  s   "r	  c                  C   s.  t jg dd dd} tddddd	}t| |g}t jg ddd}t|jd
 | t|jd | t	d}t
 }t }t|||g|||gD ]#\}}t|g|gg}	t|	jd
 t jsfJ t|	jd t jsqJ qNt }
t|
g|gg}	t|	jd
 t jrJ t|	jd t jsJ d S )N)z2013-04-01 9:00z2013-04-02 9:00z2013-04-03 9:00r   rw   )rv   z
2010/01/01r   MErt   )rq   rp   rv   r   r   today)rK   DatetimeIndexr	   r   r`   r   r   r   r<   
datetime64r   r  r   	itertoolsproductr   r   r   )rk   rl   rA   	expected1date1date2date3d1d2r   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s$J t|jd
 |  t|jd | tt| t|g}|jddgksJJ t|jd
 |  t|jd | d S )Nz2013/01/01 09:00z2013/01/02 09:00dt1z
US/Pacific)r   rv   z2014/01/01 09:00z2014/01/02 09:00dt2rw   r   r   )	rK   r  r   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J t|g}|jd }|jtks%J t|g}|jd }|jtks7J t	dd |D }|jd }|jtksMJ d S )Nr   c                 S   s   g | ]}|fqS r   r   )rY   r   r   r   r    r\   M  s    z9test_multiindex_inference_consistency.<locals>.<listcomp>)
r   r  r   r   r   r   r`   r   r   r   )varrrA   r4   rZ   r   r   r    %test_multiindex_inference_consistency;  s   


r  c                 C   sX   t jdgdggddgd}|j}| sdnd}td|gt ddgtd	}t|| d S )
Nr   r7   r   )rO   dr1   r   stringint64)r   r   )r   r`   r   r   r   r   r   assert_series_equal)using_infer_stringpmidxr   expr   r   r   r    test_dtype_representationR  s   r%  )Ir   r   r  numpyr<   r&   pandas.core.dtypes.castr   pandasrK   r   r   r   r   r	   pandas._testing_testingr   r!   r,   r6   rE   rM   rS   rd   rf   rj   markparametrizer}   r|   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   r   r   r  r  r  r	  r  r  r  r%  r   r   r   r    <module>   s   
& 

&


	,

*







 