a
    GGb7.                     @   s  d dl Zd dlZd dlm  mZ d dlZd dlm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZ eje	g de	g dfe	g de	g dfedd	d
edd	d
fedd	d
edd	d
fedd	ddedd	ddfgdd ddd ZG dd dZG dd dZG dd dZdd ZG dd dZedZed d! Zed"d# Zed$d% Z eej!j"d&g d'ed(d)d*d+gd,d-gd.d/d0 Z#eej!j"d&g d'ed(d)d*d+gd,d-gd.d1d2 Z$dS )3    N)IndexIntervalIntervalIndex	Timedelta	Timestamp
date_rangetimedelta_range)IntervalArray)r         )         )              ?       @)r   r         @0 daysr   periods1 dayZ20170101Z20170102
US/Eastern)r   tzc                 C   s   t | d jS )Nr   )strdtype)x r   Ilib/python3.9/site-packages/pandas/tests/arrays/interval/test_interval.py<lambda>       r   )paramsidsc                 C   s   | j S )zC
    Fixture for building an IntervalArray from various dtypes
    )Zparam)Zrequestr   r   r   left_right_dtypes   s    r"   c                   @   sh   e Zd Zejddededfededfedddedddfgejd	ee	gd
d Z
dS )TestAttributeszleft, rightr   r   r   r   z
2018-01-01z
2018-01-02r   )r   constructorc                 C   sH   ||f||ft jg}t |dkddg}|j||dj}t|| d S )NbothFclosed)npnanarrayfrom_tuplesZis_emptytmZassert_numpy_array_equal)selfr%   leftrightr(   Ztuplesexpectedresultr   r   r   test_is_empty)   s    zTestAttributes.test_is_emptyN)__name__
__module____qualname__pytestmarkparametrizer   r   r	   r   r3   r   r   r   r   r#   (   s   

r#   c                   @   sh   e Zd Zejdg ddd Zejdedddd	ej	g d
dd	gdd Z
dd Zdd ZdS )TestMethods
new_closed)r/   r0   r&   Zneitherc                 C   s>   t jtd|d}||}t jtd|d}t|| d S )N
   r'   )r	   from_breaksrange
set_closedr-   assert_extension_array_equal)r.   r(   r;   r+   r2   r1   r   r   r   test_set_closed?   s    
zTestMethods.test_set_closedotherr   r   r0   r'   r   r
   r   r   c                 C   s`   t tjg ddd}d}tjt|d" |jg d|d W d    n1 sR0    Y  d S )NrC   r/   r'   z+'value.closed' is 'right', expected 'left'.match)TFT)rB   )pdZSeriesr	   r=   r7   raises
ValueErrorwhere)r.   rB   ZserrE   r   r   r   test_where_raisesG   s    zTestMethods.test_where_raisesc                 C   s<   t g d}| }t tjtjfdg}t|| d S )N)r   r
   r   )r   r   )r	   r=   shiftr,   r)   r*   r-   assert_interval_array_equalr.   ar2   r1   r   r   r   
test_shiftT   s    zTestMethods.test_shiftc                 C   sf   t tddd}|d}|jg ddd}t|| |d}|jg d	dd}t|| d S )
NZ2000r   r   r
   )rP   r   T)Z
allow_fillrP   )r   r
   rP   )r	   r=   r   rK   taker-   rL   rM   r   r   r   test_shift_datetime\   s    

zTestMethods.test_shift_datetimeN)r4   r5   r6   r7   r8   r9   rA   r   r	   r=   rJ   rO   rR   r   r   r   r   r:   >   s   

r:   c                   @   s   e Zd Zdd Zdd ZdS )TestSetitemc           	      C   s"  |\}}|j dd}|j dd}t||}|jjjdvrvd}tjt|d t	j
|d< W d    n1 sl0    Y  |jjjdv rd}tjt|d tj|d< W d    n1 s0    Y  d S tj|d< t|jgt|d	d   }t|jgt|d	d   }t||}t|| d S )
NTZdeep)mMz='value' should be an interval type, got <.*NaTType'> instead.rD   r   )iuz4Cannot set float NaN to integer-backed IntervalArrayr   )copyr	   from_arraysr   subtypekindr7   rG   	TypeErrorrF   ZNaTrH   r)   ZNaNr*   r   Z	_na_valuelistr-   r@   )	r.   r"   r/   r0   r2   msgZexpected_leftZexpected_rightr1   r   r   r   test_set_nah   s$    ((
zTestSetitem.test_set_nac                 C   s&  t td}| }|d}d}tjt|d |d |d< W d    n1 sT0    Y  tjt|d$ |d d |d d< W d    n1 s0    Y  tjt|d$ |d d |d d< W d    n1 s0    Y  tjt|d& |d d d |d d < W d    n1 s0    Y  tjt|d* t|d d d |d d < W d    n1 sh0    Y  tjt|d, |d d d 	t
|d d < W d    n1 s0    Y  tjt|d, |d d d 	d|d d < W d    n1 s 0    Y  g |d d< t|| d S )	Nr   r&   z*'value.closed' is 'both', expected 'right'rD   r   r   rP   category)r	   r=   r>   rY   r?   r7   rG   rH   r^   Zastypeobjectr-   rL   )r.   arrZorigrB   r_   r   r   r   test_setitem_mismatched_closed   s(    
*226:<<z*TestSetitem.test_setitem_mismatched_closedN)r4   r5   r6   r`   rd   r   r   r   r   rS   g   s   rS   c                  C   s*   t ddg} t| }d}||ks&J d S )Nr$   )r   r
   zI<IntervalArray>
