U
    sVc'                     @  s  d dl mZ d dlZd dlZd dlZd dlmZmZm	Z	 d dl
m  mZ d dlZd dlmZmZmZmZ d dlmZ d dlmZmZmZmZ d dlmZ d dlmZ ej dd	d
dddgddd Z!ej dd Z"ej dd Z#ej dd Z$G dd dZ%G dd de%Z&G dd de%Z'G dd de%Z(ej)j*ded d!d"gj+ee,d"d#ffej-d$d%dd&j+ee.d"d#ffej/d$d%dd&j+effgd'd( d)d*d+ Z0ej)j*d,ed d!d"gj+e.d"d#ej1ffej-d$d%dd&j+e,d"d#ej1ffej/d$d%dd&j+e.d"d#e,d"d#ej1ffgd-d( d)d.d/ Z2ej)*d0ej-d1d2d3j3ej4d1d2d3j3gd4d5 Z5ej)*d6d7d8gej)*d9e6d:d;ged<d=gdd>ed:d;gdd?gej)*d@e7ej3ej3ej8ej9ej:ej;gdAdB Z<ej)*d9e6d:d;ged<d=gdd>ed:d;gdd?gej)*dCd<d=gdDdEge	d:dFdGgd= gdHdI Z=ej)*d@e7e>ej3ej8gdJdK Z?ej)*dLdMdNgdOdP Z@ej dQdRejAdSeBdTdUejAdVeBdVdUgddWdX ZCej)*dLdMdNgdYdZ ZDdS )[    )annotationsN)NaTOutOfBoundsDatetime	Timestamp)DatetimeIndexPeriodPeriodIndexTimedeltaIndex)DatetimeArrayPandasArrayPeriodArrayTimedeltaArray)_sequence_to_dt64ns)sequence_to_td64nsDBWMQY)paramsc                 C  s   | j S )z:Fixture returning parametrized frequency in string format.)param)request r   I/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/arrays/test_datetimelike.pyfreqstr"   s    r   c                 C  s   t jtdd| d}|S )z
    A fixture to provide PeriodIndex objects with different frequencies.

    Most PeriodArray behavior is already tested in PeriodIndex tests,
    so here we just test that the PeriodArray behavior matches
    the PeriodIndex behavior.
    
2000-01-01d   startperiodsfreq)pdperiod_ranger   )r   pir   r   r   period_index(   s    
r%   c                 C  s   t jtdd| d}|S )z
    A fixture to provide DatetimeIndex objects with different frequencies.

    Most DatetimeArray behavior is already tested in DatetimeIndex tests,
    so here we just test that the DatetimeArray behavior matches
    the DatetimeIndex behavior.
    r   r   r   )r"   
date_ranger   )r   dtir   r   r   datetime_index6   s    
r(   c                   C  s   t dddgS )a  
    A fixture to provide TimedeltaIndex objects with different frequencies.
     Most TimedeltaArray behavior is already tested in TimedeltaIndex tests,
    so here we just test that the TimedeltaArray behavior matches
    the TimedeltaIndex behavior.
    1 Day3 Hoursr   )r	   r   r   r   r   timedelta_indexD   s    	r+   c                   @  s  e Zd ZU ded< ejdd Zdd Zej	de
jdd	d
e
jdd	dde
jdd	d
e
jdd	ddgdd Zej	dddgej	dddgdd Zdd Zej	dddedddd jgd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zej	d1d2d3gd4d5 Zd6d7 Zej	d8d9d:d;gd<d= Zd>d? Zd@dA ZdBdC Z dDdE Z!dFdG Z"ej	d8e
j#e
j$e%j&e'e(gdHdI Z)dJdK Z*ej	dddgdLdM Z+dNdO Z,ej	d8e'e%j&e
j#e
j$gdPdQ Z-dRdS Z.dTdU Z/dVdW Z0dXdY Z1d9S )ZSharedTestsz2type[DatetimeIndex | PeriodIndex | TimedeltaIndex]	index_clsc                 C  s,   t jdddd d d }| j|dd}|S )	z5Fixture returning DatetimeArray with daily frequency.
   i8dtype      ʚ;r   r!   )nparange	array_clsselfdataarrr   r   r   arr1dS   s    zSharedTests.arr1dc              	   C  sd   |}|  |}tjtdd ||d d k W 5 Q R X tjtdd ||dg k W 5 Q R X d S )NzLengths must matchmatch   r   )r-   pytestraises
ValueError)r:   r=   r<   idxr   r   r   test_compare_len1_raisesZ   s    
z$SharedTests.test_compare_len1_raisesresultZ2020   r    UTC)r    tzz0 days2020Q1r   r    r!   c                 C  s.   t |}t||kstt||kr*td S N)r"   CategoricalallAssertionErrorany)r:   rF   expectedr   r   r   test_compare_with_Categoricalg   s    

