o
    i
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   ]/var/www/edux/Edux_v2/venv/lib/python3.10/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   NPY_FR_svalue	NPY_FR_ms	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 )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   r0   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s&J t|j	|d j	s1J |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 r1   )r%   _datatmassert_numpy_array_equal)
r   r   r   r:   r   r0   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r!J 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	normalizer<   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s"J tdd}tj	t
dd tj||d W d    d S 1 sAw   Y  d S )	Nr2   r$   r"   r   r#   ns match)r   r4   r5   r6   r   r   r,   r   pytestraisesAssertionError)r   r   r.   r   r/   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s(J || 
|ks3J d S )Nr   r   r   rA   r"   r   r$   )r&   r'   r   r(   r)   r   r,   r   stdr7   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_periodr;   r<   rD   r   r0   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sJ |j|jks#J ||ks)J d S )Nr   )nextitertyper&   	Timestampr   r7   )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 r1   )r7   ).0xr/   r   r   	<genexpr>       z1TestNonNano.test_astype_object.<locals>.<genexpr>c                 s   s    | ]	\}}||kV  qd S r1   r   )r\   r]   yr   r   r   r_      r`   )r)   objectr8   zip)r   r/   rU   r   r^   r   test_astype_object   s   
 zTestNonNano.test_astype_objectc                 C   s(   |\}}|  }|  }t|| d S r1   )to_pydatetimer<   r=   rT   r   r   r   test_to_pydatetime   s   zTestNonNano.test_to_pydatetimemeth)timetimetzdatec                 C   s,   |\}}t ||}t ||}t|| d S r1   )r%   r<   r=   )r   r0   rg   r/   r-   rU   r?   r   r   r   test_time_date   s   

zTestNonNano.test_time_datec           	      C   s*   |\}}|  }|j  }t|| d S r1   )_format_native_typesr;   r<   r=   )	r   r   r   r   r0   r/   r-   r>   rE   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[)reprr;   replace)r   r0   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 rBt g d}	n$|t
ju rOt g d}	n|t
jt
jfv r_t 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 d S )	Nr3   r$   M8[ns]M8[s])FFF)TTT)FFT)FTF)r   iinfor5   arrayminmaxr6   r   r,   r   operatoreqneltler<   r=   _ndarray)r   comparison_opoprt   valsr.   arr2leftrightr?   rU   np_resr   r   r   #test_compare_mismatched_resolutions   s,    



"z/TestNonNano.test_compare_mismatched_resolutionsN)__name__
__module____qualname__rK   fixturer   r   r   r0   r/   r9   markfilterwarningsparametrizer   
_field_ops	_bool_opsr@   rF   rO   rR   rV   r[   rd   rf   rk   rm   rq   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 r2| }|||}t
|| |t|t|t||tfD ]}|||}t
|| |||}t
|| qNd S )Nz	2016-01-1MS	   )r!   r    r   r$   )rz   gtr{   )r&   r'   r   r!   r   r   oneslenboolr   r<   r=   ru   listtupler)   rb   )	r   r~   r   r-   r.   r   r?   rU   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s"J t|t jjjs,J d S )Nr      r    rs   )	r&   r'   r)   r   r;   
isinstancecore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s#J |d}|jdks/J t||r7J |jddd}|jdksEJ t||sMJ d S )	Nr   r   r#   r    r   zM8[s, US/Pacific]z
M8[s, UTC]Fcopy)r&   r'   r)   r   r;   r<   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 sJ d S )N2000
US/Centralr   r$   Fr   )r   _from_sequencer   r)   )r   r.   rU   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 rt}t| ||}W d    n1 s.w   Y  t j|d d < t|| d S )Nr3      r$   r   )	r&   Seriesr   FutureWarningr<   assert_produces_warningr)   NaTassert_series_equal)r   r   r   serorigwarntr   r   r   test_astype_copies  s   z$TestDatetimeArray.test_astype_copiesuint32uint64c                 C   s   t tdtdg}t|jdkrtd}ntd}||}d }||kr-t}d}t	j
||d ||}W d    n1 sFw   Y  |j|ksRJ t	|| d S )Nr   2001ur   r5   z( will return exactly the specified dtyperI   )r   r   r&   rZ   r   r   kindr)   r   r<   r   r=   )r   r   r.   expected_dtyper?   r   msgrU   r   r   r   test_astype_int0  s   

