U
    sVc+                     @   sb   d dl m Z mZmZ d dlZd dlZd dlmZmZm	Z	m
Z
mZmZ d dlmZ G dd dZdS )    )datetime	timedeltatimezoneN)OutOfBoundsDatetimeOutOfBoundsTimedelta	Timedelta	Timestampoffsets	to_offsetc                   @   s,  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zejddeddeddfdeddeddfdedd edd!fd"edd#edd"fd$edd%edd$fd&d'edd&fgejd(ejd)d*d+ Zejd,ed-d ed-d!ed-d gd.d/ Zejd0ed1d2d1fed3d2d3fed1d4d5fed1d6d7fgd8d9 Zejd:ed;ed;d<d=gejd>dedejdd?gejd@ejd-dAgejd@gdBdC ZejdDdEdFgdGdH ZejdDdEdFgdIdJ Z dKdL Z!d'S )MTestTimestampArithmeticc                 C   sX   t d}tdd }t d}|| |ks,t|| |ks<tt d}|| |ksTtd S )N2000/1/1Dd   z
2000/04/10z
1999/09/23)r   r
   AssertionError)selfstampZoffset_no_overflowexpected r   Q/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/scalar/timestamp/test_arithmetic.pytest_overflow_offset   s    z,TestTimestampArithmetic.test_overflow_offsetc              	   C   s  t d}dtd }d}d}tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X t d}tdd	 }d
}tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X tjt|d ||  W 5 Q R X d S )Nz2017-01-13 00:00:00i3   zathe add operation between \<-?\d+ \* Days\> and \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} will overflowz<Cannot cast <-?20169940 \* Days> to unit=ns without overflowmatchr   r   l    d(	 z?Cannot cast <-?10000000000 \* Days> to unit=ns without overflow)r   r	   ZDaypytestraisesr   OverflowErrorr
   )r   r   Zoffset_overflowmsgZlmsg2Zlmsg3r   r   r   test_overflow_offset_raises%   s(    z3TestTimestampArithmetic.test_overflow_offset_raisesc              	   C   sV   d}t d}t d}tjt|d ||  W 5 Q R X ||  | | ksRtd S )NzResult is too largez2101-01-01 00:00:00z1688-01-01 00:00:00r   )r   r   r   r   to_pydatetimer   )r   r   abr   r   r   test_overflow_timestamp_raisesK   s    z6TestTimestampArithmetic.test_overflow_timestamp_raisesc                 C   s(   t d}|td }|j|jks$td S )Nl   { |%*x r   )r   r   Z
nanosecondr   )r   valresultr   r   r   test_delta_preserve_nanosW   s    z1TestTimestampArithmetic.test_delta_preserve_nanosc              	   C   s   t d}td|d}|| }|| |ks,t| | |ks@t|d kr^| | |kstn*d}tjt|d | |  W 5 Q R X d S )Nl   @~z
2021-01-01tzz;Cannot subtract tz-naive and tz-aware datetime-like objectsr   )r   r   r   r   Zto_datetime64r   r   	TypeError)r   Ztz_naive_fixturetdtsotherr   r   r   r   test_rsub_dtscalars\   s    z+TestTimestampArithmetic.test_rsub_dtscalarsc                 C   sD   t ddd}tt ddd}|| jdks.t|| jdks@td S )N  
         r   )r   r   daysr   )r   dtr)   r   r   r   test_timestamp_sub_datetimek   s    z3TestTimestampArithmetic.test_timestamp_sub_datetimec                 C   sF   t d}tddddtjd}|| }t|ts2t|tdksBtd S )Nz2020-10-22T22:00:00+00:00i  r-      tzinfoz0 days)r   r   r   utc
isinstancer   r   r   t1t2r#   r   r   r   test_subtract_tzaware_datetimeq   s
    z6TestTimestampArithmetic.test_subtract_tzaware_datetimec                 C   sF   t dd}t dd}|| }t|ts2t|tdksBtd S )N20130101z
US/EasternCET0 days 06:00:00)r   tz_localizer8   r   r   r9   r   r   r   /test_subtract_timestamp_from_different_timezonez   s
    zGTestTimestampArithmetic.test_subtract_timestamp_from_different_timezonec                 C   sx   t dddttddd}tdd}|| }t|ts>t|tdksNt|| }t|tsdt|td	ksttd S )