z)SharedTests.test_compare_with_CategoricalreverseTFas_indexc                 C  s   t j||d}|rt |}|| }}|r4|| }}tj|jtd}| }	||k}
t|
| ||k}
t|
|	 |s|s||k }
t|
|	 ||k}
t|
| ||k}
t|
|	 ||k}
t|
| d S )N)orderedr0   )	r"   rN   CategoricalIndexr6   onesshapebooltmassert_numpy_array_equal)r:   r=   rU   rT   rV   otherleftrightrX   zerosrF   r   r   r   test_compare_categorical_dtypeu   s*    


z*SharedTests.test_compare_categorical_dtypec                 C  s   t jdddd d d }t j| | jtk	r4d nd}| j||d}| j|}d	d
dg}||}||}t	
| || t d	d
dg}||}||}t	
| || d S )Nr   r/   r0   r2   r3   r4   r   r5   r@      ^   )r6   r7   randomshuffler8   r   r-   _simple_newtaker[   assert_index_equalarray)r:   r;   r!   r<   rD   ZtakersrF   rR   r   r   r   	test_take   s    




zSharedTests.test_take
fill_value   g       @i  r@      c              	   C  sj   t jdddd d d }| j|dd}d	|jj d
}tjt|d |jddgd|d W 5 Q R X d S )Nr.   r/   r0   r2   r3   r4   r   r5   value should be a '' or 'NaT'. Gotr>   r   r@   TZ
allow_fillrk   )	r6   r7   r8   _scalar_type__name__rA   rB   	TypeErrorrg   )r:   rk   r;   r<   msgr   r   r   test_take_fill_raises   s
    z!SharedTests.test_take_fill_raisesc                 C  s   t jdddd d d }| j|dd}|jd	d
gdd d}|d tksLt|jd	d
gdt jd}|d tksrt|jd	d
gdtd}|d tkstd S )Nr.   r/   r0   r2   r3   r4   r   r5   r@   Trp   r   )r6   r7   r8   rg   r   rP   nanr:   r;   r<   rF   r   r   r   test_take_fill   s    zSharedTests.test_take_fillc              	   C  sv   |j ddgdt|d d}|ddg }t|| d|jj d}tjt|d |j ddgddd W 5 Q R X d S )	Nrv   r@   Trp   rn   ro   r>   foo)	rg   strr[   assert_equalrq   rr   rA   rB   rs   )r:   r=   rF   rR   rt   r   r   r   test_take_fill_str   s    zSharedTests.test_take_fill_strc                 C  s   |}|  |}|dt}| |}||d d |dd  |g}|t}|  t|d d |dd  |gd }t	
|  || d S )Nr   rv   r@   )r-   insertr   r8   _concat_same_typeastypeobjectr6   Zconcatenater[   rh   )r:   r=   r<   rD   rF   arr2rR   r   r   r   test_concat_same_type   s    

 
(z!SharedTests.test_concat_same_typec              	   C  s   t jdddd d d }| j|dd}||d	 }|jjj}t||sNt|t	}t||sftd
| j
j d}tjt|d |d W 5 Q R X d S )Nr.   r/   r0   r2   r3   r4   r   r5   r   z'value' should be a .r>   rz   )r6   r7   r8   Z_unbox_scalar_datar1   type
isinstancerP   r   scalar_typerr   rA   rB   rC   )r:   r;   r<   rF   rR   rt   r   r   r   test_unbox_scalar   s    

zSharedTests.test_unbox_scalarc                 C  sV   t jdddd d d }| j|dd}||d	  ||d d
  |t d S )Nr.   r/   r0   r2   r3   r4   r   r5   r   r@   )r6   r7   r8   Z_check_compatible_withr   r9   r   r   r   test_check_compatible_with   s
    z&SharedTests.test_check_compatible_withc                 C  sN   t jdddd d d }| j|dd}|t|d	 }||d	 ksJtd S )
Nr.   r/   r0   r2   r3   r4   r   r5   r   )r6   r7   r8   Z_scalar_from_stringr{   rP   rx   r   r   r   test_scalar_from_string   s    z#SharedTests.test_scalar_from_stringc              	   C  sT   t jdddd d d }| j|dd}d	}tjt|d
 |d W 5 Q R X d S )Nr.   r/   r0   r2   r3   r4   r   r5   z)does not support reduction 'not a method'r>   znot a method)r6   r7   r8   rA   rB   rs   Z_reduce)r:   r;   r<   rt   r   r   r   test_reduce_invalid   s
    zSharedTests.test_reduce_invalidmethodpadZbackfillc                 C  sx   t jdddd d d }| j|dd}t|d	< |d
