a
    j=ic
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g d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"g d#d$d% Zd&d' Zd(d) Zd*d+ Zd,S )-TestNonNanosmsus)paramsc                 C   s   |j S )z)Fixture returning parametrized time units)param)selfrequest r   s/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/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 unitr   )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 u 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 u 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:J |d j|ksLJ t|j	|d j	sbJ |d |d d k
 s~J d S )N   r!   r   r   r      )r   arangeint64viewr   r)   r   _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rBJ 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_normalized	normalizer9   assert_extension_array_equal)r   r   r*   r+   r,   expr<   r;   r   r   r   test_normalizeV   s    
zTestNonNano.test_normalizec                 C   s   t jdt jdd| d}t|d}tj||d}|j|ksDJ tdd}tj	t
dd tj||d W d    n1 s0    Y  d S )	Nr/   r!   r   r   r    ns match)r   r1   r2   r3   r   r   r)   r   pytestraisesAssertionError)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sPJ || 
|ksfJ d S )Nr   r   r   r>   r   r   r!   )r#   r$   r   r%   r&   r   r)   r   Zstdr4   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u s&J |j|jks6J |j|jksFJ ||ksRJ d S )Nr   )nextitertyper#   	Timestampr   r4   )r   r,   r;   r<   r   r   r   	test_iter   s    zTestNonNano.test_iterc                    sD     t}t fdd|D s$J tdd t| D s@J d S )Nc                 3   s   | ]}|j  j kV  qd S r.   )r4   ).0xr,   r   r   	<genexpr>       z1TestNonNano.test_astype_object.<locals>.<genexpr>c                 s   s   | ]\}}||kV  qd S r.   r   )rW   rX   yr   r   r   rZ      r[   )r&   objectr5   zip)r   r,   rP   r   rY   r   test_astype_object   s    
zTestNonNano.test_astype_objectc                 C   s(   |\}}|  }|  }t|| d S r.   )to_pydatetimer9   r:   rO   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-   rb   r,   r*   rP   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,J d S )Nz[ns[)reprr8   replace)r   r-   r   r,   r*   r   r   r   	test_repr   s    zTestNonNano.test_reprc                 C   s>  |}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u rt g d}	nH|t
ju rt g d}	n.|t
jt
jfv rt g d}	nt g d}	|||}
t|
|	 ||d |}
t|
|	 |t
jt
jfvr:||j|j}t|dd  |	dd    d S )	Nr0   r!   M8[ns]M8[s])FFF)TTT)FFT)FTF)r   iinfor2   arrayminmaxr3   r   r)   r   operatoreqneltler9   r:   _ndarray)r   comparison_opoprn   valsr+   Zarr2leftrightr<   rP   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   rK   rM   rQ   rV   r_   ra   rf   rg   rk   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.J |j|jks>J |}tjt|td}|j	dv rd| }|||}t
|| |t|t|t||tfD ]0}|||}t
|| |||}t
|| qd S )Nz	2016-01-1ZMS	   )r   r   r   r!   )rt   gtru   )r#   r$   r   r   r   r   Zoneslenboolr~   r9   r:   ro   listtupler&   r]   )	r   rx   ry   r*   r+   r|   r<   rP   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
g d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&J |j}|d}|jdksDJ t|t jjjsXJ d S )Nr      r   rm   )	r#   r$   r&   r   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(J |j}|d}|jdksFJ |d}|jdks^J t||rnJ |jddd}|jdksJ t||sJ d S )	Nr   r   r    r   r   zM8[s, US/Pacific]z
M8[s, UTC]Fcopy)r#   r$   r&   r   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}||u s6J d S )N2000
US/Centralr   r!   Fr   )r   _from_sequencer   r&   )r   r+   rP   r   r   r   test_astype_to_same  s
    z%TestDatetimeArray.test_astype_to_samer   datetime64[ns]datetime64[ns, UTC]r   )r   r   zdatetime64[ns, CET]c                 C   s   t jddg|d}| }d }|dk|dkA r2t}t| ||}W d    n1 s\0    Y  t j|d d < t|| d S )Nr0      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 d    n1 s0    Y  |j|ksJ t	|| d S )Nr   Z2001ur   r2   z( will return exactly the specified dtyperF   )r   r   r#   rU   r   r   kindr&   r   r9   r   r:   )r   r   r+   Zexpected_dtyper<   r   msgrP   r   r   r   test_astype_int0  s    