z!TestDatetimeArray.test_astype_intc                 C   sP   t jdgtddd}tjtdd d|_W d    d S 1 s!w   Y  d S )Nr   r   r   r$   r+   rI   r#   )r   r   r   rK   rL   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r3   r   r   rr   r$   r   z2020-09-08 16:50r   r3   r   )r   ru   r   r   r   r   r&   rZ   r+   strr<   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 s,w   Y  tjd
dd}tjt	dd	, t
jtdd	 ||d< W d    n1 sVw   Y  W d    d S W d    d S 1 snw   Y  d S )Nr   rr   r$   Fr   r   )r   r   z$Cannot compare tz-naive and tz-awarerI   r   r   z
US/Easternmismatched timezones)r   ru   r   r   rK   rL   	TypeErrorr&   rZ   
ValueErrorr<   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 sJ d S )Nr   r   r   r   r   r   r   )r   r&   r'   rZ   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   rA   r   )r&   r'   r;   )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   r3   )r!   r   )r&   r'   r   repeatasi8r   r<   r   )r   r-   r.   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)dropna)r   r   r3   r   r3   )index)r&   r'   r   r   value_countsr   equalsr   r   r<   r   )r   r-   r.   rU   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r|d
 n|d }tj|d |d
 ||d |d gtddd}|j|d}t|| |d t ju sLJ |d t j	dddksYJ d S )Nz
2000-01-01r2   r   r   r   Tr   r   r   r3   r   r   r   r   r$   r   z
2000-01-03)
r&   r'   r   r   r   r   fillnar<   rD   rZ   )r   r   r-   r.   fill_valr?   rU   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 scJ |j
jd rkJ 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   r3   )r3   r   r   r   )r   r   r   )r   r   )r3   r3   F)orderF_CONTIGUOUSC_CONTIGUOUS)r&   r'   r;   reshaper   r   r   r<   rD   _from_backing_datar}   flags	DataFrameassert_frame_equal)r   r-   r/   res1	expected1r   	expected2dta2r   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$   rr   z2017-01-01T06:00:00z2017-01-02T06:00:00)
r   r&   r'   r   r(   ru   rZ   rb   r<   r=   )r   r   r   rU   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   ru   r(   r<   r=   rb   rZ   )r   r   r?   rU   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s4J ||d
d }||d
d d}t	|| d S )N
   i8r$         ʚ;r   r!   
Asia/Tokyor   r#   r   )
r   r4   r   r+   r&   Indexsearchsortedr*   r<   r   )r   r   r   r.   r?   rU   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}|rt|}|d	}d
}tjt|d |	|d  W d    n1 s:w   Y  tjt|d |	| W d    n1 sVw   Y  tjt|d |	|d  W d    n1 stw   Y  tjt|d |	| W d    d S 1 sw   Y  d S )Nr   r   r$   r   r   r   r   r  r  z:Cannot compare tz-naive and tz-aware datetime-like objectsrI   r   )
r   r4   r   r&   r  r+   rK   rL   r   r  )r   r   r   r.   mismatchr   r   r   r   $test_searchsorted_tzawareness_compat  s$   

"z6TestDatetimeArray.test_searchsorted_tzawareness_compatr3   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}|rt|}d	d
dg}tjt|d |	| W d    d S 1 s9w   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. GotrI   )
r   r4   r   r&   r  joinrK   rL   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	
|| qDd S )Nr   r   r   r3   
fill_valuer#   )r&   r'   r;   r   r   rollre   to_datetime64shiftr<   assert_datetime_array_equalr+   )r   r-   r/   r?   fvr  rU   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    n1 s2w   Y  q|d}|d d }|| |	 fD ] }tjtdd |jd|d	 W d    n1 shw   Y  qMd S )
Nr   r   r   r  r#   zCannot comparerI   r3   r  )
r&   r'   r;   r+   re   rK   rL   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	/ tjt	d
d	 |j
d|d W d    n1 s5w   Y  W d    d S W d    d S 1 sMw   Y  d S )Nr   r   r#   r   z2020-10-18 18:44r   r   z,Timezones don't match. 'UTC' != 'US/Pacific'rI   r   r3   r  )r&   r'   r;   rZ   rK   rL   r   r<   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'   r;   r   r+   ravelshaper<   r  )r   r-   r/   rU   r?   	roundtripr   r   r   test_tz_localize_t2dx  s   

z&TestDatetimeArray.test_tz_localize_t2dN)*r   r   r   r   r   r   rK   r   r   r   intr   int32r5   r   r   r   r   r   r&   rZ   r  re   r   r   r   r   r   r   r   r  r  timedelta64	Timedeltar4   r6   rS   r  r  r  r  r  r   r   r   r   r      sj    



)


r   )__doc__rx   numpyr   rK   pandas._libs.tslibsr   pandas._libs.tslibs.dtypesr   pandas.core.dtypes.dtypesr   pandasr&   pandas._testing_testingr<   pandas.core.arraysr   r   r   r   r   r   r   r   <module>   s     A$