o
    ҷhh                     @   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<g d=d0d1gfg d0d1gfg d=g fgd>d? Z&d@dA Z'dBdC Z(dDdE Z)dFdG Z*dHdI Z+dJdK Z,dLdM Z-dNdO Z.dPdQ Z/ejdRg g fg dSg fg g dTfgdUdV Z0ejdWe1e2dXdYdZ Z3ejd[d.d.gd.d/gd.gd/gd0d0gd0d1gd0gd1ggd\d] Z4d^d_ Z5d`da Z6ejdbdcddgejdedfdg dhdg didg gdjdk Z7dldm Z8dndo Z9ejdpeg d=dqdred0d1gdsdrdqdsgfeg d=dqdrd0d1gdqdgfg d=d0d1gdfgdtdu Z:dvdw Z;dxdy Z<dzd{ Z=d|d} Z>ejj?ed~ddd Z@ejdeg dg dd.d/gddXgddggeg deAd.d/gddXgddggdgdd ZBdd ZCejddddgfddgddgfgdd ZDejddg dT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   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/venv/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&   "r7   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_levelsG   s4   """""rF   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   r:   r%   )rH   rH   rH   rH   r   r:   s)rH   rH   r   rH   r   rH   )r   r   r   r:      )r   r   r   r   r   r   )	r   r=   nanpdNaTr   r   r@   rA   r   r    r    r!   test_na_levelsm   s4   rN   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r8   r9   c)r   r   r   r   r   r   r   r   T)r   r   r?      PANDA)r=   r>   r   r   r   )r   r   valr5   r    r    r!   test_copy_in_constructor   s   rT   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>r2   20130101r8   r9   r   r   )zipr   r   r   from_arraysr   r   r   rL   rM   r	   equalsr   rB   arraysr   r    r    r!   test_from_arrays   s    re   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   rU   r    rV   rY   r    r    r!   r]      r^   z-test_from_arrays_iterator.<locals>.<listcomp>r2   z/Input must be a list / sequence of array-likes.r#   r   )r`   r   r   r   ra   iterr   r   r   r'   r(   r*   )rB   rd   r   r,   r    r    r!   test_from_arrays_iterator   s   "rg   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=   rW   rX   rY   r    r    r!   	<genexpr>   s
    
