
    Eg2                         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          ZdS )	    )given
strategiesN)lib)NaTOutOfBoundsDatetime	Timedelta	TimestampiNaT	to_offset)NpyDatetimeUnit)INVALID_FREQ_ERR_MSGc                   |   e Zd Zd Zej                            dg d          d             Zd Zd Z	d Z
d Zd	 Zej                            d
g d          d             Zej                            dg d          ej                            dg d          d                         Zej                            dg d          d             Zej                            dg d          d             Zej                            dg d          ej                            dg d          d                         Zej                            dg dg dg dg          ej                            dg d          d                         Zej                            dg d          ej                            d g d!          d"                         Zd# Z e ej        ed$z   ej                  %          ej                            dej        ej        ej        g          d&                         Zd'S )(TestTimestampRoundc                     t          d          }d}t          j        t          |          5  |                    d           d d d            d S # 1 swxY w Y   d S )Nz
2016-01-01zDivision by zero in roundingmatch0ns)r	   pytestraises
ValueErrorround)selftsmsgs      e/var/www/sysmax/venv/lib/python3.11/site-packages/pandas/tests/scalar/timestamp/methods/test_round.py"test_round_division_by_zero_raisesz5TestTimestampRound.test_round_division_by_zero_raises   s    |$$,]:S111 	 	HHUOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAz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                 |    t          |          }|                    |          }t          |          }||k    sJ d S Nr	   r   )r   	timestampfreqexpecteddtresults         r   test_round_frequenciesz)TestTimestampRound.test_round_frequencies    sD     y!!$X&&!!!!!!    c                     t          dd          }|                    d          }t          dd          }||k    sJ t          dd          }|                    d          }||k    sJ d S )Nr   z
US/Easterntzr   r   r%   r(   r   r,   r-   r+   s       r   test_round_tzawarez%TestTimestampRound.test_round_tzaware2   sz    *|<<<#ZL999!!!!*|<<<#||||||r/   c                 |    t          d          }|                    d          }t          d          }||k    sJ d S )Nz20130104 12:32:0030Minz20130104 12:30:00r(   r3   s       r   test_round_30minz#TestTimestampRound.test_round_30min<   sF    *++'""011!!!!!!r/   c                    t          d                              d          }t          d          }||k    sJ t          d                              d          }t          d          }||k    sJ t          d          }dD ]}||                    |          k    sJ t          d                              d          }t          d	          }||k    sJ 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*   s        r   test_round_subsecondz'TestTimestampRound.test_round_subsecondC   s    566<<TBB9::!!!!677==dCC9::!!!!122  	( 	(D$''''':;;AA&II<==!!!!!!r/   c                     t          j        d          5  t          d                              d           d d d            d S # 1 swxY w Y   d S )NFr<   1010ns)tmassert_produces_warningr	   r   )r   s    r   test_round_nonstandard_freqz.TestTimestampRound.test_round_nonstandard_freqU   s    '.. 	G 	G566<<XFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   #AA	A	c                     t          d          }t          j        t          t                    5  |                    d           d d d            d S # 1 swxY w Y   d S )Nr#   r   foo)r	   r   r   r   r   r   )r   stamps     r   test_round_invalid_argz)TestTimestampRound.test_round_invalid_argY   s    233]:-ABBB 	 	KK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAz#test_input, rounder, freq, expected))2117-01-01 00:00:45floor15srH   )rH   ceilrJ   rH   )z2117-01-01 00:00:45.000000012rI   r=   z2117-01-01 00:00:45.000000010)z1823-01-01 00:00:01.000000012rK   r=   z1823-01-01 00:00:01.000000020)1823-01-01 00:00:01rI   1srL   )rL   rK   rM   rL   )r   rI   rM   r   )r   rK   rM   r   c                     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-   s           r   test_ceil_floor_edgez'TestTimestampRound.test_ceil_floor_edge^   sk    0 z""r7##d99S====== **HX%%%%%%r/   ztest_input, freq, expected))2018-01-01 00:02:062srT   )2018-01-01 00:02:002minrV   )2018-01-01 00:04:004minrX   )2018-01-01 00:15:0015minrZ   )2018-01-01 00:20:0020minr\   )2018-01-01 03:00:003hr^   rQ   )rK   rI   r   c                     t          |          }t          |          }t          ||          } ||          }||k    sJ d S r'   )r	   rO   )r   rP   r*   r+   rQ   r,   rR   r-   s           r   test_round_minute_freqz)TestTimestampRound.test_round_minute_freq   sQ      z""X&&r7##d!!!!!!r/   unit)r;   r:   r9   r%   c                     t          d                              |          }|                    d          }t          d          }||k    sJ |j        |j        k    sJ d S )Nr   r   r    )r	   as_unitrK   _cresor   rb   r,   r-   r+   s        r   	test_ceilzTestTimestampRound.test_ceil   sf    *++33D99Z((!!!!}	))))))r/   c                     t          d                              |          }|                    d          }t          d          }||k    sJ |j        |j        k    sJ d S )Nr   r   r   )r	   rd   rI   re   rf   s        r   
test_floorzTestTimestampRound.test_floor   sf    *++33D99#Z((!!!!}	))))))r/   method)rK   r   rI   c                    t          dd                              d          }|                    |          } t          ||          dd          }||k    sJ |j        t          t
          d|           j        k    sJ  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        |          5   t          ||          dd           d d d            d S # 1 swxY w Y   d S )Nz2017-10-29 00:00:00UTCr1   zEurope/Madridr$   T)	ambiguousNPY_FR_Fz2017-10-29 01:00:00r   zCannot infer dst timer   raise)r	   
tz_convertrd   rO   re   r   valuer   r   r   pytzAmbiguousTimeError)r   rj   rb   r   r-   r+   r   s          r   test_round_dst_border_ambiguousz2TestTimestampRound.test_round_dst_border_ambiguous   s    ,777BB?SSZZ$V$$SD999||||}9I49I9I J J PPPPP$V$$SE:::2u===HH
 
 !!!!}9I49I9I J J PPPPP$V$$SE:::}}}}%]42#>>> 	8 	8GBw7777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   <E%%E),E)zmethod, ts_str, freq)rK   2018-03-11 01:59:00-06005min)r   ru   rv   )rI   z2018-03-11 03:01:00-05002hc                    t          |d                              |          } t          ||          |d          }t          dd          }||k    sJ |j        t          t          d|           j        k    sJ  t          ||          |d          }|t          u sJ d}t          j        t          j
        |	          5   t          ||          |d
           d d d            d S # 1 swxY w Y   d S )NzAmerica/Chicagor1   shift_forward)nonexistentz2018-03-11 03:00:00rn   r   z2018-03-11 02:00:00r   ro   )r	   rd   rO   re   r   rq   r   r   r   rr   NonExistentTimeError)	r   rj   ts_strr*   rb   r   r-   r+   r   s	            r   !test_round_dst_border_nonexistentz4TestTimestampRound.test_round_dst_border_nonexistent   s\    v"3444<<TBB$V$$TGGG27HIII!!!!}9I49I9I J J PPPPP$V$$Tu===}}}}#]44C@@@ 	; 	;GB'::::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   	C22C69C6r)   )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750usrM   rU   3s1Dc                     t          |                              d          }t          |          j        }|                    |          }|j        |z  dk    sJ d| d            d|j        |j        z
  cxk    r|k     sn J d            |                    |          }|j        |z  dk    sJ d| d            d|j        |j        z
  cxk    r|k     sn J d            |                    |          }|j        |z  dk    sJ d| d            t          |j        |j        z
            |d	z  k    s
