a
    GGbd                     @   sj   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lmZ G dd dZdS )    N)UnsortedIndexError)	DataFrameIndex
MultiIndexSeries	Timestamp)_mklblc                   @   s|   e Z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dd Zdd Zdd Zdd ZdS )TestMultiIndexSlicersc           	      C   s:  t tddtddtddtddg}ttt| |d	}|jt	d
dt	d ddgfd d f }|jdd |j
jD  }t|| |jdd |j
jD  }|jt	d
dt	d t	ddfd d f }t|| t jg dddgd}t jg dddgd}ttjddddd||d}|jddjdd}|jt	d t	d fd d f }t|| |jt	d t	d ft	d t	d ff }t|| |jd d t	d t	d ff }t|| |jt	d dgfd d f }|jddg }t|| |jt	d dfd d f }|jddg }t|| |jd d t	d d gff }|jd d ddgf }t|| |jt	d dft	d d gff }|jddgddgf }t|| |jd! }tg d"g d#d$tg d%dd&td'd gdd&d}t|| |jt	d ddgfd d f }|jg d( }t|| ttt| |d	}|jd
dd d ddgf }|jd)d |j
jD  }t|| |jt	d |jd d d*f dkfd d f }|jddg }t|| d+}tjt|d,4 |jt	d td-d.gfd d f  W d    n1 s0    Y  tjtd/d,$ |jt	d dgf  W d    n1 s^0    Y  |j
jdkszJ |jddd0}|j
jdksJ d1}tjt|d,. |jt	d t	d'fd d f  W d    n1 s0    Y  |jt	d |jd d d*f dkfd d f }t||jddgd d f  d S )2NA   B   C   D   indexA1A3C1C3c                 S   sH   g | ]@\}}}}|d ks(|dks(|dkr|dks8|dkr||||fqS r   A2r   r   r    .0abcdr   r   Jlib/python3.9/site-packages/pandas/tests/indexing/multiindex/test_slice.py
<listcomp>   s   
(zITestMultiIndexSlicers.test_per_axis_per_level_getitem.<locals>.<listcomp>c                 S   sP   g | ]H\}}}}|d ks(|dks(|dkr|dks@|dks@|dkr||||fqS )r   r   r   r   ZC2r   r   r   r   r   r!   r"   ,   s   
)r
      )r
   r   )r
      )r   r$   onetwonames)r   foor   bar)r   r+   )r   bahlvl0lvl1   int64Zdtyper   columnsr   axisr$   r%   r+   r
   r   )r$   r   	   )r   r      )r-   r+   )r$   r   r%   namer-   )r   r$   r%   c                 S   sH   g | ]@\}}}}|d ks(|dks(|dkr|dks8|dkr||||fqS r   r   r   r   r   r!   r"   t   s   
(r,   zLcannot index with a boolean indexer that is not the same length as the indexmatchTFz\[1\] not in index)levelr7   z_MultiIndex slicing requires the index to be lexsorted: slicing on levels \[1\], lexsort depth 0)r   from_productr   r   nparangelenZto_numpylocslicer   valuestmassert_frame_equalfrom_tuplesreshape
sort_indexilocr   r   assert_series_equalpytestraises
ValueErrorarrayKeyErrorZ_lexsort_depthr   )	selfZixdfresultexpectedr   r5   smsgr   r   r!   test_per_axis_per_level_getitem   s    "&(& 
,D4>,z5TestMultiIndexSlicers.test_per_axis_per_level_getitemc                 C   s  t g dg dg dg ddg d }|jjr<J t ddgddgd	d	gd	d
gdg d }|jtd td d	fd d f }t|| |j	d	ddd}t|| t g dg dg dg ddg d }|jjrJ t ddgddgd	d	gd	d
gdg d }|jtd td d	fd d f }|jjrNJ t|| g d}t
|}tdg| |g}td	g| |d}| }|jtd tdf }td	g|d  |d d d }t|| d S )N)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   F)r?   Z
drop_level)r$   r   r$   r   )r$   r   r%   r   r      r   r:   r9   
         r]         r_   r1            @ rc   r   i )r   	set_indexrK   r   Z	is_uniquerD   rE   rG   rH   ZxsrC   r   Zfrom_arraysr   rM   )rS   rT   rV   rU   Zintsnidxr   r   r!   "test_multiindex_slicers_non_unique   sZ    " " "z8TestMultiIndexSlicers.test_multiindex_slicers_non_uniquec                    s  dd l   fddtdD }ddg}tj||gddgd	}ttjd