kr@|d n|d }|j|d}|d	 |ksdt|d	 tksttd S )Nr.   r/   r0   r2   r3   r4   r   r5   rb   r   rG      )r   )r6   r7   r8   r   ZfillnarP   )r:   r   r;   r<   rk   rF   r   r   r   %test_fillna_method_doesnt_change_orig   s    z1SharedTests.test_fillna_method_doesnt_change_origc                 C  s   t jdddd d d }| j|dd}||d	 }|d	ksBt|j|d
 dd}|dks`t||d	d }t jd	d
gt jd}t|| |j|d	d dd}t jd
dgt jd}t|| |t	}|dkstd S )Nr.   r/   r0   r2   r3   r4   r   r5   r@   rl   r_   ZsiderG   )
r6   r7   r8   searchsortedrP   ri   intpr[   r\   r   )r:   r;   r<   rF   rR   r   r   r   test_searchsorted  s    
zSharedTests.test_searchsortedboxNindexZseriesc              
   C  s  t |tr\|j}|dd \}}|d k	r\|j||j|kr\tjjtdd}|j	| |}	|d krjn|dkr~| 
|	}	n
t|	}	|	t|	d }
|
dkst|	jt|	d dd}
|
dkst|	d	d
 |	dd D }
tjddgtjd}t|
| tjttd|jj dd |	d W 5 Q R X |dkrHdnd}td|N tjttd|jj d| dd |	t|	d dg W 5 Q R X W 5 Q R X d S )Nr@   rG   !timezone comparisons inconsistentrB   reasonr   rl   r_   r   c                 S  s   g | ]}t |qS r   r{   .0xr   r   r   
<listcomp>E  s     zBSharedTests.test_searchsorted_castable_strings.<locals>.<listcomp>r0   rn   z/', 'NaT', or array of those. Got 'str' instead.r>   rz   pythonZStringArrayZArrowStringArraystring_storagez"', 'NaT', or array of those. Got 'z
' instead.Zbaz)r   r
   rJ   tznamerA   markxfailrs   node
add_markerr-   r"   Seriesr   r{   rP   r6   ri   r   r[   r\   rB   reescaperq   rr   Zoption_context)r:   r=   r   r   r   rJ   ts1ts2r   r<   rF   rR   Zarr_typer   r   r   "test_searchsorted_castable_strings&  sL    
  
z.SharedTests.test_searchsorted_castable_stringsc                 C  s\   t jdd tddD dd}| j|dd}|d	  t|}|d	  t|}|d	  d S )
Nc                 S  s   g | ]}t j| qS r   )r   value)r   nr   r   r   r   a  s     zGSharedTests.test_getitem_near_implementation_bounds.<locals>.<listcomp>r@   r   r/   r0   nsr5   r   )r6   asarrayranger8   r"   Indexr   )r:   Zi8valsr<   r   Zserr   r   r   'test_getitem_near_implementation_bounds^  s    

z3SharedTests.test_getitem_near_implementation_boundsc                 C  s   t ||jd d tjf |jd}|d d tjf }t|| |}t ||jd ddf |jd}|d ddf }t|| |d }|d }||kstd S )Nr0   rG   r   )rv   r   rv   )r   r   r6   newaxisr1   r[   r|   rP   )r:   r=   rR   rF   arr2dr   r   r   test_getitem_2dk  s    " zSharedTests.test_getitem_2dc                 C  s~   |j d dtjf }t|j||jd}t|}t|dks@t|D ]4}t	|t|sZt|j
dksht|j|jksDtqDd S )NrG   r0   r@   )r   r6   r   r   rf   r1   listlenrP   r   ndim)r:   r=   data2dr   rF   r   r   r   r   test_iter_2d|  s    zSharedTests.test_iter_2dc              
   C  s   |j d dtjf }t|j||jd}t|}t|tr~dt|j	 d|d 
  d|d 
  d|d 
  d	|j 
}n6dt|j	 d|d  d|d  d|d  d	|j 
}||kstd S )
NrG   r0   <z>
[
['r   z'],
['r@   rl   z']
]
Shape: (3, 1), dtype: )r   r6   r   r   rf   r1   reprr   r   rr   Z
_repr_baserP   )r:   r=   r   r   rF   rR   r   r   r   test_repr_2d  s    
@4
zSharedTests.test_repr_2dc                 C  s   t jdddd d d }| j|dd}|d	 |d
< t jdddd d d }|d	 |d
< t|j| |dd  |d d< |dd  |d d< t|j| d S )Nr.   r/   r0   r2   r3   r4   r   r5   r@   r   rl   )r6   r7   r8   r[   r\   asi8r:   r;   r<   rR   r   r   r   test_setitem  s    zSharedTests.test_setitemc                 C  s   |  d d d }|jjdkr(|d }|}|tkr>t|}nF|tjkrZt|t}n*|t	krv|tj
|td}n||t}||d d < t|| d S )Nrv   )mr   r0   )copyr1   kind
_with_freqr   r6   ri   r   r   r   r   r[   r|   )r:   r   r=   rR   valsr   r   r   test_setitem_object_dtype  s    


z%SharedTests.test_setitem_object_dtypec           	      C  s   t |tr\|j}|dd  \}}|d k	r\|j||j|kr\tjjtdd}|j	| |
 }|dd  |ddg< |
 }dd |dd  D |d d< t|| |
 }|d	 |d< |
 }t|d	 |d< t|| d S )
Nr   r   r   r   r@   c                 S  s   g | ]}t |qS r   r   r   r   r   r   r     s     z1SharedTests.test_setitem_strs.<locals>.<listcomp>rl   rv   )r   r
   rJ   r   rA   r   r   rs   r   r   r   r[   r|   r{   )	r:   r=   r   rJ   r   r   r   rR   rF   r   r   r   test_setitem_strs  s&    
  zSharedTests.test_setitem_strsc                 C  sd   |  d d d }t|ts&|d }t|}|r>t|}|d d d |d d < t|| d S )Nrv   )	r   r   r   r   r"   rN   rW   r[   r|   )r:   r=   rU   rR   catr   r   r   test_setitem_categorical  s    



z$SharedTests.test_setitem_categoricalc              	   C  s   t jdddd d d }| j|dd}|d	 }tjtd
d ||d< W 5 Q R X tjtdd t |d	< W 5 Q R X d}tjt|d |d g|g < W 5 Q R X d}tjt|d |d d |dd< W 5 Q R X d S )Nr.   r/   r0   r2   r3   r4   r   r5   r   zindex 12 is out of boundsr>   rm   zvalue should be a.* 'object'z<cannot set using a list-like indexer with a different lengthr@   z=cannot set using a slice indexer with a different length thanrG   )	r6   r7   r8   rA   rB   
IndexErrorrs   r   rC   )r:   r;   r<   valrt   r   r   r   test_setitem_raises  s    zSharedTests.test_setitem_raisesc              	   C  sp   d|j j d}tjt|d |ddg|d d< W 5 Q R X tjt|d |ddg|d d< W 5 Q R X d S )	Nrn   z ', 'NaT', or array of those. Gotr>   r   r@   rl   g        g      ?)rq   rr   rA   rB   rs   )r:   r=   r   rt   r   r   r   test_setitem_numeric_raises  s    z'SharedTests.test_setitem_numeric_raisesc                 C  s   t jdddd d d }| j|dd}|tjd	d
 }|tjd	d
7 }t|| |tjd	d
 }|tjd	d
8 }t|| d S )Nr.   r/   r0   r2   r3   r4   r   r5   r@   days)r6   r7   r8   r"   	Timedeltar[   r|   r   r   r   r   test_inplace_arithmetic  s    z#SharedTests.test_inplace_arithmeticc              	   C  s   t jdddd d d }| j|dd}d	}tjt|d
 |jddd}W 5 Q R X | }| jtkrz|j	j
d|jd}n
|	d}||d< |d d |dd < t|| d S )Nr.   r/   r0   r2   r3   r4   r   r5   zPassing <class 'int'> to shiftr>   r@   )rk   r   rv   )r6   r7   r8   r[   assert_produces_warningFutureWarningshiftr   r   rq   Z_from_ordinalr!   r|   )r:   r;   r<   rt   rF   rR   Zfill_valr   r   r   test_shift_fill_int_deprecated,  s    

z*SharedTests.test_shift_fill_int_deprecatedc                 C  s  |}t |d dkr |d d }|t |d  }| }t|t|ksLt||ksXtt|t |d < t|ts|t |d d t |d d   }|jddtkst| }t|t|kst||kst|d d  tkst|d d jddtkst|dd}|jd d}t|t|ks:t||ksHt|jd ddtks`t|jdd}t|j	|g|j
d	}t|| |jddd}t|j	tg|j
d	}t|| |jdd}t|| |jddd}t|| d S )
Nrl   r   rv   r@   F)skipna)axis)r   r   r0   )r   Zmedianr   rP   r   r   r   Zmeanreshape_from_sequencer1   r[   r|   )r:   r=   r<   rR   rF   r   Z	expected2r   r   r   test_median>  s>    
(zSharedTests.test_medianc                 C  sT   t jdddgt jd}| j|| jd}tj|dd}| j|| jd}t|| d S )Nr@   rl   rG   r0   ZInt64)r6   ri   int64r8   example_dtyper"   r[   assert_extension_array_equal)r:   r<   rR   r;   rF   r   r   r   test_from_integer_arrayn  s
    z#SharedTests.test_from_integer_array)2rr   