J d
            |d	z  dk    r>t          |j        |j        z
            |d	z  k    r|j        |z  d	z  dk    sJ d            d S d S d S )Nr;   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	   rd   r   nanosrI   _valuerK   r   abs)r   r)   r*   r,   rb   r-   s         r   test_round_int64z#TestTimestampRound.test_round_int64   s   J y!!))$//$ $}t#q(((*H*H*H*H(((BI-444444444m444 }t#q(((*G*G*G*G(((FMBI-444444444l444 $}t#q(((*H*H*H*H(((6=29,--:::M:::!8q==S!:;;tqyHH=D(1,1113M111 =HH11r/   c                    t           j                            d          }t          dddddd          }||k    sJ t           j                            d          }t           j        t          d          z
  }||k    sJ d	}t          j        t          |
          5  t           j                            d           d d d            n# 1 swxY w Y   t          j        t          |
          5  t           j        	                    d           d d d            n# 1 swxY w Y   d}t          j        t          |
          5  t           j                            d           d d d            n# 1 swxY w Y   t          j        t          |
          5  t           j        	                    d           d d d            d S # 1 swxY w 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	   minrK   maxrI   r   r   r   r   r   )r   r-   r+   r   s       r    test_round_implementation_boundsz3TestTimestampRound.test_round_implementation_bounds  s   ##C((T1b!R44!!!!$$S))=9Y#7#77!!!!K].c::: 	% 	%M$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% ].c::: 	% 	%M$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% L].c::: 	$ 	$Ms###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ ].c::: 	% 	%M$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%sH    CCC. DD!D E..E25E2 GGG   )valc                 F   t           t          t          j        |          } |          }fd}d} |||d           d} |||d           d} |||d           d} |||d	           d
} |||d           d} |||d           d} |||d           d S )Nc                 d   |dk    rnt          | j        |          \  }}t          ||z
            }| j        |z
  }|| j        k    sJ | j        |z   }|| j        k    sJ d}|dk    rnKj        u rM|j        j        k    r<t          j        |          5   | |           d d d            n# 1 swxY w Y   d S nj        u rM|j        j        k     r<t          j        |          5   | |           d d d            n# 1 swxY w Y   d S n||k    rM|j        j        k    r<t          j        |          5   | |           d d d            n# 1 swxY w Y   d S nL|j        j        k     r<t          j        |          5   | |           d d d            n# 1 swxY w Y   d S  | |          }	|	| z
  }
