o
    ŀg2                     @   s   d dl mZmZ d dlZd dlZd dlZd dlm	Z	 d dl
mZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ G dd dZdS )	    )given
strategiesN)lib)NaTOutOfBoundsDatetime	Timedelta	TimestampiNaT	to_offset)NpyDatetimeUnit)INVALID_FREQ_ERR_MSGc                   @   s  e Z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dd Zejdg ddd Zejdg dejdg ddd Zejdg ddd Zejdg ddd  Zejd!g d"ejdg dd#d$ Zejd%g d&g d'g d(gejdg dd)d* Zejd+g d,ejd-g d.d/d0 Zd1d2 Zeeed3 ejd4ejd!ejejejgd5d6 Zd7S )8TestTimestampRoundc                 C   sJ   t d}d}tjt|d |d W d    d S 1 sw   Y  d S )Nz
2016-01-01zDivision by zero in roundingmatch0ns)r   pytestraises
ValueErrorround)selftsmsg r   d/var/www/html/myenv/lib/python3.10/site-packages/pandas/tests/scalar/timestamp/methods/test_round.py"test_round_division_by_zero_raises   s
   "z5TestTimestampRound.test_round_division_by_zero_raisesztimestamp, freq, expected))20130101 09:10:11D20130101)z20130101 19:10:11r   20130102)z20130201 12:00:00r   20130202)z20130104 12:00:00r   20130105)2000-01-05 05:09:15.13r   z2000-01-05 00:00:00)r!   hz2000-01-05 05:00:00)r!   sz2000-01-05 05:09:15c                 C   s*   t |}||}t |}||ksJ d S Nr   r   )r   	timestampfreqexpecteddtresultr   r   r   test_round_frequencies    s   
z)TestTimestampRound.test_round_frequenciesc                 C   sT   t ddd}|d}t ddd}||ksJ t ddd}|d}||ks(J d S )Nr   z
US/Easterntzr   r   r#   r%   r   r)   r*   r(   r   r   r   test_round_tzaware2   s   

z%TestTimestampRound.test_round_tzawarec                 C   s*   t d}|d}t d}||ksJ d S )Nz20130104 12:32:0030Minz20130104 12:30:00r%   r.   r   r   r   test_round_30min<   s   
z#TestTimestampRound.test_round_30minc                 C   s   t dd}t d}||ksJ t dd}t d}||ks"J t d}dD ]}|||ks3J q(t dd}t d	}||ksEJ d S )
Nz2016-10-17 12:00:00.0015msz2016-10-17 12:00:00.002000z2016-10-17 12:00:00.00149z2016-10-17 12:00:00.001000)usns2016-10-17 12:00:00.00150103110nsz2016-10-17 12:00:00.001501030r%   )r   r*   r(   r   r'   r   r   r   test_round_subsecondC   s   z'TestTimestampRound.test_round_subsecondc                 C   s>   t d tdd W d    d S 1 sw   Y  d S )NFr5   1010ns)tmassert_produces_warningr   r   )r   r   r   r   test_round_nonstandard_freqU   s   "z.TestTimestampRound.test_round_nonstandard_freqc                 C   sF   t d}tjttd |d W d    d S 1 sw   Y  d S )Nr!   r   foo)r   r   r   r   r   r   )r   stampr   r   r   test_round_invalid_argY   s   "z)TestTimestampRound.test_round_invalid_argz#test_input, rounder, freq, expected))2117-01-01 00:00:45floor15sr?   )r?   ceilrA   r?   )z2117-01-01 00:00:45.000000012r@   r6   z2117-01-01 00:00:45.000000010)z1823-01-01 00:00:01.000000012rB   r6   z1823-01-01 00:00:01.000000020)1823-01-01 00:00:01r@   1srC   )rC   rB   rD   rC   )r   r@   rD   r   )r   rB   rD   r   c                 C   sJ   t |}t||}||}|tu r|tu sJ d S t |}||ks#J d S r$   )r   getattrr   )r   
test_inputrounderr'   r(   r)   funcr*   r   r   r   test_ceil_floor_edge^   s   
z'TestTimestampRound.test_ceil_floor_edgeztest_input, freq, expected))2018-01-01 00:02:062srJ   )2018-01-01 00:02:002minrL   )2018-01-01 00:04:004minrN   )2018-01-01 00:15:0015minrP   )2018-01-01 00:20:0020minrR   )2018-01-01 03:00:003hrT   rG   )rB   r@   r   c                 C   s2   t |}t |}t||}||}||ksJ d S r$   )r   rE   )r   rF   r'   r(   rG   r)   rH   r*   r   r   r   test_round_minute_freq   s
   
z)TestTimestampRound.test_round_minute_frequnit)r4   r3   r2   r#   c                 C   @   t d|}|d}t d}||ksJ |j|jksJ d S )Nr   r   r   )r   as_unitrB   _cresor   rW   r)   r*   r(   r   r   r   	test_ceil   
   
