U
    sVc
W                     @   s   d Z ddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlZddlmZ ddlmZ G dd dZG d	d
 d
ZG dd dZdS )z
Tests for DatetimeArray
    N)
tz_compare)NpyDatetimeUnit)DatetimeTZDtype)DatetimeArrayc                   @   s  e Zd Zejdddgddd Zejdd Zejd	d
 Zejdd Zejdd Z	dd Z
ejdejdejej dd Zdd Zdd Zdd Zejddd Zdd Zd d! Zd"d# Zejd$d%d&d'gd(d) Zd*d+ Zd,d- Zd.d/ Zd0S )1TestNonNanosmsus)paramsc                 C   s   |j S )z)Fixture returning parametrized time units)param)selfrequest r   F/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/arrays/test_datetimes.pyunit   s    zTestNonNano.unitc                 C   s   t jjt jjt jjd| S )z;Fixture returning datetime resolution for a given time unit)r   r   r	   )r   ZNPY_FR_svalueZ	NPY_FR_msZ	NPY_FR_us)r   r   r   r   r   reso   s    zTestNonNano.resoc                 C   s.   |}|d krt d| dS t||dS d S )Nzdatetime64[])r   tz)npdtyper   )r   r   tz_naive_fixturer   r   r   r   r   "   s    zTestNonNano.dtypec                 C   sz   t |dd }tjddd|d}|d kr@t|d| d}n$t|dd d| d}tj	||d	}||fS )
Nr   
2016-01-017   Dperiodsfreqr   M8[r   UTCr   )
getattrpd
date_ranger   asarrayastype
tz_converttz_localizer   _simple_new)r   r   r   r   dtiarrdtar   r   r   dta_dti*   s    
zTestNonNano.dta_dtic                 C   s   |\}}|S Nr   )r   r,   r+   r)   r   r   r   r+   9   s    zTestNonNano.dtac                 C   s   t jdt jdd| d}tj||d}|j|ks:t|d j|ksLtt	|j
|d j
sbt|d |d d k s~td S )N   r    r   r   r      )r   arangeint64viewr   r(   r   AssertionError_resor   r   all)r   r   r   r   r*   r+   r   r   r   test_non_nano>   s    zTestNonNano.test_non_nanoz=ignore:weekofyear and week have been deprecated:FutureWarningfieldc           
      C   s.   |\}}t ||}t |j|}	t||	 d S r-   )r!   _datatmassert_numpy_array_equal)
r   r   r   r7   r   r,   r+   r)   resexpectedr   r   r   test_fieldsG   s    
zTestNonNano.test_fieldsc                 C   s   t jdddd}t|d| d}tj||jd}|jrBt	t|
 d| d}tj||jd}|
 }t|| d S )Nz2016-01-01 06:00:00r   r   r   r   r   r   r    )r"   r#   r   r$   r%   r   r(   r   is_normalizedr3   	normalizer9   assert_extension_array_equal)r   r   r)   r*   r+   expr<   r;   r   r   r   test_normalizeV   s    
zTestNonNano.test_normalizec              	   C   sz   t jdt jdd| d}t|d}tj||d}|j|ksDttdd}t	j
tdd tj||d W 5 Q R X d S )	Nr.   r    r   r   r   ns match)r   r0   r1   r2   r   r   r(   r   r3   pytestraises)r   r   r*   r   r+   Zwrongr   r   r   test_simple_new_requires_matche   s    