dddd|tdd}t	j
}|jg dddgf }|jttdtdtddftddf }t|| |j|tdtd |dd ftddf }t|| |jttdtddftddf }t|| |jtddtddftddf }t|| |j|dd df|d f }t|| d S )Nr   c              
      s,   g | ]$}  d ddddd j|d qS )i  r$   r]   )Zdays)datetimeZ	timedelta)r   iri   r   r!   r"      s   zNTestMultiIndexSlicers.test_multiindex_slicers_datetimelike.<locals>.<listcomp>rZ   r$   r   dateZ	frequencyr(   0   r2   r3   r   ZABCDr4   )r   r   r   z2012-01-01 12:12:12z2012-01-03 12:12:12r
   r   )r
   r   )ri   ranger   r@   r   rA   rB   rJ   listpd
IndexSlicerL   rD   rE   r   rG   rH   )rS   Zdatesfreqr   rT   rg   rV   rU   r   rk   r!   $test_multiindex_slicers_datetimelike   sj    
	
		z:TestMultiIndexSlicers.test_multiindex_slicers_datetimelikec                 C   s  t dgd dgd  dgd  g dd g dg dd	}t|d
 |d
< |g d}| }|jtdd d f }|jdd }t	|| |jtdd d f }|}t	|| |jtd tddfd d f }|jg d }t	|| |jtd td tddfd d f }|jg d }t	|| |jtdtdfd d f }|jg d }t	|| |jtd tdfd d f }|}t	|| |jtd tddtdfd d f }|jg d }t	|| |jtd td tddfd d f }|jg d }t	|| d S )NZA0r   r   r   )B0ru   B1rv   B2r%   )
2013-06-11
2013-07-02
2013-07-09
2013-07-30
2013-08-06rx   ry   rz   r{   r|   
2013-09-03z
2013-10-01rz   r|   r}   )   #   r_   r9   r   (   ra   r   r   r   r$   r   r%   r   r   )r
   r   DATEZVALUESr   )r
   r   r   r   r[   rv   rw   )	r   r%   r   r   r:   r9   r]   r^   r_   Z20130702Z20130709)r$   r   rZ   r   r]   ru   )r   r$   r   rZ   r[   r\   r|   )r   r%   r   r   r:   r9   r]   r^   Z20130701)