__module____qualname____annotations__rA   fixturer=   rE   r   parametrizer"   r&   timedelta_ranger#   rS   ra   rj   r   timeru   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   P   sp   

	
!
	


7




0r,   c                   @  s   e Zd ZeZeZeZdZ	e
j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e
jdejdd Ze
jdejdd Zdd  Zd!d" Zd#d$ Z d%d& Z!d'd( Z"d)S )*TestDatetimeArrayM8[ns]c                 C  s    |}t jdd||d}|j}|S )zc
        Fixture returning DatetimeArray with parametrized frequency and
        timezones
        z2016-01-01 01:01:00r   r    r!   rJ   )r"   r&   r   )r:   Ztz_naive_fixturer   rJ   r'   dtar   r   r   r=   ~  s    zTestDatetimeArray.arr1dc                 C  sj   |  |}|jdd}|tjdd }|d }t|| |j}|jdd}|jd }t|| d S )NZ2Tr5   r@   )minutes)	r-   roundr"   r   r   r[   rh   r   assert_datetime_array_equal)r:   r=   r'   rF   rR   r   r   r   r   
test_round  s    

zTestDatetimeArray.test_roundc                 C  s  t |}t|}|j}||ks$tt|| tj|dd}||ksJtt|| tj|dd}|j}||ksvtt|| tj|ddd}||kstt|| tj|dd}||k	stt|| tj|td}tjt	|td}t|| tj|dd}||j
k	stt||r,t|j
 }t|| dtfD ]0}tj||d}t||}t|| qJd S )NFr   datetime64[ns]r0   r1   r   r   float64)r
   r6   r   r   rP   r[   r\   ri   r   r   r   may_share_memoryr   r{   r   )r:   r(   r<   rF   rR   r1   r   r   r   test_array_interface  s<    

z&TestDatetimeArray.test_array_interfacec                 C  sT   |}|  |}tt|}tj|td}t|| tj|td}t|| d S Nr0   )r-   r6   ri   r   r   r[   r\   r:   r=   r<   r'   rR   rF   r   r   r   test_array_object_dtype  s    
z)TestDatetimeArray.test_array_object_dtypec                 C  s   |}|  |}|jd}tj|dd}t|| tj|dd}t|| tj|ddd}|j|jksnt|jd k	s|ttj|ddd}|j|jkst|jd k	std S )Nr   r0   r   Fr   )	r-   r   viewr6   ri   r[   r\   baserP   r   r   r   r   test_array_tz  s    
zTestDatetimeArray.test_array_tzc                 C  s|   |}|  |}|j}tj|dd}t|| tj|tjd}t|| tj|ddd}|j|jk	sjt|jd ksxtd S )Nr/   r0   Fr   )	r-   r   r6   ri   r[   r\   r   r   rP   r   r   r   r   test_array_i8_dtype  s    
z%TestDatetimeArray.test_array_i8_dtypec                 C  sL   t jddgdd}t|}|j|ks(tt|d d }|jj|ksHtd S )Nr   z
2000-01-02r   r0   r   )r6   ri   r
   r   rP   r   )r:   r<   r   r   r   r   test_from_array_keeps_base  s
    z,TestDatetimeArray.test_from_array_keeps_basec                 C  sR   |}|  |}t|t|ks"tt|}t|ts:tt|t|ksNtd S rM   )r-   r   rP   r"   r   r   r   )r:   r=   r<   r'   Zdti2r   r   r   test_from_dti  s    

