U
    sVcV5                     @   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	d ddge	dddgfe	d	d
dge	d
ddg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*d	d
ddged+dd,d-gd.d/gd0d1d2 Z#eej!j"d*d	d
ddged+dd,d-gd.d/gd0d3d4 Z$ed5d6 Z%ej!"d7d8d9d:gd;d< Z&dS )=    N)IndexIntervalIntervalIndex	Timedelta	Timestamp
date_rangetimedelta_range)IntervalArray                             ?       @      @0 daysperiods1 dayZ20170101Z20170102
US/Easternr   tzc                 C   s   t | d jS )Nr   )strdtype)x r   N/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/arrays/interval/test_interval.py<lambda>       r   )paramsidsc                 C   s   | j S )zC
    Fixture for building an IntervalArray from various dtypes
    )param)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   r6   r   r   r   r   r&   (   s   

r&   c                	   @   sp   e Zd Zejdddddgdd Zejded	d
ddej	d
dddgddgdd Z
dd Zdd ZdS )TestMethods
new_closedr2   r3   r)   neitherc                 C   s>   t jtd|d}||}t jtd|d}t|| d S )N
   r*   )r	   from_breaksrange
set_closedr0   assert_extension_array_equal)r1   r+   r>   r.   r5   r4   r   r   r   test_set_closed?   s    
zTestMethods.test_set_closedotherr   r   r*   r
   r   r   c              	   C   s   t tjddddgdd}tdddg}d	}tjt|d
 |j	|| W 5 Q R X |j
||d}|t
||}t|| d S )Nr   r
   r   r   r2   r*   TFz+'value.closed' is 'right', expected 'left'.match)rF   )pdZSeriesr	   rA   r,   r.   r:   raises
ValueErrorZ_wherewhereastypeobjectr0   Zassert_series_equal)r1   rF   ZsermaskrH   resr4   r   r   r   test_where_raisesG   s    	zTestMethods.test_where_raisesc                 C   s>   t dddg}| }t tjtjfdg}t|| d S )Nr   r
   r   )r   r   )r	   rA   shiftr/   r,   r-   r0   assert_interval_array_equalr1   ar5   r4   r   r   r   
test_shiftZ   s    zTestMethods.test_shiftc                 C   sj   t tddd}|d}|jdddgdd}t|| |d}|jd	ddgdd}t|| d S )
N2000r   r   r
   r   T)Z
allow_fillr   )r	   rA   r   rR   taker0   rS   rT   r   r   r   test_shift_datetimeb   s    

zTestMethods.test_shift_datetimeN)r7   r8   r9   r:   r;   r<   rE   r   r	   rA   rQ   rV   rZ   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krbd}tjt|d t	j
|d< W 5 Q R X |jjjdkrd}tjt|d tj|d< W 5 Q R X d S tj|d< t|jgt|d	d   }t|jgt|d	d   }t||}t|| d S )
NTdeep)mMz='value' should be an interval type, got <.*NaTType'> instead.rG   r   )iuz4Cannot set float NaN to integer-backed IntervalArrayr   )copyr	   from_arraysr   subtypekindr:   rJ   	TypeErrorrI   ZNaTr,   NaNr-   r   Z	_na_valuelistr0   rD   )	r1   r%   r2   r3   r5   msgZexpected_leftZexpected_rightr4   r   r   r   test_set_nao   s$    
zTestSetitem.test_set_nac              	   C   s  t td}| }|d}d}tjt|d |d |d< W 5 Q R X tjt|d |d d |d d< W 5 Q R X tjt|d |d d |d d< W 5 Q R X tjt|d |d d d |d d < W 5 Q R X tjt|d  t|d d d |d d < W 5 Q R X tjt|d" |d d d 	t
|d d < W 5 Q R X tjt|d" |d d d 	d|d d < W 5 Q R X g |d d< t|| d S )	Nr   r)   z*'value.closed' is 'both', expected 'right'rG   r   r   rX   category)r	   rA   rB   rb   rC   r:   rJ   rK   rh   rM   rN   r0   rS   )r1   arrorigrF   ri   r   r   r   test_setitem_mismatched_closed   s(    
 $&&z*TestSetitem.test_setitem_mismatched_closedN)r7   r8   r9   rj   rn   r   r   r   r   r[   n   s   r[   c                  C   s*   t ddg} t| }d}||ks&td S )Nr'   )r   r
   zI<IntervalArray>
[(0, 1], (1, 2]]
Length: 2, dtype: interval[int64, right])r	   r/   reprAssertionError)rl   r5   r4   r   r   r   	test_repr   s
    rq   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 ]P}tjt|d |j|d W 5 Q R X tjt|d |j|d W 5 Q R X q4d}tjt|d |jdd W 5 Q R X tjt|d |jdd W 5 Q R X d S )	NTr\   z2`axis` must be fewer than the number of dimensions)r   rG   )axisz'>=' not supported betweenZfoo)	rb   r	   rc   r:   rJ   rK   minmaxrf   )r1   r%   r2   r3   rl   ri   rt   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s6tt|jsDt|d }|d }tt|}tj	