r   rq   Zto_datetimere   rK   rD   rE   rL   rG   rH   )rS   rT   Zdf1rU   rV   r   r   r!   test_multiindex_slicers_edges;  sD    
 &&&z3TestMultiIndexSlicers.test_multiindex_slicers_edgesc                 C   sf  t j}ttddtddtddtddg}tjg ddd	gd
}ttjt	|t	| dd
t	|t	|f||d}|jtddtd ddgfd d f }|jdd |jjD  }t|| |j|ddd d ddgf d d f }t|| |jtd td ddgfd d f }|jdd |jjD  }t|| |j|d d d d ddgf d d f }t|| d}tjt|d& |jddtdff  W d    n1 s0    Y  t|jdtd dff |jd jd d ddgf  |jdd}|jdtd dff  |jtd td ddgftd dff  d|jddd d d d ddgf< d S )Nr
   r   r   r   r   r   r*   r/   r0   r(   r2   r3   r4   r   r   r   r   c                 S   sH   g | ]@\}}}}|d ks(|dks(|dkr|dks8|dkr||||fqS r   r   r   r   r   r!   r"     s   
(zNTestMultiIndexSlicers.test_per_axis_per_level_doc_examples.<locals>.<listcomp>c                 S   s0   g | ](\}}}}|d ks |dkr||||fqS r   r   r   r   r   r   r!   r"     s   
z_MultiIndex slicing requires the index to be lexsorted: slicing on levels \[1\], lexsort depth 1r=   r   r+   r   r$   r6   i)rq   rr   r   r@   r   rI   r   rA   rB   rC   rJ   rD   rE   r   rF   rG   rH   rN   rO   r   rL   rK   )rS   rg   r   r5   rT   rU   rV   rX   r   r   r!   $test_per_axis_per_level_doc_examples  sX    "&($(6.(z:TestMultiIndexSlicers.test_per_axis_per_level_doc_examplesc              	   C   s  t tddtddtddtddg}t jg ddd	gd
}ttjt|t| ddt|t|f||d	 j	dd}|j
ddddd d ddgf }|j
dd |jjD  }t|| |j
ddd d d d ddgf }|j
dd |jjD  }t|| |j
ddd d df }|j
d d td dff }t|| |j
ddd d df }|j
d d td dff }t|| dD ]d}d| d}tjt|d2 |j
|dd d d d ddgf  W d    n1 s0    Y  qd S )Nr
   r   r   r   r   r   r*   r/   r0   r(   r2   r3   r4   r$   r6   r   r   r   r   r   c                 S   sH   g | ]@\}}}}|d ks(|dks(|dkr|dks8|dkr||||fqS r   r   r   r   r   r!   r"     s   
(zATestMultiIndexSlicers.test_loc_axis_arguments.<locals>.<listcomp>r   c                 S   s0   g | ](\}}}}|d ks |dkr||||fqS r   r   r   r   r   r!   r"     s   
r+   r5   )rn   r   r+   zNo axis named z for object type DataFramer=   )r   r@   r   rI   r   rA   rB   rC   rJ   rK   rD   r   rF   rG   rH   rE   rN   rO   rP   )rS   r   r5   rT   rU   rV   rj   rX   r   r   r!   test_loc_axis_arguments  sR    "
""z-TestMultiIndexSlicers.test_loc_axis_argumentsc                 C   sf   t tdddtg dg dgd}|jddd	d
 }|jd d d df }t	|| d S )N   r%   r9   a1a2Za3Zb1Zb2Zb3r5   r$   r6   r   r   )