zTestDatetimeArray.test_from_dtic                 C  sN   |}|  |}|d}t|tjs(t|jdks6tt|t|ksJtd S NOr-   r   r   r6   ndarrayrP   r1   r   )r:   r=   r<   r'   asobjr   r   r   test_astype_object  s    

z$TestDatetimeArray.test_astype_objectc              	   C  s   |}t |}d}tjt|d |j|d}W 5 Q R X tjt|d |j|d}W 5 Q R X t|tsjttt	
|t	
| d S )Nz0to_perioddelta is deprecated and will be removedr>   r5   )r
   r[   r   r   Zto_perioddeltar   r   rP   rh   r"   r   )r:   r(   r   r'   r<   rt   rR   rF   r   r   r   test_to_perioddelta  s    z%TestDatetimeArray.test_to_perioddeltac                 C  sN   |}t |}|j|d}|j|d}t|ts2ttt|t| d S )Nr5   )	r
   	to_periodr   r   rP   r[   rh   r"   r   )r:   r(   r   r'   r<   rR   rF   r   r   r   test_to_period"  s    z TestDatetimeArray.test_to_periodc              	   C  s`   | dd}|jd krd nt}t|" |d}|d dd}W 5 Q R X t|| d S )Nr@   rv   r   )r   rJ   UserWarningr[   r   r  Zassert_period_array_equal)r:   r=   r   warnrF   rR   r   r   r   test_to_period_2d.  s    
z#TestDatetimeArray.test_to_period_2dpropnamec                 C  sN   |  |}|}|j|jkstt||}tjt|||jd}t|| d S r   )	r-   r!   rP   getattrr6   ri   r1   r[   r\   )r:   r=   r
  r'   r<   rF   rR   r   r   r   test_bool_properties7  s    

z&TestDatetimeArray.test_bool_propertiesc           	   	   C  sl   d }d}|dkrt }| |}|}tj||d& t||}tjt|||jd}W 5 Q R X t|| d S )Nz4weekofyear and week have been deprecated, please use)weekZ
weekofyearr>   r0   )	r   r-   r[   r   r  r6   ri   r1   r\   )	r:   r=   r
  r  rt   r'   r<   rF   rR   r   r   r   test_int_propertiesC  s    

 z%TestDatetimeArray.test_int_propertiesc           
   
   C  s  |}|  |}||j}|jddgd|d}|d |ks>td|jj d}tjt	|d |jddgd|| d W 5 Q R X tjt	|d |jddgdt
d	d W 5 Q R X |jd k	rd nd
}||}d}tjt	|d |jddgd|d W 5 Q R X tj}	d|jj d}tjt	|d |jddgd|	d W 5 Q R X tdd}	tjt	|d |jddgd|	d W 5 Q R X |jd k	r|d}	d}tjt|d4 tjtdd |jddgd|	d}W 5 Q R X W 5 Q R X d S )Nrv   r@   Trp   r   rn   ro   r>   Z2014Q1z
US/Easternz:Cannot compare tz-naive and tz-aware datetime-like objectsr   r   zAustralia/Melbournez2Timezones don't match. .* != 'Australia/Melbourne'zmismatched timezone)r-   tz_localizerJ   rg   rP   rq   rr   rA   rB   rs   r   r   r   r6   timedelta64rC   r[   r   r   )
r:   r=   fixed_now_tsr<   r'   nowrF   rt   rJ   r   r   r   r   test_take_fill_validT  s>    
""

 z&TestDatetimeArray.test_take_fill_validc              	   C  sP   |}|j d kr|d}n
|d }tjtdd |||g W 5 Q R X d S )NrI   zto_concat must have the samer>   )rJ   r  rA   rB   rC   r   )r:   r=   r<   r]   r   r   r   test_concat_same_type_invalid  s    

z/TestDatetimeArray.test_concat_same_type_invalidc                 C  sf   t tjddddd}t tjddddd}t ||g}t tdddd	gd}t|| d S )
N2000rl   r   z
US/Centralr   Hz2000-01-01 00:00:00z2000-01-02 00:00:00z2000-01-01 01:00:00)r
   r"   r&   r   to_datetimer  r[   r   )r:   abrF   rR   r   r   r   $test_concat_same_type_different_freq  s    z6TestDatetimeArray.test_concat_same_type_different_freqc                 C  s6   |}| d}tjdd |D td}t|| d S )N%Y %bc                 S  s   g | ]}| d qS )r  strftime)r   tsr   r   r   r     s     z3TestDatetimeArray.test_strftime.<locals>.<listcomp>r0   r  r6   ri   r   r[   r\   r:   r=   r<   rF   rR   r   r   r   test_strftime  s    
zTestDatetimeArray.test_strftimec                 C  s>   t tdtg}|d}tjdtjgtd}t	|| d S )N
2019-01-01%Y-%m-%dr0   )
r
   r   r   r  r6   ri   rw   r   r[   r\   r:   r<   rF   rR   r   r   r   test_strftime_nat  s    
z#TestDatetimeArray.test_strftime_natN)#rr   r   r   r   r-   r
   r8   r   r   r   rA   r   r=   r   r   r   r   r   r   r   r  r  r  r	  r   r   	_bool_opsr  
_field_opsr  r  r  r  r!  r%  r   r   r   r   r   x  s4   

*	
		

4r   c                   @  sf   e Zd ZeZeZejZ	dZ
dd Zdd Zdd Zdd	 Zejd
ejdd Zdd Zdd ZdS )TestTimedeltaArraym8[ns]c                 C  sX   t ddg}t|}t|t|ks(tt|}t|t s@tt|t|ksTtd S )Nr)   r*   )r	   r   r   rP   r"   r   r   )r:   tdir<   Ztdi2r   r   r   test_from_tdi  s    
z TestTimedeltaArray.test_from_tdic                 C  sT   t ddg}t|}|d}t|tjs.t|jdks<tt|t|ksPtd S )Nr)   r*   r   )	r	   r   r   r   r6   r  rP   r1   r   )r:   r*  r<   r  r   r   r   r    s    
z%TestTimedeltaArray.test_astype_objectc                 C  s,   |}t |}| }| }t|| d S rM   )r   Zto_pytimedeltar[   r\   r:   r+   r*  r<   rR   rF   r   r   r   test_to_pytimedelta  s
    z&TestTimedeltaArray.test_to_pytimedeltac                 C  s.   |}t |}| }| }t||j d S rM   )r   total_secondsr[   r\   valuesr,  r   r   r   test_total_seconds  s
    z%TestTimedeltaArray.test_total_secondsr
  c                 C  s<   |}t |}t||}tjt|||jd}t|| d S r   )r   r  r6   ri   r1   r[   r\   )r:   r+   r
  r*  r<   rF   rR   r   r   r   r    s
    
z&TestTimedeltaArray.test_int_propertiesc                 C  s  t |}t|}|j}||ks$tt|| tj|dd}||ksJtt|| tj|dd}|j}||ksvtt|| tj|ddd}||kstt|| tj|dd}||k	stt|| tj|td}tjt	|td}t|| tj|dd}||j
k	stt||r,t|j
 }t|| dtfD ]0}tj||d}t||}t|| qJd S )NFr   ztimedelta64[ns]r0   r   r   r   )r   r6   r   r   rP   r[   r\   ri   r   r   r   r   r   r{   r   )r:   r+   r<   rF   rR   r1   r   r   r   r     s<    

z'TestTimedeltaArray.test_array_interfacec           	   	   C  s   |}t |}tjdd}|jddgd|d}|d |ks<t|}d|jj d}tjt	|d	 |jddgd|d W 5 Q R X |
d
}tjt	|d	 |jddgd|d W 5 Q R X tdd}tjt	|d	 |jddgd|d W 5 Q R X d S )Nr@   r   rv   Trp   r   rn   ro   r>   r   r   r   )r   r"   r   rg   rP   rq   rr   rA   rB   rs   r  r6   
datetime64)	r:   r+   r  r*  r<   Ztd1rF   r   rt   r   r   r   r    s    
z'TestTimedeltaArray.test_take_fill_validN)rr   r   r   r	   r-   r   r8   r"   r   r   r   r+  r  r-  r0  rA   r   r   r'  r  r   r  r   r   r   r   r(    s   
		
	*r(  c                   @  s   e Zd ZeZeZeZeg ddj	Z
ejdd Zdd Zdd Zd	d
 Zejdddgdd Zdd Zdd Zejdejdd Zejdejdd Zdd Zdd Zdd ZdS ) TestPeriodArrayr   r5   c                 C  s   |j S )zW
        Fixture returning DatetimeArray from parametrized PeriodIndex objects
        )r   )r:   r%   r   r   r   r=   3  s    zTestPeriodArray.arr1dc                 C  sR   |  |}|}t|t|ks"tt|}t|ts:tt|t|ksNtd S rM   )r-   r   rP   r"   r   r   r   )r:   r=   r$   r<   Zpi2r   r   r   test_from_pi:  s    

zTestPeriodArray.test_from_pic                 C  sN   |  |}|}|d}t|tjs(t|jdks6tt|t|ksJtd S r   r   )r:   r=   r$   r<   r  r   r   r   r  D  s    

z"TestPeriodArray.test_astype_objectc              	   C  s   |}t j}d|jj d}tjt|d |jddgd|d W 5 Q R X t	dd	}tjt|d |jddgd|d W 5 Q R X d S )
Nrn   ro   r>   rv   r@   Trp   r   r   )
r   r   rq   rr   rA   rB   rs   rg   r6   r  )r:   r=   r<   r   rt   r   r   r   r  L  s    z$TestPeriodArray.test_take_fill_validhowSEc                 C  sT   |  |}|}t|j|d}|j|d}t|ts8ttt|t| d S )N)r4  )	r-   r
   to_timestampr   rP   r[   rh   r"   r   )r:   r4  r=   r$   r<   rR   rF   r   r   r   test_to_timestampZ  s    
z!TestPeriodArray.test_to_timestampc           	      C  s   t jddddj}| }| }|jdks0tt|| |d d d }| }| }|jdkshtt|| |d}| }|jdkstt|| d S )Nz
2021-10-18rG   r   rL   rl   Z2B)	r"   r&   r   r  r7  r!   rP   r[   r   )	r:   r   ZparrrF   Zdta2Zparr2Zresult2Zparr3Zresult3r   r   r    test_to_timestamp_roundtrip_bdayg  s    
z0TestPeriodArray.test_to_timestamp_roundtrip_bdayc              	   C  s^   t jdddd}d}tjt|d |  W 5 Q R X tjt|d |j  W 5 Q R X d S )NZ1500r   rG   )r!   r    z7Out of bounds nanosecond timestamp: 1500-01-01 00:00:00r>   )r"   r#   rA   rB   r   r7  r   )r:   r$   rt   r   r   r   test_to_timestamp_out_of_boundsz  s    z/TestPeriodArray.test_to_timestamp_out_of_boundsr
  c                 C  s8   |  |}|}t||}tt||}t|| d S rM   r-   r  r6   ri   r[   r\   r:   r=   r
  r$   r<   rF   rR   r   r   r   r    s
    

z$TestPeriodArray.test_bool_propertiesc                 C  s8   |  |}|}t||}tt||}t|| d S rM   r;  r<  r   r   r   r    s
    

z#TestPeriodArray.test_int_propertiesc              	   C  s   |}t |}t jt|td}t|| t j|td}t|| t j|dd}t||j d}tj	t
|d t j|dd W 5 Q R X t j|dd}t |d}t|| d S )Nr0   r   zEfloat\(\) argument must be a string or a( real)? number, not 'Period'r>   r   ZS20)r6   r   ri   r   r   r[   r\   r   rA   rB   rs   r   )r:   r=   r<   rF   rR   rt   r   r   r   r     s    
z$TestPeriodArray.test_array_interfacec                 C  s6   |}| d}tjdd |D td}t|| d S )N%Yc                 S  s   g | ]}| d qS )r=  r  )r   Zperr   r   r   r     s     z1TestPeriodArray.test_strftime.<locals>.<listcomp>r0   r  r   r   r   r   r!    s    
zTestPeriodArray.test_strftimec                 C  sB   t tdtgdd}|d}tjdtjgtd}t	|| d S )Nr"  z	period[D]r0   r#  )
r   r   r   r  r6   ri   rw   r   r[   r\   r$  r   r   r   r%    s    
z!TestPeriodArray.test_strftime_natN)rr   r   r   r   r-   r   r8   r   r   r1   r   rA   r   r=   r3  r  r  r   r   r8  r9  r:  r&  r  r'  r  r   r!  r%  r   r   r   r   r2  -  s(   






	r2  zarr,casting_natsr)   r*   r   r   r   rG   rL   c                 C  s
   t | jS rM   r   rr   r   r   r   r   <lambda>      r@  )idsc                 C  sF   t | t| d | d g}|D ] }|  } || d< t| | q d S )Nr@   rl   r   )r   r   r   r   r[   r|   )r<   Zcasting_natsrR   natr   r   r   test_casting_nat_setitem_array  s
    rD  zarr,non_casting_natsc                 C  s
   t | jS rM   r>  r?  r   r   r   r@    rA  c              
   C  s4   d}|D ]&}t jt|d || d< W 5 Q R X qd S )Nzwvalue should be a '(Timestamp|Timedelta|Period)', 'NaT', or array of those. Got '(timedelta64|datetime64|int)' instead.r>   r   )rA   rB   rs   )r<   Znon_casting_natsrt   rC  r   r   r   test_invalid_nat_setitem_array  s
    rE  r<   r  rb   rH   c                 C  s   t | d< |  }|  }t|d s*t| jdd}|d dksFt| jddd}|d dksdt| j| d  d}|d |d kst| j| d jdd	d}|d |d kstt| | d S )
Nr   r   r0   l         )r1   na_valuer@   )rF  Fr   )r   r   Zto_numpyr6   isnanrP   r[   r|   )r<   originalrF   r   r   r   test_to_numpy_extra  s    rI  rU   TFr/  z
2020-01-01z
2020-02-01r@   rl   )unitr5   klassc                 C  s<   |s
| j } | || }tjddg|jd}t|| d S )Nr   r@   r0   )r   r   r6   ri   r1   r[   r\   )r/  rK  rU   rF   rR   r   r   r   ,test_searchsorted_datetimelike_with_listlike  s
    rL  argr  r  zEurope/London)rJ   c              	   C  s,   d}t jt|d | | W 5 Q R X d S )Nz [Unexpected type|Cannot compare]r>   )rA   rB   rs   r   )r/  rM  rt   r   r   r   :test_searchsorted_datetimelike_with_listlike_invalid_dtype3  s    rN  c                 C  sB   ddgd }| |}t |dd}t dd |D }t|| d S )NrK   Z2020Q2rl   r   r5   c                 S  s   g | ]}t |qS r   )r   )r   sr   r   r   r   K  s     z?test_period_index_construction_from_strings.<locals>.<listcomp>)r   r[   rh   )rK  stringsr;   rF   rR   r   r   r   +test_period_index_construction_from_stringsE  s
    rQ  r1   r   r)  c                 C  s   t jdddg| d}t|}ttd|  }||}||}t|| ||}||}t|| tt	d|  }||d }||d }t
|| tjtjd|  }||j}||j}t
|| ttd|  }||}||}t|| d S )Nr@   rl   rG   r0   r   r)  r   )r6   ri   r   r
   r   r[   r   r   r   r   r|   r"   r  to_timedeltar   r	   rh   )r1   r;   r<   clsrF   rR   funcidx_clsr   r   r   test_from_pandas_arrayO  s*    



rW  
memoryviewri   daskz
dask.array)Zmarksxarrayc                 C  s   t jdddgt jd}| j}|dkr.t|}nV|dkrLddl}|d	|}n8|d
krjddl}|j|}n|dkrddl}||}||fS )z
    Fixture giving a numpy array and a parametrized 'data' object, which can
    be a memoryview, array, dask or xarray object created from the numpy array.
    r@   rl   rG   r0   rX  ri   r   NirY  rZ  )r6   ri   r   r   rX  Z
dask.arrayrZ  Z	DataArray)r   r<   namer;   ri   rY  Zxrr   r   r   array_likesp  s    

r]  c           	      C  s   |\}}t td|  }||}||}t|| ttd|  }||d }||d }t|| t|t	st
jt
jd|  }||j}||j}t|| ttd|  }||}||}t|| d S )NrR  r   )r
   r   r   r[   r   r   r   r|   r   rX  r"   r  rS  ri   r   r	   rh   )	r1   r]  r<   r;   rT  rR   rF   rU  rV  r   r   r   test_from_obscure_array  s$    



r^  )E
__future__r   r   Znumpyr6   rA   Zpandas._libsr   r   r   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr"   r   r   r   r	   Zpandas._testingZ_testingr[   Zpandas.core.arraysr
   r   r   r   Zpandas.core.arrays.datetimesr   Zpandas.core.arrays.timedeltasr   r   r   r%   r(   r+   r,   r   r(  r2  r   r   r   r  r&   r1  r#   rD  r   rE  ri   r   rI  r  r   r   r   rN   rW   rL  rN  tuplerQ  rW  r   Z
skip_if_nor]  r^  r   r   r   r   <module>   s   



    ,  @w 
	

 
	
 
