o
    ҷhe                     @  s   d Z ddlmZ ddlmZ ddlZzddlmZ W n ey%   dZY nw ddl	Z
ddlZddlmZmZ ddlmZ ddlZddlmZ ddlmZmZ G d	d
 d
ZG dd dZG dd dZdd ZdS )z
Tests for DatetimeArray
    )annotations)	timedeltaN)ZoneInfo)npy_unit_to_abbrev
tz_compare)DatetimeTZDtype)DatetimeArrayTimedeltaArrayc                   @  sR  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dd Z	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)d* Zej
d+ed,d-ejd,d-e !d,d.e !d/d0ej"#d1ej"$d,gd2d3 Z%d4d5 Z&d6d7 Z'd8S )9TestNonNano)smsus)paramsc                 C  s   |j S )z)Fixture returning parametrized time units)param)selfrequest r   U/var/www/html/venv/lib/python3.10/site-packages/pandas/tests/arrays/test_datetimes.pyunit"   s   zTestNonNano.unitc                 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   r.   r-   r+   r   r   r   r-   >   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   r   r   r   all)r   r   r   r,   r-   r   r   r   test_non_nanoC   s    zTestNonNano.test_non_nanofieldc           	      C  s>   |\}}||k  sJ t||}t|j|}t|| d S r/   )r5   r#   _datatmassert_numpy_array_equal)	r   r   r7   r   r.   r-   r+   resexpectedr   r   r   test_fieldsL   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	normalizer9   assert_extension_array_equal)r   r   r+   r,   r-   expr<   r;   r   r   r   test_normalizeX   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 )	Nr0   r"   r    r   r!   ns match)r   r2   r3   r4   r   r   r*   r   pytestraisesAssertionError)r   r   r,   r   r-   wrongr   r   r   test_simple_new_requires_matchg   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   r>   r    r   r"   )r$   r%   r   r&   r'   r   r*   r   std_cresofloor)r   r   r+   r,   r-   r;   r   r   r   test_std_non_nanor   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sJ |j|jks#J ||ks)J d S )Nr   )nextitertyper$   	Timestamp_valuerN   )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/   )rN   ).0xr-   r   r   	<genexpr>       z1TestNonNano.test_astype_object.<locals>.<genexpr>c                 s  s    | ]	\}}||kV  qd S r/   r   )r[   r\   yr   r   r   r^      r_   )r'   objectr5   zip)r   r-   rS   r   r]   r   test_astype_object   s   
 zTestNonNano.test_astype_objectc                 C  s(   |\}}|  }|  }t|| d S r/   )to_pydatetimer9   r:   rR   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.   rf   r-   r+   rS   r<   r   r   r   test_time_date   s   

zTestNonNano.test_time_datec                 C  s*   |\}}|  }|j  }t|| d S r/   )_format_native_typesr8   r9   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 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 )	Nr1   r"   M8[ns]M8[s])FFF)TTT)FFT)FTF)r   iinfor3   arrayminmaxr4   r   r*   r   operatoreqneltler9   r:   _ndarray)r   comparison_opoprs   valsr,   arr2leftrightr<   rS   np_resr   r   r   #test_compare_mismatched_resolutions   s,    



"z/TestNonNano.test_compare_mismatched_resolutionsc                 C  sJ   t jdd}t jddd| }|jd}||d }|jdks#J d S )Nr1   )microsecondsr      r   r   )r$   	Timedeltar%   r8   as_unitr   )r   tdr+   r-   r;   r   r   r   (test_add_mismatched_reso_doesnt_downcast   s
   z4TestNonNano.test_add_mismatched_reso_doesnt_downcastscalar   )hourshi m r   x   c           
      C  s   |\}}t |}t|j|j}t|}|| j|}|| }	t|	| || }	t|	| || j|}|| }	t|	| d S r/   )	r$   r   rv   rN   r   r8   r   r9   rA   )
