o
    d6                     @   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$ed3d4 Z%ej!"d5g d6d7d8 Z&dS )9    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   ^/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/arrays/interval/test_interval.py<lambda>   s    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   r5   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)r1   r2   r(   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)r0   r*   r=   r-   r4   r3   r   r   r   test_set_closed?   s   
zTestMethods.test_set_closedotherr   r   r2   r)   r   r
   r   r   c                 C   s   t tjg ddd}tg d}d}tjt|d |j	|| W d    n1 s.w   Y  |j
||d}|t
||}t|| d S )NrF   r1   r)   )TFTz+'value.closed' is 'right', expected 'left'.match)rE   )pdZSeriesr	   r@   r+   r-   r9   raises
ValueErrorZ_wherewhereastypeobjectr/   Zassert_series_equal)r0   rE   ZsermaskrH   resr3   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}tj	t
|d |jdtjd W d    d S 1 s9w   Y  d S )N)r   r
   r   )r   r   =can only insert Interval objects and NA into an IntervalArrayrG   r   Z
fill_value)r	   r@   shiftr.   r+   r,   r/   assert_interval_array_equalr9   rJ   	TypeErrorrI   NaTr0   ar4   r3   msgr   r   r   
test_shiftZ   s   "zTestMethods.test_shiftc                 C   s   t tddd}|d}|jg ddd}t|| |d}|jg d	dd}t|| d
}tjt	|d |jdt
ddd W d    d S 1 sQw   Y  d S )N2000r   r   r
   )r]   r   T)Z
allow_fillr]   )r   r
   r]   rR   rG   r   rW   nsrS   )r	   r@   r   rT   taker/   rU   r9   rJ   rV   r+   Ztimedelta64rX   r   r   r   test_shift_datetimef   s   

"zTestMethods.test_shift_datetimeN)r6   r7   r8   r9   r:   r;   rD   r   r	   r@   rQ   r[   r`   r   r   r   r   r<   >   s    

r<   c                   @      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r;d}tjt|d t	j
|d< W d    n1 s6w   Y  |jjjdv rcd}tjt|d tj|d< W d    d S 1 s\w   Y  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kindr9   rJ   rV   rI   rW   r+   NaNr,   r   Z	_na_valuelistr/   rC   )	r0   r$   r1   r2   r4   rZ   Zexpected_leftZexpected_rightr3   r   r   r   test_set_naw   s,   

zTestSetitem.test_set_nac                 C   s  t td}| }|d}d}tjt|d |d |d< W d    n1 s*w   Y  tjt|d |d d |d d< W d    n1 sKw   Y  tjt|d |d d |d d< W d    n1 slw   Y  tjt|d |d d d |d d < W d    n1 sw   Y  tjt|d t|d d d |d d < W d    n1 sw   Y  tjt|d |d d d 	t
|d d < W d    n1 sw   Y  tjt|d |d d d 	d|d d < W d    n1 sw   Y  g |d d< t|| d S )	Nr   r(   z*'value.closed' is 'both', expected 'right'rG   r   r   r]   category)r	   r@   rA   ri   rB   r9   rJ   rK   rn   rM   rN   r/   rU   )r0   arrorigrE   rZ   r   r   r   test_setitem_mismatched_closed   s6   
z*TestSetitem.test_setitem_mismatched_closedN)r6   r7   r8   ro   rs   r   r   r   r   rb   v   s    rb   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)rq   r4   r3   r   r   r   	test_repr   s
   ru   c                   @   ra   )TestReductionsc              	   C   s,  |\}}|j dd}|j dd}t||}d}dD ]<}tjt|d |j|d W d    n1 s4w   Y  tjt|d |j|d W d    n1 sQw   Y  qd}tjt|d |jdd W d    n1 sqw   Y  tjt|d |jdd W d    d S 1 sw   Y  d S )	NTrc   z2`axis` must be fewer than the number of dimensions)r   rG   )axisz'>=' not supported betweenZfoo)	ri   r	   rj   r9   rJ   rK   minmaxrV   )r0   r$   r1   r2   rq   rZ   rx   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sJ t|js"J |d }|d }tt|}tj	| |