z*test_from_arrays_tuples.<locals>.<genexpr>r2   )	ri   r`   r   r   r   ra   r   r   r   rc   r    r    r!   test_from_arrays_tuples   s
   rk   )idx1idx2
2011-01-01Dr   freqperiodsz
2015-01-01H2015-01-01 10:00
US/Easternrq   rr   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   ra   r   r   get_level_valuesr   )rl   rm   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 )Nrt   ro   r   ru   rv   rs   rp   ry   rn   r   r   r   )
r
   rL   timedelta_rangeperiod_ranger   ra   r   r   rz   r   )rl   rm   idx3idx4r   r{   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   )
rL   CategoricalIndexlistr   ra   r   r   rz   r   values)rl   rm   r   r{   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#   rd   Ard   r   r   r   )r   r   ABCr   )r'   r(   r)   r   ra   r   r   r   r   r   r   r   )r,   r   r   Nrd   r   r    r    r!   test_from_arrays_empty  s    
r   invalid_sequence_of_arraysr   r   r8   r9   r   r   r   r8   r8   r9   r   )r   r   )r   r   )r   r9   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   ra   )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   ra   )rl   rm   r,   r    r    r!   "test_from_arrays_different_lengthsG  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   rO   r   r2   r   r   r   r   )r   r   ra   r   r   r8   r9   r   r   r    r    r!   $test_from_arrays_respects_none_namesQ  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   r:   r   r8   r9   r   )r   )r   r:   r2   )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 d    d S 1 sEw   Y  d S )Nr   r   r   r:   r   r8   r9   r   r2   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_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 )Nr8   r9   r2   r   )r   r   ra   r   r   r   r    r    r!   test_from_tuples_empty  s   r   c                 C   s"   t | }|j| jk sJ d S rh   )r   r   r   all)rB   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   r8   )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   )r:   r   r   rO   columnsr8   r9   )r   r   )r:   r   r   r2   r   r   rP   )r   index)rL   	DataFrame	set_indexr   r   r   assert_frame_equal)r   rB   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   r2   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   rO   c                 C   s@   ddg}t j| |g|d}t | |gg g g|d}t|| d S )Nr   Br2   r   r   r   r   r   )r   secondr   r   r   r    r    r!   "test_from_product_empty_two_levels  s   r   r   r:   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   Cr2   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   )rr   r   z
2000-01-02)r
   r   r   r   r	   r   assert_numpy_array_equalr   )dt_indexr5   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 )NrJ   r8   r9   r   T)exact)r   r   r   r   r   r   _levels)rngotherr5   r    r    r!   test_from_product_rangeindex  s   r   r   FTfc                 C   s   | S rh   r    xr    r    r!   <lambda>  s    r   c                 C   s   t | S rh   )r   r   r    r    r!   r     s    c                 C   s   | j S rh   )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   )rL   r   r   r   r   r   r   rz   )r   r   r   rB   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   buzrO   r   r   r2   	)r   r8   )r   r9   )r   rP   )r   r8   )r   r9   )r   rP   )r   r8   )r   r9   )r   rP   )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   rO   r   r   r   r2   z-Input must be a list / sequence of iterables.r#   r   )	r   r   r   rf   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   r8   r9   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r8   r9   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   r8   r9   r   r2   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   r8   r9   F)write)r=   r>   r   r   r   setflagsr   r   )r8   r9   r   r   r    r    r!   test_from_product_readonlyJ  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   )rB   r   r   r   r    r    r!   test_create_index_existing_nameU  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 )Nr8   r9   L1L2r   ))r8   r8   r   )r9   r8   )r9   r9   r2   )rL   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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 )
Nr   )r   r   NInt64r   g?r   r8   r9   r2   )pyarrowrL   r   r   Float64Dtype__from_arrow__r>   r=   rK   r   r   ra   astyper   r   )par   multi_indexedr   r    r    r!   )test_from_frame_missing_values_multiIndex  s   
r   	non_frame)r   r   r   r:   rJ         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   ru   )rr   rw   )r   r   r   r   r   r   )r8   r8   r9   r9   rP   rP   T)r   )r   r   yzr   r   )datesr8   r9   rP   r2   c                    s   i | ]\}}| j | jqS r    )r   r   )rZ   ir   r5   r    r!   
<dictcomp>  s    z2test_from_frame_dtype_fidelity.<locals>.<dictcomp>)rL   r   r
   Categoricaldtypesto_dictr   ra   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 )Nr8   r9   r   r  r   r2   )rL   r   r   r   r   r   )names_in	names_outr   r5   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 )Nr8   r9   r   r  r   r#   r2   )rL   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 )Nr8   r9   r   r   )r   ra   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   rx   )rw   z
2010/01/01r   Mru   )rr   rq   rw   r   r   today)rL   DatetimeIndexr
   r   ra   r   r   r   r=   
datetime64r   r  r	   	itertoolsproductr   r   r   )rl   rm   rB   	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   rw   z2014/01/01 09:00z2014/01/02 09:00dt2rx   r   r   )	rL   r  r   ra   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    )rZ   r   r    r    r!   r]   P  s    z9test_multiindex_inference_consistency.<locals>.<listcomp>)
r   r  r   r   r   r   ra   r   r   r   )varrrB   r5   r[   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   r8   r   )rP   dr2   int64r   )r   )r   ra   r   r   r   r   assert_series_equal)pmidxr   r   r    r    r!   test_dtype_representationU  s   r#  )Lr   r   r  numpyr=   r'   pandas.compatr   pandas.core.dtypes.castr   pandasrL   r   r   r   r	   r
   pandas._testing_testingr   r"   r-   r7   rF   rN   rT   re   rg   rk   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   skipifr   r>   r   r   r  r  r  r
  r  r  r  r#  r    r    r    r!   <module>   s   
& 

&


	,

*








 