r   r.   r   r-   r+   r   exp_resoexp_unitr<   rS   r   r   r   -test_add_timedeltalike_scalar_mismatched_reso   s   
z9TestNonNano.test_add_timedeltalike_scalar_mismatched_resoc                 C  sb   t jddd}|jd}|d d}|| }||d  jd}|jdks)J t|| d S )Nr   r   r   r   r   r   zm8[us])r$   r%   r8   r   r   r9   rA   )r   r+   r-   tsrS   r<   r   r   r   %test_sub_datetimelike_scalar_mismatch   s   z1TestNonNano.test_sub_datetimelike_scalar_mismatchc                 C  sr   t jddd}|jd}|d}|| }tjg ddd}tj||jd}t	
|| || }t	
|| d S )	Nr   r   r   r   r   )r   r   r   zm8[ms]r"   )r$   r%   r8   r   r   rt   r	   r*   r   r9   rA   )r   r+   r   r   rS   
exp_valuesr<   result2r   r   r   !test_sub_datetime64_reso_mismatch  s   
z-TestNonNano.test_sub_datetime64_reso_mismatchN)(__name__
__module____qualname__rH   fixturer   r   r.   r-   r6   markparametrizer   
_field_ops	_bool_opsr=   rC   rL   rP   filterwarningsrT   rZ   rc   re   rj   rl   rp   r   r   r   r$   r   r   timedelta64offsetsMinuteHourr   r   r   r   r   r   r   r
   !   sR    



	
	

	
	#





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"   )ry   gtrz   )r$   r%   r   r   r   r   oneslenboolr   r9   r:   rt   listtupler'   ra   )	r   r}   r~   r+   r,   r   r<   rS   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                   @  sD  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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/d0d1gd2d3 Zejd/d0d1gd4d5 Z ejd
d6ed6d7e!d8ej"d9d:d;ej#d<d=d>d? d@ dA e#d<$dBd? d@ dA ed%dCg	ejd/d0d1gdDdE Z&dFdG Z'dHdI Z(dJdK Z)dLdM Z*dNdOgZ+e,dPurze,dNZ-W n
 e.y   Y nw e+/e- ejdQe+dRdS Z0dPS )T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   r   rr   )	r$   r%   r'   r   r8   
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   r8   r9   shares_memory)r   r+   r;   r-   res2res3r   r   r   test_astype_non_nano_tzawareG  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,   rS   r   r   r   test_astype_to_sameZ  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d}|rC|dkr"d}nd}tjt|d	 || W d    d S 1 s<w   Y  d S ||}t j|d d < t	|| d S )
Nr1   r   r"   Fr   Tz<Use obj.tz_localize instead or series.dt.tz_localize insteadz1from timezone-aware dtype to timezone-naive dtyperF   )
r$   Seriesr   rH   rI   	TypeErrorr'   NaTr9   assert_series_equal)r   r   r   serorigerrmsgtr   r   r   test_astype_copiesa  s   "
z$TestDatetimeArray.test_astype_copiesuint32uint64c                 C  s   t tdtdg}t|tjkr4tjt	dd |
| W d    d S 1 s-w   Y  d S |
|}|jd}t|| d S )Nr   2001zDo obj.astype\('int64'\)rF   i8)r   r   r$   rX   r   r   r3   rH   rI   r   r'   r|   r4   r9   r:   )r   r   r,   rS   r<   r   r   r   test_astype_int{  s   

z!TestDatetimeArray.test_astype_intc                 C  s@   t jddd}|j}|d}|jdksJ ||k sJ d S )Nr      r   zSparse[datetime64[ns]])r$   r%   r8   r'   r   r5   )r   r+   r-   rS   r   r   r   test_astype_to_sparse_dt64  s
   
z,TestDatetimeArray.test_astype_to_sparse_dt64c                 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)   rF   r!   )r   r   r   rH   rI   AttributeErrorr   )r   r,   r   r   r   test_tz_setter_raises  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r1   r   r   rq   r"   r   z2020-09-08 16:50r   r1   r   )r   rt   r   r   r   r   r$   rX   r)   strr9   assert_equal)	r   r   r   datar   r,   r<   r   setterr   r   r   test_setitem_str_impute_tz  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}||d< |d |	dksGJ d S )Nr   rq   r"   Fr   r   )r   r   z$Cannot compare tz-naive and tz-awarerF   r   r   
US/Eastern)
r   rt   r   r   rH   rI   r   r$   rX   r(   )r   r   r,   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 u sJ d S )Nr   r   r   r   r   r   r   )r   r$   r%   rX   r   )r   ar   r   r   test_setitem_clears_freq  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_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   r   r   r   r   r1   )r   r   )r$   r%   r   repeatasi8r   r9   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d}t	
|| d S )Nr   r   r   r   r   r   r   F)dropna)r   r   r1   r   r1   count)indexname)r$   r%   r   r   value_countsr   equalsr   r   r9   r   )r   r+   r,   rS   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-01r0   r   r   r   Tr   r   r   r1   r   r   r   r   r"   r   z
2000-01-03)
r$   r%   r   r   r   r   _pad_or_backfillr9   rA   rX   )r   r   r+   r,   fill_valr<   rS   r   r   r   test_fillna_preserves_tz  s   
z*TestDatetimeArray.test_fillna_preserves_tzc                 C  s\  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 |}
|
 }t |}t|| |
 }t |}t|| d S )Nr      