t          |
j                  }||k     sJ |	j        |z  dk    sJ j
        u r||dz  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   intrK   r   r   r   rI   r   r   r   )r   r   rb   divmoddifflbubr   restdclserr_clsrj   s              r   checkerz5TestTimestampRound.test_round_sanity.<locals>.checker:  s   zz!")U33S53;''Y_RYY%BI~~~~(!88sx''CGN**#]7#>>> - -"F2t,,,- - - - - - - - - - - - - - - + sy((CGN**#]7#>>> - -"F2t,,,- - - - - - - - - - - - - - - + D[[CGN**#]7#>>> - -"F2t,,,- - - - - - - - - - - - - - - + #'.((wc::: ) )r4((() ) ) ) ) ) ) ) ) ) ) ) ) ) )F&T""CrBry>>D%<<<<:%****""uqy((((((39$$byyyyyy38##byyyy $# ysH   B44B8;B81D

DDEE!$E!F**F.1F.r   r;   i  r:   i@B r9   i ʚ;r%   l    Xp7 r   l     qar$   l     "R: r   )r	   r   npint64)r   r   rj   r   r   r   r   r   s     `   @@r   test_round_sanityz$TestTimestampRound.test_round_sanity/  s   
 %hsmmSXX0	! 0	! 0	! 0	! 0	! 0	! 0	!d E4   E4   E4   E3"E5!!!'E3,E3r/   N) __name__
__module____qualname__r   r   markparametrizer.   r4   r7   r>   rC   rG   rS   ra   rg   ri   rt   r}   r   r   r   stintegersr
   r   i8maxr	   r   rI   rK   r    r/   r   r   r      s          [#	
 	
 	
 " " "  " " "" " "$G G G  
 [-	
 	
 	
 .	& 	&/ .	& [$	
 	
 	

 
 [Y(B(B(BCC" " DC
 
" [V%<%<%<==* * >=* [V%<%<%<==* * >=* [X'A'A'ABB[ 8 8	  CB
8. [888999777	
  [ ; ;	  ; [	
 	
 	

 
 [	
 	
 	
 .N N/ 
 
DN0% % %0 U{r{4!8SY//000[9?IOY^D L  L   10L  L  L r/   r   )
hypothesisr   r   r   numpyr   r   rr   pandas._libsr   pandas._libs.tslibsr   r   r   r	   r
   r   pandas._libs.tslibs.dtypesr   pandas._libs.tslibs.periodr   pandas._testing_testingrA   r   r   r/   r   <module>r      s#                                     7 6 6 6 6 6 ; ; ; ; ; ;      g  g  g  g  g  g  g  g  g  g r/   