U
    fª/e7  ã                   @   sh   d Z ddlZddlZddl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dS )	z
Tests for DatetimeArray
é    N)ÚDatetimeTZDtype)ÚDatetimeArrayc                   @   s   e Zd Zdd„ ZdS )ÚTestDatetimeArrayComparisonsc           
      C   sÌ   |  d¡}tt|ƒ}tjdddd d}t|ƒ}|j|jks>t‚|j|jksNt‚|}t	j
t|ƒtd}|dkrr| }|||ƒ}t ||¡ |t	 |¡fD ]0}	|||	ƒ}t ||¡ ||	|ƒ}t ||¡ q–d S )NÚ_z	2016-01-1ZMSé	   )ÚfreqÚperiodsÚtz©Údtype)ÚneÚgtÚlt)ÚstripÚgetattrÚoperatorÚpdÚ
date_ranger   r   ÚAssertionErrorr	   ÚnpZonesÚlenÚboolÚtmÚassert_numpy_array_equalÚarray)
ÚselfZall_compare_operatorsÚopnameÚopÚdtiÚarrÚrightÚexpectedÚresultÚother© r$   úF/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/arrays/test_datetimes.pyÚtest_cmp_dt64_arraylike_tznaive   s"    




z<TestDatetimeArrayComparisons.test_cmp_dt64_arraylike_tznaiveN)Ú__name__Ú
__module__Ú__qualname__r&   r$   r$   r$   r%   r      s   r   c                   @   sÚ  e Z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j ¡ ej ¡  ¡ ej ¡  ¡ 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¡d+d,„ ƒZej d(d)d*g¡d-d.„ ƒZej dd/e	 d/¡d0e	 d1¡ej d2d3d4e	j!d5d6d7d8 d9 d: e	 !d5¡ "d;¡d8 d9 d: ej ¡  #d<¡g	¡ej d(d)d*g¡d=d>„ ƒƒZ$d?d@„ Z%dAdB„ Z&dCdD„ Z'dEdF„ Z(dGS )HÚTestDatetimeArrayc                 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
   F©Úcopy)r   Ú_from_sequencer   Úastyper   )r   r   r"   r$   r$   r%   Útest_astype_to_same2   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 )Né   é   r
   r3   )	r   ÚSeriesr/   ÚFutureWarningr   Úassert_produces_warningr1   ÚNaTÚassert_series_equal)r   r   r#   ZserÚorigÚwarnÚtr$   r$   r%   Útest_astype_copies9   s    z$TestDatetimeArray.test_astype_copiesZuint32Úuint64c              	   C   sž   t  t d¡t d¡g¡}t t¡ | |¡}W 5 Q R X t 	|¡j
dkrVt 	d¡}n
t 	d¡}t t¡ | |¡}W 5 Q R X |j	|ksŽt‚t ||¡ d S )Nr+   Z2001Úur?   Úint64)r   r0   r   Ú	Timestampr   r8   r7   r1   r   r   Úkindr   r   )r   r   r   r"   Zexpected_dtyper!   r$   r$   r%   Útest_astype_intL   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
   Útz_localize©ÚmatchÚUTC)r   r0   r   ÚpytestÚraisesÚAttributeErrorr	   )r   r   r$   r$   r%   Útest_tz_setter_raises_   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 )	Nr4   r5   é   úM8[ns]r
   r-   z2020-09-08 16:50r   )r   r   r   r   r   r/   r   rB   rE   Ústrr   Úassert_equal)	r   Ztz_naive_fixturer	   Údatar   r   r!   ÚtsÚsetterr$   r$   r%   Útest_setitem_str_impute_tzf   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t	dd tjddd|d< W 5 Q R X d S )Nr4   r5   rM   rN   r
   Fr,   r-   )r/   r   z$Cannot compare tz-naive and tz-awarerF   r+   r   z
US/Eastern)
r   r   r   r   rI   rJ   Ú	TypeErrorr   rB   Ú
ValueError)r   rQ   r   r$   r$   r%   Ú test_setitem_different_tz_raises}   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+   r5   ÚDr,   ©r   r   r	   r-   r   )r   r   r   rB   r   r   )r   Úar$   r$   r%   Útest_setitem_clears_freq†   s    z*TestDatetimeArray.test_setitem_clears_freqÚobjc                 C   s2   t jdddd}|j}||d< |d |ks.t‚d S )Nr+   r5   rX   )r   r   r   )r   r   Ú_datar   )r   r\   r   r   r$   r$   r%   Útest_setitem_objects‹   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+   r5   rX   r,   rY   r4   )r   r   )r   r   r   ÚrepeatZasi8r   r   rP   )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+   r5   rX   r,   rY   é   rM   éþÿÿÿF)Zdropnar4   r   )Úindex)r   r   r   r_   Zvalue_countsrc   Úequalsr   r9   r6   r   r:   )r   r   r   r"   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s˜t	‚|d t j
dddks²t	‚d S )Nz
2000-01-01é   rX   r,   rY   Tr.   r5   rg   r4   rM   r   ra   r-   r
   ©rf   z