(z!TestDatetimeArray.test_astype_intc                 C   sN   t jdgtddd}tjtdd d|_W d    n1 s@0    Y  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g ddd}|d u r$|jnt|d}t||d}| }td|}t	|d }||d< ||d< t
|| ||d< ||g|d d< t
|| d S )	Nr0   r   r   rl   r!   r   z2020-09-08 16:50r   r0   r   )r   ro   r   r   r   r   r#   rU   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g ddd}t|dtddd}tjtdd	 td
|d< W d    n1 sX0    Y  tjd
dd}tjt	dd	F t
jtdd	 ||d< W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   rl   r!   Fr   r   )r   r   z$Cannot compare tz-naive and tz-awarerF   r   r   z
US/Easternmismatched timezones)r   ro   r   r   rH   rI   	TypeErrorr#   rU   
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 u s6J d S )Nr   r   r   r   r   r   r   )r   r#   r$   rU   r   )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.J d S )Nr   r   r   r>   r   )r#   r$   r8   )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   r0   )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<J t j|d< |jd	d
}t jg d|d |d t jgd}t	
|| d S )Nr   r   r   r   r      r   F)Zdropna)r   r   r0   r   r0   )index)r#   r$   r   r   Zvalue_countsr   equalsr   r   r9   r   )r   r*   r+   rP   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u sJ |d t j	dddksJ d S )Nz
2000-01-01r/   r   r   r   Tr   r   r   r0   r   r   r   r   r!   r   z
2000-01-03)
r#   r$   r   r   r   r   fillnar9   rA   rU   )r   r   r*   r+   Zfill_valr<   rP   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 sJ |j
jd rJ 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   r0   )r0   r   r   r   )r   r   r   )r   r   )r0   r0   F)orderZF_CONTIGUOUSZC_CONTIGUOUS)r#   r$   r8   reshaper   r   r   r9   rA   Z_from_backing_datarw   flagsZ	DataFrameZassert_frame_equal)r   r*   r,   Zres1Z	expected1r   Z	expected2Zdta2r   Zres4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!   rl   z2017-01-01T06:00:00z2017-01-02T06:00:00)
r   r#   r$   r   r%   ro   rU   r]   r9   r:   )r   r   r   rP   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   ro   r%   r9   r:   r]   rU   )r   r   r<   rP   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shJ ||d
d }||d
d d}t	|| d S )N
   i8r!         ʚ;r   r   
Asia/Tokyor   r    r   )
r   r1   r   r(   r#   Indexsearchsortedr'   r9   r   )r   r   r   r+   r<   rP   r   r   r   test_searchsorted_different_tz  s    
z0TestDatetimeArray.test_searchsorted_different_tzc                 C   s0  t jdddd d d }t|dd}|r4t|}|d	}d
}tjt|d |	|d  W d    n1 st0    Y  tjt|d |	| W d    n1 s0    Y  tjt|d |	|d  W d    n1 s0    Y  tjt|d |	| W d    n1 s"0    Y  d S )Nr   r   r!   r   r   r   r   r   r   z:Cannot compare tz-naive and tz-aware datetime-like objectsrF   r   )
r   r1   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_compatr0   g      ?r   r   )daysinvalidr   r   r!   r   r   r   ztimedelta64[ns]r   c                 C   s~   t jdddd d d }t|dd}|r4t|}d	d
dg}tjt|d |	| W d    n1 sp0    Y  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   r1   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   r0   
fill_valuer    )r#   r$   r8   r   r   Zrollr`   to_datetime64shiftr9   assert_datetime_array_equalr(   )r   r*   r,   r<   fvr   rP   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 d    q.1 sd0    Y  q.|d}|d d }|| |	 fD ]@}tjtdd |jd|d	 W d    q1 s0    Y  qd S )
Nr   r   r   r   r    zCannot comparerF   r0   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   s   t jdddd}|j}t jddd}d}tjt|d	L tjt	d
d	 |j
d|d W d    n1 sj0    Y  W d    n1 s0    Y  d S )Nr   r   r    r   z2020-10-18 18:44r   r   z,Timezones don't match. 'UTC' != 'US/Pacific'rF   r   r0   r   )r#   r$   r8   rU   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,   rP   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   int32r2   r   r   r   r   r   r#   rU   r   r`   r   r   r   r   r   r   r   r   r   Ztimedelta64Z	Timedeltar1   r3   rN   r   r   r   r   r   r   r   r   r   r      sh   



)


r   )__doc__rr   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$