o
    Ti6                     @   s  d dl Zd dl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dd  Zd!d" Zd#d$ Zejjd%g d&e
d'd(d)d*gd+d,gd-d.d/ Zejjd%g d&e
d'd(d)d*gd+d,gd-d0d1 Zd2d3 Zejd4g d5d6d7 Z dS )8    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   j/var/www/html/evchargy.com/venv/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_raisesE   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_shiftX   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_datetimed   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+   r,   r   Z	_na_valuelistr/   rC   )	r0   r$   r1   r2   r4   rZ   Zexpected_leftZexpected_rightr3   r   r   r   test_set_nau   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   rm   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   rn   rr   r   r   r   r   rb   t   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)rp   r4   r3   r   r   r   	test_repr   s
   rt   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   rp   rZ   rw   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
| ||}|dtj}	||}||	}	dD ].}
|j|
d}||ks^J t|t|kshJ |j|
d}||kstJ t|t|ks~J qP|	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randomZdefault_rngshuffler_   insertr,   rx   typery   isnan)r0   r$   Zindex_or_series_or_arrayr1   r2   rp   ZMINMAXZindexerZarr_nar{   rP   r   r   r   test_min_max   s>   

zTestReductions.test_min_maxN)r6   r7   r8   rz   r   r   r   r   r   ru      s    ru   c                  C   s   t d} ddlm} ||  d}||  d}||  d}|jdks'J ||ks-J ||ks3J t|t|ks=J t|t|ksGJ d S )Npyarrowr   ArrowIntervalTyper1   r2   )r9   importorskip(pandas.core.arrays.arrow.extension_typesr   int64r*   hash)par   p1Zp2Zp3r   r   r   test_arrow_extension_type   s   
r   c                  C   s  t d} ddlm} tjddddj}| |}t|j|s!J |jj	|j	ks*J |jj
|  ks4J |jd| jg dd	d
sFJ |jd| jg dd	d
sXJ | dd tddD }|j|smJ | 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   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)r9   r   r   r   rI   Zinterval_ranger-   
isinstancer   r*   rk   r   storagefieldequalsrA   rJ   rV   r   )r   r   Z	intervalsr4   r3   r   r   r   test_arrow_array
  s&   

$$"r   c                  C   s  t d} ddlm} tg d}d |d< | |}t|j|s#J |jj	|j	ks,J |jj
|  ks6J | jg ddd}| jg d	dd}|jd
|sSJ |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   )r   Nr   r   r   )r   Nr   r1   r2   r   r   r   r   r   )FTF)rO   )r9   r   r   r   r	   r@   r-   r   r   r*   rk   r   r   r   r   ZStructArrayZfrom_pandasr+   )r   r   rp   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   t d}ddlm} t| }d |d< td|i}||}t	|
dj|s+J | }t	|d jtjs:J 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   r   rY   T)Zignore_indexr   )schema)r9   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   rp   dfr   r4   Ztable2r3   r   r   r   test_arrow_table_roundtripD  s&   


r   c                 C   sz   t d}t| }d |d< td|i}||}| }|jj	d u s&J |
 }t|d jtjs5J t|| d S )Nr   r   rY   )r9   r   r	   r@   rI   r   r   Zreplace_schema_metadatar   metadatar   r   r   r   r/   r   )r   r   rp   r   r   r4   r   r   r   +test_arrow_table_roundtrip_without_metadatae  s   


r   c                  C   s   t d} | 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   )r9   r   r-   rI   r   r+   r   Z__from_arrow__r	   r@   r/   rC   r   )r   rp   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pandasrI   r   r   r   r   r   r   r   Zpandas._testingZ_testingr/   Zpandas.core.arraysr	   Zfixturer$   r%   r<   rb   rt   ru   r   r   r   r:   r;   r   r   r   r   r   r   r   r   <module>   sR    $	

85E