US/Pacificr   r   r   )r   r1   )r1   r   r   r   )r   r   r   )r   r   )r1   r1   F)orderF_CONTIGUOUSC_CONTIGUOUS)r$   r%   r8   reshaper   r   r   r9   rA   _from_backing_datar|   flags	DataFrameffillassert_frame_equalbfill)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"   rq   z2017-01-01T06:00:00z2017-01-02T06:00:00)
r   r$   r%   r   r&   rt   rX   ra   r9   r:   )r   r   r   rS   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   rt   r&   r9   r:   ra   rX   )r   r   r<   rS   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
   r   r"         ʚ;r   r   
Asia/Tokyor   r!   r   )
r   r2   r   r)   r$   Indexsearchsortedr(   r9   r   )r   r   r   r,   r<   rS   r   r   r   test_searchsorted_different_tzL  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 objectsrF   r   )
r   r2   r   r$   r  r)   rH   rI   r   r  )r   r   r   r,   mismatchr   r   r   r   $test_searchsorted_tzawareness_compat[  s$   

"z6TestDatetimeArray.test_searchsorted_tzawareness_compatr1   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. GotrF   )
r   r2   r   r$   r  joinrH   rI   r   r  )r   r   r   r   r,   r   r   r   r   test_searchsorted_invalid_typeso  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   r1   
fill_valuer!   )r$   r%   r8   r   r   rollr|   rd   to_datetime64shiftr9   assert_datetime_array_equalr)   )r   r+   r-   r<   fvr!  rS   r   r   r   test_shift_fill_value  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 comparerF   r1   r   )
r$   r%   r8   r)   rd   rH   rI   r   r$  r#  )r   r+   r-   r&  r  r   r   r   %test_shift_value_tzawareness_mismatch  s    
z7TestDatetimeArray.test_shift_value_tzawareness_mismatchc                 C  sV   t jdddd}|j}t jddd}|jd|d	}|jd|dd	}t|| d S )
Nr   r   r!   r   z2020-10-18 18:44r   r   r1   r   )r$   r%   r8   rX   r$  r(   r9   r   )r   r+   r-   r!  rS   r<   r   r   r   test_shift_requires_tzmatch  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)   ravelshaper9   r%  )r   r+   r-   rS   r<   	roundtripr   r   r   test_tz_localize_t2d  s   

z&TestDatetimeArray.test_tz_localize_t2dr   zdateutil/US/EasternNr   c                 C  s   t jg dt jd}|d9 }t|d|}|d }t|d }t|t|ks,J | | ks6J |	t
d }t|t|ksGJ | | ksQJ d S )N)i@NiPNi`"Nip0Nr"   r  r!   r   )r   rt   r3   r   r)   r(   r   r   	utcoffsetr'   ra   )r   r   utc_valsr-   r   r   right2r   r   r   test_iter_zoneinfo_fold  s   
z)TestDatetimeArray.test_iter_zoneinfo_fold)1r   r   r   r   r   r   rH   r   r   r   intr   int32r3   r   r   r   r   r   r   r$   rX   r#  rd   r   r   r   r   r	  r  r  r  r  r   r   r2   r4   rQ   r  r'  r(  r)  r.  eastsr   r   KeyErrorappendr2  r   r   r   r   r   ;  s    
	


)




r   c                  C  s   t g d} d}tjt|d | jdd W d    n1 s!w   Y  | | d  }tjt|d |jdd W d    d S 1 sEw   Y  d S )N)r   r   r1   z+call pd.factorize\(obj, sort=True\) insteadrF   T)sortr   )r   r   rH   rI   NotImplementedError	factorize)r-   r   tdar   r   r    test_factorize_sort_without_freq  s   "r<  )__doc__
__future__r   datetimer   rw   zoneinfor   ImportErrornumpyr   rH   pandas._libs.tslibsr   r   pandas.core.dtypes.dtypesr   pandasr$   pandas._testing_testingr9   pandas.core.arraysr   r	   r
   r   r   r<  r   r   r   r   <module>   s0     w$   6