| ||}|dtj}	||}||	}	dD ]\}
|j|
d}||kstt|t|kst|j|
d}||kstt|t|kstq|	jdd}t|st|	jdd}t|s0t|	jdd}||ksJtt|t|ks`t|	jdd}||ksztt|t|kstd S )	NTr\   r   rX   r
   )TF)skipnaF)rb   r	   rc   Zis_monotonic_increasingrp   r   r,   ZarangelenrandomshufflerY   insertr-   ru   typerv   isnan)r1   r%   Zindex_or_series_or_arrayr2   r3   rl   ZMINMAXZindexerZarr_narx   rP   r   r   r   test_min_max   s>    

zTestReductions.test_min_maxN)r7   r8   r9   rw   r   r   r   r   r   rr      s   rr   pyarrowc                  C   s   dd l } ddlm} ||  d}||  d}||  d}|jdksLt||ksXt||krdtt|t|ksxtt|t|krtd S )Nr   ArrowIntervalTyper2   r3   )r   (pandas.core.arrays.arrow.extension_typesr   int64r+   rp   hash)par   p1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@t|jj	|j	ksRt|jj
|  ksft|jd| jdddd	gd
dst|jd| jddd	dgd
dst| dd tddD }|j|st| j||jd}||sttjtdd | j|dd W 5 Q R X tjtdd | j|||  dd W 5 Q R X d S )Nr   r   r   r   )freqr2   r
   r   r   r   r}   r3   c                 S   s   g | ]}||d  dqS )r   r2   r3   r   ).0r`   r   r   r   
<listcomp>  s     z$test_arrow_array.<locals>.<listcomp>z&Not supported to convert IntervalArrayrG   float64zdifferent 'subtype')r   r   r   rI   Zinterval_ranger.   
isinstancer}   rp   r+   rd   r   storagefieldequalsrB   r:   rJ   rf   r   )r   r   Z	intervalsr5   r4   r   r   r   test_arrow_array  s"    
((r   c                  C   s  dd l } ddlm} tddddg}d |d< | |}t|j|sHt|jj	|j	ksZt|jj
|  ksnt| jdd dgdd	}| jdd dgdd	}|jd
|st|jd|stdddd d ddddg}| jj|tdddgd}|j|std S )Nr   r   r   r   r   r   r   r   r   r2   r3   r   FT)rO   )r   r   r   r	   rA   r.   r   r}   rp   r+   rd   r   r   r   r   ZStructArrayZfrom_pandasr,   )r   r   rl   r5   r2   r3   valsr4   r   r   r   test_arrow_array_missing&  s$    
r   breaksZ2017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
|sTt| }t|d jtjsrtt|| |||g}| }tj||gdd}t|| |j|jg |dj
dg|jd}| }t||dd  d S )	Nr   r   r   rU   T)Zignore_indexr   )schema)r   r   r   r	   rA   rI   	DataFrametabler   r   r}   rp   	to_pandasr   IntervalDtyper0   assert_frame_equalZconcat_tablesconcatchunked_arraycolumnr   )	r   r   r   rl   dfr   r5   Ztable2r4   r   r   r   test_arrow_table_roundtripD  s(    

 r   c                 C   sx   dd l }t| }d |d< td|i}||}| }|jjd ksJt	|
 }t|d jtjsht	t|| d S )Nr   r   rU   )r   r	   rA   rI   r   r   Zreplace_schema_metadatar   metadatarp   r   r   r   r   r0   r   )r   r   rl   r   r   r5   r   r   r   +test_arrow_table_roundtrip_without_metadataf  s    

r   c                  C   s   dd l } | ddddddg}tjtddd}||}tjtjdddgdddd}t	
|| || |g}t	
|| d S )	Nr   r   r   r
   r   r?   r*   )r   )r   r.   rI   r   r,   r   Z__from_arrow__r	   rA   r0   rD   r   )r   rl   r   r5   r4   r   r   r   %test_from_arrow_from_raw_struct_array}  s    
 r   timezoneUTCz
US/PacificGMTc                 C   sj   t dd| d}d|  d| d}tjddgdd	g||d
}tj|d d |dd  |d}t|| d S )NZ2022r   r   zinterval[datetime64[ns, z], ]z
2022-01-01z
2022-01-02z
2022-01-03)r+   r   rX   r   r*   )r   r   rc   r0   Zassert_index_equal)r   Zinclusive_endpoints_fixturedatesr   r5   r4   r   r   r   test_interval_index_subtype  s    
 
 r   )'Znumpyr,   r:   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasrI   r   r   r   r   r   r   r   Zpandas._testingZ_testingr0   Zpandas.core.arraysr	   Zfixturer%   r&   r=   r[   rq   rr   Z
skip_if_noZpyarrow_skipr   r   r   r;   r<   r   r   r   r   r   r   r   r   <module>   s`   $	

05E