[(0, 1], (1, 2]]
Length: 2, dtype: interval[int64, right])r	   r,   repr)rc   r2   r1   r   r   r   	test_repr   s
    rf   c                   @   s   e Zd Zdd Zdd ZdS )TestReductionsc              	   C   s,  |\}}|j dd}|j dd}t||}d}dD ]x}tjt|d |j|d W d    n1 sh0    Y  tjt|d |j|d W d    q41 s0    Y  q4d}tjt|d |jdd W d    n1 s0    Y  tjt|d |jdd W d    n1 s0    Y  d S )	NTrT   z2`axis` must be fewer than the number of dimensions)r   rD   )axisz'>=' not supported betweenZfoo)	rY   r	   rZ   r7   rG   rH   minmaxr]   )r.   r"   r/   r0   rc   r_   ri   r   r   r   test_min_max_invalid_axis   s    *,*z(TestReductions.test_min_max_invalid_axisc                 C   s  |\}}|j dd}|j dd}t||}|js6J t|jsDJ |d }|d }tt|}tj	| |
|}|dtj}	||}||	}	dD ]\}
|j|
d}||ksJ t|t|ksJ |j|
d}||ksJ t|t|ksJ q|	jdd}t|sJ |	jdd}t|s0J |	jdd}||ksJJ t|t|ks`J |	jdd}||kszJ t|t|ksJ d S )	NTrT   r   rP   r
   )TF)skipnaF)rY   r	   rZ   Zis_monotonic_increasingr   r)   ZarangelenZrandomZshufflerQ   insertr*   rj   typerk   Zisnan)r.   r"   Zindex_or_series_or_arrayr/   r0   rc   ZMINMAXZindexerZarr_narm   resr   r   r   test_min_max   s>    

zTestReductions.test_min_maxN)r4   r5   r6   rl   rs   r   r   r   r   rg      s   rg   pyarrowc                  C   s   dd l } ddlm} ||  d}||  d}||  d}|jdksLJ ||ksXJ ||krdJ t|t|ksxJ t|t|krJ d S )Nr   ArrowIntervalTyper/   r0   )rt   pandas.core.arrays._arrow_utilsrv   int64r(   hash)parv   Zp1Zp2Zp3r   r   r   test_arrow_extension_type   s    r{   c                  C   s  dd l } ddlm} tjddddj}| |}t|j|s@J |jj|jksRJ |jj	| 
 ksfJ |jd| jg ddd	sJ |jd
| jg ddd	sJ | dd tddD }|j|sJ | j||jd	}||sJ tjtdd | j|dd	 W d    n1 s*0    Y  tjtdd( | j|||  dd	 W d    n1 sr0    Y  d S )Nr   ru   r   r   )freqr/   rC   rx   rp   r0   )r
   r   r   r   c                 S   s   g | ]}||d  dqS )r   r/   r0   r   ).0rW   r   r   r   
<listcomp>  r   z$test_arrow_array.<locals>.<listcomp>z&Not supported to convert IntervalArrayrD   float64zdifferent 'subtype')rt   rw   rv   rF   Zinterval_ranger+   
isinstancerp   r(   r[   rx   storagefieldequalsr>   r7   rG   r]   r   )rz   rv   Z	intervalsr2   r1   r   r   r   test_arrow_array   s"    
$$.r   c                  C   s  dd l } ddlm} tg d}d |d< | |}t|j|sDJ |jj|jksVJ |jj	| 
 ksjJ | jg ddd}| jg ddd}|jd	|sJ |jd
|sJ dddd d ddddg}| jj|tg dd}|j|sJ d S )Nr   ru   r   r   r   r   r   )r   Nr   r   r}   )r   Nr   r/   r0   r   r   r~   r   r   )FTF)mask)rt   rw   rv   r	   r=   r+   r   rp   r(   r[   r   r   r   r   ZStructArrayZfrom_pandasr)   )rz   rv   rc   r2   r/   r0   Zvalsr1   r   r   r   test_arrow_array_missing  s$    
r   breaksr   Z2017r   D)r   r|   floatzdatetime64[ns])r!   c           	      C   s   dd l }ddlm} t| }d |d< td|i}||}t|	dj
|sTJ | }t|d jtjsrJ t|| |||g}| }tj||gdd}t|| |j|jg |dj
dg|jd}| }t||dd  d S )	Nr   ru   r   rN   T)Zignore_indexr}   )schema)rt   rw   rv   r	   r=   rF   	DataFrametabler   r   rp   	to_pandasr   IntervalDtyper-   assert_frame_equalZconcat_tablesconcatZchunked_arraycolumnr   )	r   rz   rv   rc   dfr   r2   Ztable2r1   r   r   r   test_arrow_table_roundtrip;  s&    

r   c                 C   sx   dd l }t| }d |d< td|i}||}| }|jjd u sJJ |	 }t
|d jtjshJ t|| d S )Nr   r   rN   )rt   r	   r=   rF   r   r   Zreplace_schema_metadatar   metadatar   r   r   r   r-   r   )r   rz   rc   r   r   r2   r   r   r   +test_arrow_table_roundtrip_without_metadata]  s    

r   )%Znumpyr)   r7   Zpandas.util._test_decoratorsutilZ_test_decoratorsZtdZpandasrF   r   r   r   r   r   r   r   Zpandas._testingZ_testingr-   Zpandas.core.arraysr	   Zfixturer"   r#   r:   rS   rf   rg   Z
skip_if_noZpyarrow_skipr{   r   r   r8   r9   r   r   r   r   r   r   <module>   sX   $	

)3E