z*TestNonNano.test_simple_new_requires_matchc                 C   sj   t jdddd}t|d| d}tj||jd}| }|j	|j	ksPt
|| |ksft
d S )Nr   r   r   r>   r   r   r    )r"   r#   r   r$   r%   r   r(   r   Zstdr4   r3   floor)r   r   r)   r*   r+   r;   r   r   r   test_std_non_nanop   s    zTestNonNano.test_std_non_nanoz.ignore:Converting to PeriodArray.*:UserWarningc                 C   s.   |\}}| d}|j d}t|| d S )Nr   )	to_periodr8   r9   rA   r   r,   r+   r)   resultr<   r   r   r   test_to_period{   s    
zTestNonNano.test_to_periodc                 C   sV   t t|}|d }t|tjks&t|j|jks6t|j|jksFt||ksRtd S )Nr   )nextitertyper"   	Timestampr3   r   r4   )r   r+   r;   r<   r   r   r   	test_iter   s    zTestNonNano.test_iterc                    sD     t}t fdd|D s$ttdd t| D s@td S )Nc                 3   s   | ]}|j  j kV  qd S r-   )r4   ).0xr+   r   r   	<genexpr>   s     z1TestNonNano.test_astype_object.<locals>.<genexpr>c                 s   s   | ]\}}||kV  qd S r-   r   )rV   rW   yr   r   r   rY      s     )r%   objectr5   r3   zip)r   r+   rO   r   rX   r   test_astype_object   s    
zTestNonNano.test_astype_objectc                 C   s(   |\}}|  }|  }t|| d S r-   )to_pydatetimer9   r:   rN   r   r   r   test_to_pydatetime   s    zTestNonNano.test_to_pydatetimemethtimetimetzdatec                 C   s,   |\}}t ||}t ||}t|| d S r-   )r!   r9   r:   )r   r,   r`   r+   r)   rO   r<   r   r   r   test_time_date   s    

zTestNonNano.test_time_datec           	      C   s*   |\}}|  }|j  }t|| d S r-   )Z_format_native_typesr8   r9   r:   )	r   r   r   r   r,   r+   r)   r;   rB   r   r   r   test_format_native_types   s    
z$TestNonNano.test_format_native_typesc                 C   s0   |\}}t |t |jdd| ks,td S )Nz[ns[)reprr8   replacer3   )r   r,   r   r+   r)   r   r   r   	test_repr   s    zTestNonNano.test_reprc                 C   sF  |}t t j}t j|j|jd |jgt jd}t |d}|d}tj||j	d}tj||j	d}|t
jkrt dddg}	nN|t
jkrt dddg}	n2|t
jt
jfkrt dddg}	nt dddg}	|||}
t|
|	 ||d |}
t|
|	 |t
jt
jfkrB||j|j}t|dd  |	dd    d S )Nr/   r    M8[ns]M8[s]FT)r   iinfor1   arrayminmaxr2   r   r(   r   operatoreqneltler9   r:   _ndarray)r   comparison_opoprl   valsr*   Zarr2leftrightr<   rO   Znp_resr   r   r   #test_compare_mismatched_resolutions   s*     



z/TestNonNano.test_compare_mismatched_resolutionsN)__name__
__module____qualname__rH   Zfixturer   r   r   r,   r+   r6   markfilterwarningsparametrizer   Z
_field_opsZ	_bool_opsr=   rC   rJ   rL   rP   rU   r]   r_   rd   re   ri   r{   r   r   r   r   r      s@   




	 
	

	
	r   c                   @   s   e Zd Zdd ZdS )TestDatetimeArrayComparisonsc           	      C   s   |}t jdddd d}t|}|j|jks.t|j|jks>t|}tjt|t	d}|j
dkrd| }|||}t|| |t|t|t||tfD ]0}|||}t|| |||}t|| qd S )Nz	2016-01-1ZMS	   )r   r   r   r    )rr   gtrs   )r"   r#   r   r   r3   r   r   Zoneslenboolr|   r9   r:   rm   listtupler%   r[   )	r   rv   rw   r)   r*   rz   r<   rO   otherr   r   r   test_cmp_dt64_arraylike_tznaive   s*    



z<TestDatetimeArrayComparisons.test_cmp_dt64_arraylike_tznaiveN)r|   r}   r~   r   r   r   r   r   r      s   r   c                   @   s  e Zd Zdd Zdd Zdd Zejddd	gejd
dd	dgdd Z	ejde
ejejddgdd Zdd Zdd Zdd Zdd Zejdeded ed gdd Zdd Zd d! Zejd"d#d$gd%d& Zd'd( Zd)d* Zd+d, Zejd-d.d/gd0d1 Zejd-d.d/gd2d3 Zejd
d4ed4d5e d6ej!d7d8d9ej"d:d;d<d= d> d? e"d:#d@d= d> d? ed$dAg	ejd-d.d/gdBdC Z%dDdE Z&dFdG Z'dHdI Z(dJdK Z)dLS )MTestDatetimeArrayc                 C   s\   t jddd}|d}|jdks&t|j}|d}|jdksDtt|t jjj	sXtd S )Nr      r   rk   )
r"   r#   r%   r   r3   r8   
isinstancecoreZarraysr   )r   r)   r;   r+   r   r   r   test_astype_non_nano_tznaive   s    

z.TestDatetimeArray.test_astype_non_nano_tznaivec                 C   s   t jdddd}|d}|jdks(t|j}|d}|jdksFt|d}|jdks^tt||rnt|jddd}|jdkstt||std S )	Nr   r   r   r   r   zM8[s, US/Pacific]z
M8[s, UTC]Fcopy)r"   r#   r%   r   r3   r8   r9   Zshares_memory)r   r)   r;   r+   res2res3r   r   r   test_astype_non_nano_tzaware  s    


z.TestDatetimeArray.test_astype_non_nano_tzawarec                 C   s:   t jdgtddd}|jtdddd}||ks6td S )N2000
US/Centralr   r    Fr   )r   _from_sequencer   r%   r3   )r   r*   rO   r   r   r   test_astype_to_same  s     z%TestDatetimeArray.test_astype_to_samer   datetime64[ns]zdatetime64[ns, UTC]r   zdatetime64[ns, CET]c              	   C   sp   t jddg|d}| }d }|dk|dkA r2t}t| ||}W 5 Q R X t j|d d < t|| d S )Nr/      r    r   )	r"   Seriesr   FutureWarningr9   assert_produces_warningr%   NaTassert_series_equal)r   r   r   Zserorigwarntr   r   r   test_astype_copies  s    z$TestDatetimeArray.test_astype_copiesZuint32uint64c              	   C   s   t tdtdg}t|jdkr6td}n
td}||}d }||krZt}d}t	j
||d ||}W 5 Q R X |j|kstt	|| d S )Nr   Z2001ur   r1   z( will return exactly the specified dtyperF   )r   r   r"   rT   r   r   kindr%   r   r9   r   r3   r:   )r   r   r*   Zexpected_dtyper<   r   msgrO   r   r   r   test_astype_int0  s    

z!TestDatetimeArray.test_astype_intc              	   C   s:   t jdgtddd}tjtdd d|_W 5 Q R X d S )Nr   r   r   r    r'   rF   r   )r   r   r   rH   rI   AttributeErrorr   )r   r*   r   r   r   test_tz_setter_raisesD  s     z'TestDatetimeArray.test_tz_setter_raisesc           	      C   s   |}t jdddgdd}|d kr&|jnt|d}t||d}| }td|}t	|d }||d< ||d< t
|| ||d< ||g|d d< t
|| d S )	Nr/   r   r   rj   r    r   z2020-09-08 16:50r   )r   rm   r   r   r   r   r"   rT   r'   strr9   assert_equal)	r   r   r   datar   r*   r<   tssetterr   r   r   test_setitem_str_impute_tzK  s    z,TestDatetimeArray.test_setitem_str_impute_tzc              
   C   s   t jdddgdd}t|dtddd	}tjtd
d td|d< W 5 Q R X tjddd}tjt	dd( t
jtdd ||d< W 5 Q R X W 5 Q R X d S )Nr/   r   r   rj   r    Fr   r   )r   r   z$Cannot compare tz-naive and tz-awarerF   r   r   z
US/Easternmismatched timezones)r   rm   r   r   rH   rI   	TypeErrorr"   rT   
ValueErrorr9   r   r   )r   r   r*   r   r   r   r    test_setitem_different_tz_raisesb  s     z2TestDatetimeArray.test_setitem_different_tz_raisesc                 C   s:   t tjddddd}tjddd|d< |jd ks6td S )Nr   r   r   r   r   r   r   )r   r"   r#   rT   r   r3   )r   ar   r   r   test_setitem_clears_freqq  s    z*TestDatetimeArray.test_setitem_clears_freqobjz
2021-01-01c                 C   s2   t jdddd}|j}||d< |d |ks.td S )Nr   r   r   r>   r   )r"   r#   r8   r3   )r   r   r)   r*   r   r   r   test_setitem_objectsv  s    
z&TestDatetimeArray.test_setitem_objectsc                 C   sJ   t jddddd}t|}|ddg}t|jd |jd}t|| d S )Nr   r   r   r   r   r/   )r   r   )r"   r#   r   repeatZasi8r   r9   r   )r   r)   r*   Zrepeatedr<   r   r   r   test_repeat_preserves_tz  s
    z*TestDatetimeArray.test_repeat_preserves_tzc                 C   s   t jddddd}t|ddg}| }|j|s<tt j|d< |jd	d
}t j	dddg|d |d t jgd}t
|| d S )Nr   r   r   r   r      r   F)Zdropnar/   r   )index)r"   r#   r   r   Zvalue_countsr   equalsr3   r   r   r9   r   )r   r)   r*   rO   r<   r   r   r   test_value_counts_preserves_tz  s    
$z0TestDatetimeArray.test_value_counts_preserves_tzmethodpadbackfillc                 C   s   t jddddd}t|dd}t j|d< |d	kr8|d
 n|d }tj|d |d
 ||d |d gtddd}|j|d}t|| |d t jkst	|d t j
dddkst	d S )Nz
2000-01-01r.   r   r   r   Tr   r   r   r/   r   r   r   r   r    r   z
2000-01-03)r"   r#   r   r   r   r   fillnar9   rA   r3   rT   )r   r   r)   r*   Zfill_valr<   rO   r   r   r   test_fillna_preserves_tz  s    
z*TestDatetimeArray.test_fillna_preserves_tzc                 C   sd  t jdddd}|jdd }t j|d< t j|d< |jd	d
}| }|d |d< t|| |jdd
}| }| }|d |d< |d |d< t|| |	|j
jdd}|j
jd st|j
jd rtt|| |jd	d
}t|| |jdd
}	t|	| t |}
|
jd	d
}t |}t|| |
jdd
}t |}t|| d S )Nr      
US/Pacificr   r   r   )r   r/   )r/   r   r   r   )r   r   r   )r   r   )r/   r/   F)orderZF_CONTIGUOUSZC_CONTIGUOUS)r"   r#   r8   reshaper   r   r   r9   rA   Z_from_backing_dataru   flagsr3   Z	DataFrameZassert_frame_equal)r   r)   r+   Zres1Z	expected1r   Z	expected2Zdta2r   Zres4Zdfr;   r<   r   r   r   test_fillna_2d  s:    




z TestDatetimeArray.test_fillna_2dc                 C   s   d}t tjdd|d}t|}tjtjd|dtjd|dgtd}t	|| tj|td}t	|| tj|d	d}tjd
dgd	d}t	|| d S )Nr   2017r   r   2017-01-01T00:00:00r   2017-01-02T00:00:00r    rj   z2017-01-01T06:00:00z2017-01-02T06:00:00)
r   r"   r#   r   r$   rm   rT   r[   r9   r:   )r   r   r   rO   r<   r   r   r   test_array_interface_tz  s$    
 z)TestDatetimeArray.test_array_interface_tzc                 C   sv   t tjddd}tjddgdd}t|}t|| tj|td}tjt	dt	dgtd}t|| d S )Nr   r   r   r   r   r   r    )
r   r"   r#   r   rm   r$   r9   r:   r[   rT   )r   r   r<   rO   r   r   r   test_array_interface  s     
z&TestDatetimeArray.test_array_interfacer   TFc                 C   s   t jdddd d d }t|ddd	}|r:t|}||d
 }||d
 d}||ksht||d
d }||d
d d}t	
|| d S )N
   i8r          ʚ;r   r   
Asia/Tokyor   r   r   )r   r0   r   r'   r"   Indexsearchsortedr&   r3   r9   r   )r   r   r   r*   r<   rO   r   r   r   test_searchsorted_different_tz  s    
z0TestDatetimeArray.test_searchsorted_different_tzc              	   C   s   t jdddd d d }t|dd}|r4t|}|d	}d
}tjt|d |	|d  W 5 Q R X tjt|d |	| W 5 Q R X tjt|d |	|d  W 5 Q R X tjt|d |	| W 5 Q R X d S )Nr   r   r    r   r   r   r   r   r   z:Cannot compare tz-naive and tz-aware datetime-like objectsrF   r   )
r   r0   r   r"   r   r'   rH   rI   r   r   )r   r   r   r*   Zmismatchr   r   r   r   $test_searchsorted_tzawareness_compat  s    

z6TestDatetimeArray.test_searchsorted_tzawareness_compatr/   g      ?r   r   )daysinvalidr   r   r    r   r   r   ztimedelta64[ns]r   c              	   C   sj   t jdddd d d }t|dd}|r4t|}d	d
dg}tjt|d |	| W 5 Q R X d S )Nr   r   r    r   r   r   r   r   |z0searchsorted requires compatible dtype or scalarz<value should be a 'Timestamp', 'NaT', or array of those. GotrF   )
r   r0   r   r"   r   joinrH   rI   r   r   )r   r   r   r   r*   r   r   r   r   test_searchsorted_invalid_types%  s    
z1TestDatetimeArray.test_searchsorted_invalid_typesc                 C   s   t jddd}|j}tt|jd}|d }|| | fD ]}|jd|d}t	
|| q@|d}|d}|d }|| fD ]}|jd|d}t	
|| qd S )Nr   r   r   r/   
fill_valuer   )r"   r#   r8   r   r   Zrollr^   to_datetime64shiftr9   assert_datetime_array_equalr'   )r   r)   r+   r<   fvr   rO   r   r   r   test_shift_fill_valueC  s    

z'TestDatetimeArray.test_shift_fill_valuec              
   C   s   t jddd}|j}|d d}|| fD ],}tjtdd |jd|d	 W 5 Q R X q.|d}|d d }|| |	 fD ],}tjtdd |jd|d	 W 5 Q R X qd S )
Nr   r   r   r   r   zCannot comparerF   r/   r   )
r"   r#   r8   r'   r^   rH   rI   r   r   r   )r   r)   r+   r   r   r   r   r   %test_shift_value_tzawareness_mismatchU  s    
z7TestDatetimeArray.test_shift_value_tzawareness_mismatchc              
   C   sn   t jdddd}|j}t jddd}d}tjt|d	. tjt	d
d	 |j
d|d W 5 Q R X W 5 Q R X d S )Nr   r   r   r   z2020-10-18 18:44r   r   z,Timezones don't match. 'UTC' != 'US/Pacific'rF   r   r/   r   )r"   r#   r8   rT   rH   rI   r   r9   r   r   r   )r   r)   r+   r   r   r   r   r   test_shift_requires_tzmatche  s     z-TestDatetimeArray.test_shift_requires_tzmatchc                 C   sd   t jdddd}|jdd}|d }| d |j}t|| |d}t|| d S )Nz
1994-05-12   r   r   r   r   )	r"   r#   r8   r   r'   Zravelshaper9   r   )r   r)   r+   rO   r<   Z	roundtripr   r   r   test_tz_localize_t2dx  s    

z&TestDatetimeArray.test_tz_localize_t2dN)*r|   r}   r~   r   r   r   rH   r   r   r   intr   Zint32r1   r   r   r   r   r   r"   rT   r   r^   r   r   r   r   r   r   r   r   r   Ztimedelta64Z	Timedeltar0   r2   rM   r   r   r   r   r   r   r   r   r   r      sj    



)


r   )__doc__rp   Znumpyr   rH   Zpandas._libs.tslibsr   Zpandas._libs.tslibs.dtypesr   Zpandas.core.dtypes.dtypesr   Zpandasr"   Zpandas._testingZ_testingr9   Zpandas.core.arraysr   r   r   r   r   r   r   r   <module>   s    A$