r   rA   rB   rJ   r   r@   rD   rL   rG   rH   rS   rT   rU   rV   r   r   r!   ?test_loc_axis_single_level_multi_col_indexing_multiindex_col_df  s    zUTestMultiIndexSlicers.test_loc_axis_single_level_multi_col_indexing_multiindex_col_dfc                 C   sl   t tdddtg dg dgd}|jddd	 }|jd d d df }g d|_t	
|| d S )
Nr   r%   r9   r   r   r   r$   r6   r   )r   rA   rB   rJ   r   r@   rD   rL   r5   rG   rH   r   r   r   r!   @test_loc_axis_single_level_single_col_indexing_multiindex_col_df   s    
zVTestMultiIndexSlicers.test_loc_axis_single_level_single_col_indexing_multiindex_col_dfc                 C   sT   t tdddg dd}|jddd }ttg ddd	}t|| d S )
Nr9   r%   )r   r   r   r   r$   r6   r   )r   r%   rZ   r;   )	r   rA   rB   rJ   rD   r   rQ   rG   rM   r   r   r   r!   *test_loc_ax_single_level_indexer_simple_df-  s    z@TestMultiIndexSlicers.test_loc_ax_single_level_indexer_simple_dfc           	      C   s  t j}tjg dddgd}tjg dddgd}ttjdd	d
dd||d}|jddjdd}|	 }d|j
td td fd d f< |	 }d|jd d d d f< t|| |	 }d|j
ddd d d d f< |	 }d|jd d d d f< t|| |	 }d|j
td td ftd td ff< |	 }d|jd d d d f< t|| |	 }d|j
d d td td ff< |	 }d|jd d d d f< t|| |	 }d|j
td dgfd d f< |	 }d|jddg< t|| |	 }d|j
td dfd d f< |	 }d|jddg< t|| |	 }d|j
ddd d df< |	 }d|jddg< t|| |	 }d|j
d d td dgff< |	 }d|jd d ddgf< t|| |	 }d|j
td dftd dgff< |	 }d|jddgddgf< t|| |	 }d|j
|d d df |d d dgf f< |	 }d|jddgddgf< t|| |	 }d|j
d< |	 }d|jddddf< t|| |	 }tjddgddggd	d
|j
td dftd dgff< |	 }d|jddgddgf< t|| |	 }d}tjt|dD tjdgddggd	d
|j
td dftd dgff< W d    n1 s|0    Y  d}tjt|d> tjg dd	d
|j
td dftd dgff< W d    n1 s0    Y  |	 }|j
td dftd dgff d |j
td dftd dgff< |	 }|jddgddgf d |jddgddgf< t|| |	 }|j
td dftd dgff  |j
td dftd dgff 9  < |	 }|jddgddgf  |jddgddgf 9  < t|| |j
td dftd dgff 	 }d|j
d d df< |	 }|j
td dftd dgff  |9  < |	 }|jddgddgf  |jddgddgf 9  < t|| d S )Nr#   r&   r'   r(   r*   r/   r0   r1   r2   r3   r   r4   r   r6   r$   d   r%   r+   r8   r   z)setting an array element with a sequence.r=   z@Must have equal len keys and value when setting with an iterable)r   r   r   r   r   r[   )r   r.   )rq   rr   r   rI   r   rA   rB   rJ   rK   copyrD   rE   rL   rG   rH   rQ   rN   rO   rP   )	rS   rg   r   r5   Zdf_origrT   rV   rX   Zrhsr   r   r!   test_per_axis_per_level_setitem6  s    & (
"BB",$0$(0z5TestMultiIndexSlicers.test_per_axis_per_level_setitemc                 C   s  t tdttdtdg}tj}t	||d d d |d d d  t	||dd d |dd d  t	||dd d |dd d  t	||d dd |d dd  t	||d dd |d dd  t	||dd	d |dd
d  t	||dd	d |dd
d  t	||ddd |dd
d  t	||ddd |dd
d  t	||d	dd |d d  t	||dd d |dd d  t	||d dd |d dd  t	||ddd |ddd  d S )N   Zabcder   rn   r       )r    r\   r   r%   )r   r   )r   r   r[   r9   )er   r1   )
r   rA   rB   r   r@   rp   rq   rr   rG   Z!assert_indexing_slices_equivalent)rS   ZserZSLCr   r   r!   0test_multiindex_label_slicing_with_negative_step  s&    """"""""" ""zFTestMultiIndexSlicers.test_multiindex_label_slicing_with_negative_stepc                 C   s   g d}t |tdg}tttd|dgd}|jtj	d d ddf d d f }|jd }tttdd	dgtdd	d
}t
|| |jd }tttdddgtdd	d
}t
|| d S )N)r   r   r   r    i  i  ZTestr4      F   r   G   )r5   r   r    i  i#  )r   r@   rA   rB   r   rp   ro   rD   rq   rr   rG   rH   )rS   rs   rg   rT   Zdf_slicerU   rV   r   r   r!   !test_multiindex_slice_first_level  s    $
 
z7TestMultiIndexSlicers.test_multiindex_slice_first_levelc                 C   s   |}|d }|dd  }| |jdd  }t|| |d  }d|dd < d|jdd < t|j|j |dd  }| |jdd  }t|| d S )Nr
   r   r   )Zreindexr   rG   rM   r   rF   Zassert_numpy_array_equalrH   )rS   Z/multiindex_year_month_day_dataframe_random_dataZymdrW   rU   rV   Zexpr   r   r!   test_int_series_slicing  s    z-TestMultiIndexSlicers.test_int_series_slicingc                 C   s   t ddgddgg}tddgddgdd	gd
dgg|d}|jdtd d dfd d f }tddgddggt ddgd}t|| d S )Nr   r   r   r$   r   r%   r   r   rZ   r   r:   r   rn   )r   r$   )r   r   )r   r@   r   rD   rE   rI   rG   rH   )rS   mirT   rU   rV   r   r   r!    test_loc_slice_negative_stepsize  s    $z6TestMultiIndexSlicers.test_loc_slice_negative_stepsizeN)__name__
__module____qualname__rY   rh   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r	      s     UCJLC	 r	   )ZnumpyrA   rN   Zpandas.errorsr   Zpandasrq   r   r   r   r   r   Zpandas._testingZ_testingrG   Zpandas.tests.indexing.commonr   r	   r   r   r   r!   <module>   s   