zTestTimestampRound.test_ceilc                 C   rX   )Nr   r   r   )r   rY   r@   rZ   r[   r   r   r   
test_floor   r]   zTestTimestampRound.test_floormethod)rB   r   r@   c                 C   s  t dddd}||}t||ddd}||ksJ |jttd| jks+J t||dd	d}t d
ddd}||ksCJ |jttd| jksQJ t||ddd}|tu s`J d}tj	t
j|d t||ddd W d    d S 1 sw   Y  d S )Nz2017-10-29 00:00:00UTCr,   zEurope/Madridr"   T)	ambiguousNPY_FR_Fz2017-10-29 01:00:00r   zCannot infer dst timer   raise)r   
tz_convertrY   rE   rZ   r   valuer   r   r   pytzAmbiguousTimeError)r   r_   rW   r   r*   r(   r   r   r   r   test_round_dst_border_ambiguous   s"   
"z2TestTimestampRound.test_round_dst_border_ambiguouszmethod, ts_str, freq)rB   2018-03-11 01:59:00-06005min)r   ri   rj   )r@   z2018-03-11 03:01:00-05002hc           	      C   s   t |dd|}t|||dd}t ddd}||ksJ |jttd| jks,J t|||dd}|tu s;J d}tjt	j
|d	 t|||d
d W d    d S 1 sZw   Y  d S )NzAmerica/Chicagor,   shift_forward)nonexistentz2018-03-11 03:00:00rb   r   z2018-03-11 02:00:00r   rc   )r   rY   rE   rZ   r   re   r   r   r   rf   NonExistentTimeError)	r   r_   ts_strr'   rW   r   r*   r(   r   r   r   r   !test_round_dst_border_nonexistent   s   "z4TestTimestampRound.test_round_dst_border_nonexistentr&   )z2018-01-01 0:0:0.124999360z2018-01-01 0:0:0.125000367z2018-01-01 0:0:0.125500z2018-01-01 0:0:0.126500z2018-01-01 12:00:00z2019-01-01 12:00:00r'   )2ns3ns4ns5ns6ns7ns250ns500ns750ns1us19us250us500us750usrD   rK   3s1Dc                 C   sR  t |d}t|j}||}|j| dks J d| dd|j|j   kr1|k s6J d J d||}|j| dksJJ d| dd|j|j   kr[|k s`J d J d||}|j| dkstJ d| dt|j|j |d	 ksJ d
|d	 dkrt|j|j |d	 kr|j| d	 dksJ dd S d S d S )Nr4   r   zfloor not a z	 multiplezfloor errorzceil not a z
ceil errorzround not a    zround errorzround half to even error)	r   rY   r
   nanosr@   _valuerB   r   abs)r   r&   r'   r)   rW   r*   r   r   r   test_round_int64   s   %

,
,
 $z#TestTimestampRound.test_round_int64c                 C   sF  t jd}t dddddd}||ksJ t jd}t jtd }||ks(J d	}tjt|d
 t jd W d    n1 sBw   Y  tjt|d
 t j	d W d    n1 s_w   Y  d}tjt|d
 t jd W d    n1 s~w   Y  tjt|d
 t j	d W d    d S 1 sw   Y  d S )Nr#   i  	      r      ,   i2z;Cannot round 1677-09-21 00:12:43.145224193 to freq=<Second>r   z;Cannot round 2262-04-11 23:47:16.854775807 to freq=<Second>)
r   minrB   maxr@   r   r   r   r   r   )r   r*   r(   r   r   r   r    test_round_implementation_bounds  s(   "z3TestTimestampRound.test_round_implementation_bounds   )valc                    s   t  tt|} |} fdd}d}|||d d}|||d d}|||d d	}|||d
 d}|||d d}|||d d}|||d d S )Nc                    sJ  |dkrnt | j|\}}t|| }| j| }|| jksJ | j| }|| jks+J d}|dkr2n ju r]| jjkr\tj|d | | W d    d S 1 sUw   Y  d S nz ju r| jjk rtj|d | | W d    d S 1 sw   Y  d S nO||kr| jjkrtj|d | | W d    d S 1 sw   Y  d S n%| jjk rtj|d | | W d    d S 1 sw   Y  d S | |}	|	|  }
t	|
j}||k sJ |	j| dksJ  j
u r||d ksJ d S  ju r|	| ksJ d S  ju r!|	| ks#J d S d S )Nr   zwithout overflowr   r   r   )divmodr   intrB   r   r   r   r@   r   r   r   )r   r   rW   divmoddifflbubr   restdclserr_clsr_   r   r   checker:  st   









z5TestTimestampRound.test_round_sanity.<locals>.checkerr   r4   i  r3   i@B r2   i ʚ;r#   l    Xp7 r   l     qar"   l     "R: r   )r   r   npint64)r   r   r_   r   r   r   r   r   r   test_round_sanity/  s&   
2z$TestTimestampRound.test_round_sanityN) __name__
__module____qualname__r   r   markparametrizer+   r/   r1   r7   r;   r>   rI   rV   r\   r^   rh   rp   r   r   r   stintegersr	   r   i8maxr   r   r@   rB   r   r   r   r   r   r      sx    





r   )
hypothesisr   r   r   numpyr   r   rf   pandas._libsr   pandas._libs.tslibsr   r   r   r   r	   r
   pandas._libs.tslibs.dtypesr   pandas._libs.tslibs.periodr   pandas._testing_testingr9   r   r   r   r   r   <module>   s     