2000-01-03)r   r   r   r9   r0   r   Úfillnar   Úassert_extension_array_equalr   rB   )r   rf   r   r   Zfill_valr!   r"   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 sÆt‚|j
jd rÖt‚t ||¡ |jd	d
}t ||¡ |jdd
}	t |	|¡ t  |¡}
|
jd	d
}t  |¡}t ||¡ |
jdd
}t  |¡}t ||¡ d S )Nú
2016-01-01é   ú
US/Pacific©r   r	   rM   r5   )r   r4   )r4   r   rg   rj   )r   r   rh   )r5   r   )r4   r4   ÚF)ÚorderZF_CONTIGUOUSZC_CONTIGUOUS)r   r   r]   Úreshaper/   r9   rk   r   rl   Z_from_backing_dataZ_ndarrayÚflagsr   Z	DataFrameZassert_frame_equal)r   r   ÚdtaZres1Z	expected1Zres2Z	expected2Zdta2Zres3Zres4ZdfÚresr!   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,   Ú2017r5   rq   ú2017-01-01T00:00:00r-   ú2017-01-02T00:00:00r
   rN   z2017-01-01T06:00:00z2017-01-02T06:00:00)
r   r   r   r   Úasarrayr   rB   Úobjectr   r   )r   r	   rQ   r"   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 )Nry   r5   ©r   rz   r{   r3   r
   )
r   r   r   r   r   r|   r   r   r}   rB   )r   rQ   r!   r"   r$   r$   r%   Útest_array_interface  s     ÿ
þz&TestDatetimeArray.test_array_interfacerc   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
   é   é  é Êš;rX   ©r   ú
Asia/Tokyor5   rH   ro   )r   Úaranger   rE   r   ÚIndexÚsearchsortedZ
tz_convertr   r   rP   )r   rc   rQ   r   r!   r"   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…   rX   r†   r‡   z:Cannot compare tz-naive and tz-aware datetime-like objectsrF   r   )
r   rˆ   r   r   r‰   rE   rI   rJ   rU   rŠ   )r   rc   rQ   r   ZmismatchÚmsgr$   r$   r%   Ú$test_searchsorted_tzawareness_compat&  s    

z6TestDatetimeArray.test_searchsorted_tzawareness_compatr4   g      ð?r9   r5   )ÚdaysÚinvalidr   r‚   r
   rƒ   r„   r…   ztimedelta64[ns]rX   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…   rX   r†   ú|z0searchsorted requires compatible dtype or scalarz<value should be a 'Timestamp', 'NaT', or array of those. GotrF   )
r   rˆ   r   r   r‰   ÚjoinrI   rJ   rU   rŠ   )r   r#   rc   rQ   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	 
||¡ qˆd S )Nrn   rM   r   r4   éÿÿÿÿ©Ú
fill_valuerH   )r   r   r]   r   r   ZrollÚto_pydatetimeÚto_datetime64Úshiftr   Úassert_datetime_array_equalrE   )r   r   rv   r!   Úfvr•   r"   r$   r$   r%   Útest_shift_fill_valueX  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 q†d S )
Nrn   rM   r   r“   rH   zCannot comparerF   r4   r”   )
r   r   r]   rE   r–   rI   rJ   rU   r˜   r—   )r   r   rv   rš   r   r$   r$   r%   Ú%test_shift_value_tzawareness_mismatchj  s    
z7TestDatetimeArray.test_shift_value_tzawareness_mismatchc              	   C   sT   t jdddd}|j}t jddd}d}tjt|d	 |jd
|d W 5 Q R X d S )Nrn   rM   rH   rq   z2020-10-18 18:44rp   r-   z,Timezones don't match. 'UTC' != 'US/Pacific'rF   r4   r”   )r   r   r]   rB   rI   rJ   rV   r˜   )r   r   rv   r•   rŒ   r$   r$   r%   Útest_shift_requires_tzmatchz  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é   rp   rq   rM   ra   )	r   r   r]   rt   rE   ZravelÚshaper   r™   )r   r   rv   r"   r!   Z	roundtripr$   r$   r%   Útest_tz_localize_t2d†  s    

z&TestDatetimeArray.test_tz_localize_t2dN))r'   r(   r)   r2   rI   ÚmarkZparametrizer>   Úintr   Zint32rA   rD   rL   rT   rW   r[   r   rB   Únowr—   r–   r^   r`   re   rm   rx   r~   r€   r‹   r   Ztimedelta64Z	Timedeltarˆ   ÚviewZ	to_periodr’   r›   rœ   r   r    r$   r$   r$   r%   r*   1   sf    ÿ
	ýþ


)


÷þr*   )Ú__doc__r   Znumpyr   rI   Zpandas.core.dtypes.dtypesr   Zpandasr   Zpandas._testingZ_testingr   Zpandas.core.arraysr   r   r*   r$   r$   r$   r%   Ú<module>   s   !