|}|dtj}	||}||	}	dD ].}
|j|
d}||ks[J t|t|kseJ |j|
d}||ksqJ t|t|ks{J qM|	jdd}t|sJ |	jdd}t|sJ |	jdd}||ksJ t|t|ksJ |	jdd}||ksJ t|t|ksJ d S )	NTrc   r   r]   r
   )TF)skipnaF)ri   r	   rj   Zis_monotonic_increasingr   r+   Zarangelenrandomshuffler_   insertr,   ry   typerz   isnan)r0   r$   Zindex_or_series_or_arrayr1   r2   rq   ZMINMAXZindexerZarr_nar|   rP   r   r   r   test_min_max   s>   

zTestReductions.test_min_maxN)r6   r7   r8   r{   r   r   r   r   r   rv      s    rv   pyarrowc                  C   s   dd l } ddlm} ||  d}||  d}||  d}|jdks&J ||ks,J ||ks2J t|t|ks<J t|t|ksFJ d S )Nr   ArrowIntervalTyper1   r2   )r   (pandas.core.arrays.arrow.extension_typesr   int64r*   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 J |jj|jks)J |jj	| 
 ks3J |jd| jg ddd	sEJ |jd
| jg ddd	sWJ | dd tddD }|j|slJ | j||jd	}||s{J tjtdd | j|dd	 W d    n1 sw   Y  tjtdd | j|||  dd	 W d    d S 1 sw   Y  d S )Nr   r   r   r   )freqr1   rF   r   r   r2   )r
   r   r   r   c                 S   s   g | ]	}||d  dqS )r   r1   r2   r   ).0rg   r   r   r   
<listcomp>  s    z$test_arrow_array.<locals>.<listcomp>z&Not supported to convert IntervalArrayrG   float64)r   r   r   rI   Zinterval_ranger-   
isinstancer   r*   rk   r   storagefieldequalsrA   r9   rJ   rV   r   )r   r   Z	intervalsr4   r3   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|s"J |jj|jks+J |jj	| 
 ks5J | jg ddd}| jg ddd}|jd	|sRJ |jd
|s]J dddd d ddddg}| jj|tg dd}|j|sJ d S )Nr   r   r   r   r   r   r   )r   Nr   r   r   )r   Nr   r1   r2   r   r   r   r   r   )FTF)rO   )r   r   r   r	   r@   r-   r   r   r*   rk   r   r   r   r   ZStructArrayZfrom_pandasr+   )r   r   rq   r4   r1   r2   valsr3   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
|s*J | }t|d jtjs9J 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   rY   T)Zignore_indexr   )schema)r   r   r   r	   r@   rI   	DataFrametabler   r   r   	to_pandasr   IntervalDtyper/   assert_frame_equalZconcat_tablesconcatchunked_arraycolumnr   )	r   r   r   rq   dfr   r4   Ztable2r3   r   r   r   test_arrow_table_roundtripL  s&   

r   c                 C   sx   dd l }t| }d |d< td|i}||}| }|jjd u s%J |	 }t
|d jtjs4J t|| d S )Nr   r   rY   )r   r	   r@   rI   r   r   Zreplace_schema_metadatar   metadatar   r   r   r   r/   r   )r   r   rq   r   r   r4   r   r   r   +test_arrow_table_roundtrip_without_metadatan  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g ddd	dd}t	
|| || |g}t	
|| d S )
Nr   r   r   r
   r   r>   r)   )r   r   r
   )r   )r   r-   rI   r   r+   r   Z__from_arrow__r	   r@   r/   rC   r   )r   rq   r   r4   r3   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   r]   r   r)   )r   r   rj   r/   Zassert_index_equal)r   Zinclusive_endpoints_fixturedatesr   r4   r3   r   r   r   test_interval_index_subtype  s   r   )'numpyr+   r9   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasrI   r   r   r   r   r   r   r   Zpandas._testingZ_testingr/   Zpandas.core.arraysr	   Zfixturer$   r%   r<   rb   ru   rv   Z
skip_if_noZpyarrow_skipr   r   r   r:   r;   r   r   r   r   r   r   r   r   <module>   sb    $	

85
E