Nr,   r   hoursr5   r=   r>   r?   z-1 days +18:00:00)r   r   r   r   r@   r8   r   r   r9   r   r   r   5test_subtracting_involving_datetime_with_different_tz   s    zMTestTimestampArithmetic.test_subtracting_involving_datetime_with_different_tzc                 C   sN   t d}|d}||td }|| }t|ts:t|tdksJtd S )Nr=   UTCz0 days 05:00:00)r   r@   Z
tz_convertr   r8   r   )r   Ztz_aware_fixtureZt_rawZt_UTCZt_diffr#   r   r   r   $test_subtracting_different_timezones   s    
z<TestTimestampArithmetic.test_subtracting_different_timezonesc              	   C   s   t ddd}tdd}tjtdd t|dd	}W 5 Q R X d
}tjt|d |d  W 5 Q R X tjt|d |d  W 5 Q R X t	|| t
kstt	|| tkstt	|| tksttdd}t	|| tkstt	|| tkstd S )Ni        r   secondszThe 'freq' argumentr   r   freqz Addition/subtraction of integers)r   r   tmZassert_produces_warningFutureWarningr   r   r   r'   typer   r   nptimedelta64)r   r2   r(   r)   r   td64r   r   r   test_addition_subtraction_types   s    
z7TestTimestampArithmetic.test_addition_subtraction_typeszfreq, td, td64Sr   rJ   smin)minutesmHrC   hr   )r1   W)weeksMNz1ignore:Timestamp.freq is deprecated:FutureWarningz(ignore:The 'freq' argument:FutureWarningc                 C   s   t d|d}|j}|d|  j|ks(t|d|  j|ks>t|d k	rj|| j|ksXt|| j|ksjt|| j|ks|t|| j|kstd S )Nz2014-03-05 00:00:00rL   r   )r   rM   r   )r   rM   r(   rS   r)   Zoriginal_freqr   r   r   ,test_addition_subtraction_preserve_frequency   s    zDTestTimestampArithmetic.test_addition_subtraction_preserve_frequencyr(   rH   c                 C   s   |}|| || kst d S N)r   )r   r(   Zfixed_now_tsr)   r   r   r   test_radd_tdscalar   s    z*TestTimestampArithmetic.test_radd_tdscalarzother,expected_differenceinsiIusimsi@+c                 C   s0   t t }|| }|j|j }||ks,td S r`   )r   r   utcnowvaluer   )r   r*   Zexpected_differencer)   r#   Zvaldiffr   r   r   #test_timestamp_add_timedelta64_unit   s    
z;TestTimestampArithmetic.test_timestamp_add_timedelta64_unitr)   z
1776-07-04rF   r%   r*      ZdtyperI   c              	   C   s   d}t jt|d ||  W 5 Q R X t jt|d ||  W 5 Q R X t jt|d ||  W 5 Q R X d}t jt|d ||  W 5 Q R X d S )Nz3Addition/subtraction of integers and integer-arraysr   zunsupported operand type)r   r   r'   )r   r)   r*   r   r   r   r   test_add_int_with_freq   s    z.TestTimestampArithmetic.test_add_int_with_freqshape)   )rh   rH   c              	      s   t d tdd|} | } fddtdD }tjdd |D dd|}t|| |  }t||  | } fd	dtdD }tjd
d |D dd|}t|| d}t	j
t|d |   W 5 Q R X d S )N2020-04-04 15:45rl   m8[h]c                    s   g | ]} t |d  qS rC   r   .0nr)   r   r   
<listcomp>  s     zATestTimestampArithmetic.test_addsub_m8ndarray.<locals>.<listcomp>c                 S   s   g | ]
}|j qS r   Zasm8rr   xr   r   r   ru     s     zM8[ns]ri   c                    s   g | ]} t |d  qS ro   rp   rq   rt   r   r   ru     s     c                 S   s   g | ]
}|j qS r   rv   rw   r   r   r   ru     s     Dunsupported operand type\(s\) for -: 'numpy.ndarray' and 'Timestamp'r   r   rQ   ZarangeZastypeZreshaperangearrayrN   Zassert_numpy_array_equalr   r   r'   r   rk   r*   r#   Z	ex_stampsr   r   r   rt   r   test_addsub_m8ndarray	  s    z-TestTimestampArithmetic.test_addsub_m8ndarrayc              	      s   t ddd tdd|} | } fddtdD }t||}t|| |  }t||  | } fddtdD }t||}t|| d	}t	j
t|d
 |   W 5 Q R X d S )Nrm   z
US/Pacificr%   rl   rn   c                    s   g | ]} t |d  qS ro   rp   rq   rt   r   r   ru   *  s     zITestTimestampArithmetic.test_addsub_m8ndarray_tzaware.<locals>.<listcomp>c                    s   g | ]} t |d  qS ro   rp   rq   rt   r   r   ru   2  s     ry   r   rz   r}   r   rt   r   test_addsub_m8ndarray_tzaware!  s    z5TestTimestampArithmetic.test_addsub_m8ndarray_tzawarec                 C   sD   t ddd}t||d}t||d}|| }td}||ks@td S )Ni  r   r%   r   )r   r   r   r   )r   Zutc_fixtureZutc_fixture2r2   Zts1Zts2r#   r   r   r   r   #test_subtract_different_utc_objects:  s    z;TestTimestampArithmetic.test_subtract_different_utc_objects)"__name__
__module____qualname__r   r   r!   r$   r+   r3   r<   rA   rE   rG   rT   r   markZparametrizer   rQ   rR   filterwarningsr_   r   ra   rg   r   Zint64r|   Zint32Zuint64rj   r~   r   r   r   r   r   r   r      st   &		


 
	

	

r   )r   r   r   ZnumpyrQ   r   Zpandas._libs.tslibsr   r   r   r   r	   r
   Zpandas._testingZ_testingrN   r   r   r   r   r   <module>   s
    	