
    6h2                    ,   S SK Jr  S SKrS SKrS SKrS SKJrJrJrJ	r	J
r
Jr  SSKJr  SSKJrJrJr  \\\\	\
\/(       d   e\
\\4   rSr\S-   rSSS	 jjr  S     SS
 jjrSSS jjrSS jr S       SS jjr  S       SS jjrSS jrg)    )annotationsN)CallableDictIterableOptionalTupleUnion   )_)encodingerrorpycompat)s   %Y-%m-%dT%H:%M:%Ss   %Y-%m-%dT%H:%Ms   %Y-%m-%dT%H%M%Ss   %Y-%m-%dT%H%Ms   %Y-%m-%d %H:%M:%S   %Y-%m-%d %H:%Ms   %Y-%m-%d %H%M%Ss   %Y-%m-%d %H%Ms   %Y-%m-%d %I:%M:%S%pr   s   %Y-%m-%d %I:%M%p   %Y-%m-%ds   %m-%ds   %m/%ds   %m/%d/%ys   %m/%d/%Ys   %a %b %d %H:%M:%S %Ys   %a %b %d %I:%M:%S%p %Ys   %a, %d %b %Y %H:%M:%Ss   %b %d %H:%M:%S %Ys   %b %d %I:%M:%S%p %Ys   %b %d %H:%M:%Ss   %b %d %I:%M:%S%ps   %b %d %H:%Ms   %b %d %I:%M%ps   %b %d %Ys   %b %ds   %H:%M:%Ss
   %I:%M:%S%ps   %H:%Ms   %I:%M%p)s   %Ys   %Y-%ms   %bs   %b %Yc                X   U c  [         R                   " 5       n U S:  a,  [        S5      n[        R                  " [        S5      U -  US9e[	        U [
        R
                  R                  U 5      R                  [
        R                  R                  S9R                  5       -
  5      nX4$ )a  Return a unix timestamp (or the current time) as a (unixtime,
offset) tuple based off the local timezone.

>>> import os, time
>>> os.environ['TZ'] = 'Asia/Novokuznetsk'
>>> time.tzset()

>>> def dtu(*a):
...    return datetime.datetime(*a, tzinfo=datetime.timezone.utc)

# Old winter timezone, +7
>>> makedate(dtu(2010,  1,  1,  5,  0,  0).timestamp())
(1262322000.0, -25200)

# Same timezone in summer, +7, so no DST
>>> makedate(dtu(2010,  7,  1,  5,  0,  0).timestamp())
(1277960400.0, -25200)

# Changing to new winter timezone, from +7 to +6 (ae04af1ce78d testcase)
>>> makedate(dtu(2010, 10, 30, 20,  0,  0).timestamp() - 1)
(1288468799.0, -25200)
>>> makedate(dtu(2010, 10, 30, 20,  0,  0).timestamp())
(1288468800.0, -21600)
>>> makedate(dtu(2011,  1,  1,  5,  0,  0).timestamp())
(1293858000.0, -21600)

# Introducing DST, changing +6 to +7
>>> makedate(dtu(2011,  3, 26, 20,  0,  0).timestamp() - 1)
(1301169599.0, -21600)
>>> makedate(dtu(2011,  3, 26, 20,  0,  0).timestamp())
(1301169600.0, -25200)
r   s   check your clocks   negative timestamp: %d)hint)tzinfo)timer   r   
InputErrorrounddatetimefromtimestampreplacetimezoneutc	timestamp)r   r   tzs      :/usr/lib/python3/dist-packages/mercurial/utils/dateutil.pymakedater   U   s    B IIK	1}$%'(944
 	
 




)
)
 
))--	.		
B =    c                *   U =(       d
    [        5       u  p#SU;   d  SU;   d  SU;   ap  US:  =(       a    S=(       d    Sn[        U5      S-  n[        US5      u  pgUR                  SS5      nUR                  SS	XF4-  5      nUR                  SS
U-  5      nX#-
  nUS:  a  SnOUS:  a  Sn[        R                  " SSS5      [        R
                  " US9-   n[        R                  " UR                  [        R                  " U5      5      5      n	U	$ )a  represent a (unixtime, offset) tuple as a localized time.
unixtime is seconds since the epoch, and offset is the time zone's
number of seconds away from UTC.

>>> datestr((0, 0))
'Thu Jan 01 00:00:00 1970 +0000'
>>> datestr((42, 0))
'Thu Jan 01 00:00:42 1970 +0000'
>>> datestr((-42, 0))
'Wed Dec 31 23:59:18 1969 +0000'
>>> datestr((0x7fffffff, 0))
'Tue Jan 19 03:14:07 2038 +0000'
>>> datestr((-0x80000000, 0))
'Fri Dec 13 20:45:52 1901 +0000'
s   %1s   %2s   %zr      -   +<   s   %1%2s   %c%02ds   %02d   i     )seconds)
r   absdivmodr   r   	timedeltar   
strtolocalstrftimestrfromlocal)
dateformattr   signminutesqrdss
             r   datestrr8      s    & HJEA%6/Uf_Q D(Db'R-gr"w/yD9'<=w{3	A:~	
[ 	$1%(:(:1(EEAAJJx'<'<V'DEFAHr    c                    [        U SS9$ )z1turn (timestamp, tzoff) tuple into iso 8631 date.r   )r0   )r8   )r/   s    r   	shortdater:      s    4,,r    c                h   [         R                  " U 5      n U R                  S5      (       d  U R                  S5      (       a  SU SS R                  5       4$ [	        U 5      S:  ay  U S   S;   ap  U S	S R                  5       (       aX  U S   S
:H  =(       a    S=(       d    Sn[        U S	S 5      n[        U SS 5      nU* US-  U-   -  S-  U SS R                  5       4$ U R                  S5      (       a  U SS R                  5       (       a  SU SS 4$ [	        U 5      S:  a  U S   S;   a  U S   S:X  az  U SS R                  5       (       ab  U SS R                  5       (       aJ  U S   S
:H  =(       a    S=(       d    Sn[        U SS 5      n[        U SS 5      nU* US-  U-   -  S-  U SS 4$ SU 4$ )zRfind a trailing timezone, if any, in string, and return a
(offset, remainder) pairs   GMTs   UTCr   N   s   +-r#   r'   r$      Z   i   :)r   bytestrendswithrstriplenisdigitint)r7   r2   hoursr3   s       r   parsetimezonerL      s    	Azz&QZZ//!CR&--/!! 1v{qu~!BC&..*:*:"$1*AbHaf+u
W,-2AcrFMMOCC 	zz$AbH,,..!CR&y 	A!bEUNbETMbHbcFNN"$1*AbHaf+u
W,-2AcrF::7Nr    c                   Uc  0 n[        U 5      u  p4SnS HY  n[        R                  " U5      nU Vs/ s H  nSU-   U;   d  M  SPM     nnU(       d  USX&   U   -   -  nUSUS   -   -  nMW  SnM[     [        R                  " [
        R                  " U5      [
        R                  " U5      5      n	[        [        R                  " U	5      5      n
Uc&  [        [        R                  " U	5      5      nX-
  nX4$ X-   nX4$ s  snf )zzparse a localized time string and return a (unixtime, offset) tuple.
if the string cannot be parsed, ValueError is raised.F)   S   M   HI   d   mb   yY   %T   @s   @%r   )rL   r   rE   r   strptimer   r.   rJ   calendartimegmmktime)stringr0   defaultsoffsetr/   usenowpartpfound	timetuplelocalunixtimeunixtimes               r   strdaterd      s     !(LF F %#<t!qV';t<D8>&111Ded1go%F F!$ d#X%:%:6%BI 	23M~t{{9-.)  !)' =s   DDc           	         Uc  0 nU (       d  g[        U [        5      (       a'  [        U 5      S:X  a  U $ [        R                  " S5      eU(       d  [
        nU R                  5       n U S:X  d  U [        S5      :X  a
  [        5       $ U S:X  d  U [        S5      :X  aD  [        R                  R                  5       R                  S5      n [        R                  " U 5      n OmU S:X  d  U [        S5      :X  aX  [        R                  R                  5       [        R                  " SS	9-
  R                  S5      n [        R                  " U 5      n  [!        ["        U R%                  S
5      5      u  p4US:  d  US:  a"  [        R0                  " [        S5      U-  5      eUS:  d  US:  a"  [        R0                  " [        S5      U-  5      eX44$ ! [&         a    [        5       n0 nS H<  nUR)                  U5      nUc  USS S;   a  SnOSn[+        USUSS -   5      n	X4Xg'   M>     U H+  n
 [-        X
U5      u  p4   M  ! [&        [.        4 a     M)  f = f   [        R0                  " [        S5      [2        R4                  " U 5      -  5      ef = f)a  parse a localized date/time and return a (unixtime, offset) tuple.

The date may be a "unixtime offset" string or in one of the specified
formats. If the date already is a (unixtime, offset) tuple, it is returned.

>>> parsedate(b' today ') == parsedate(
...     datetime.date.today().strftime('%b %d').encode('ascii'))
True
>>> parsedate(b'yesterday ') == parsedate(
...     (datetime.date.today() - datetime.timedelta(days=1)
...      ).strftime('%b %d').encode('ascii'))
True
>>> now, tz = makedate()
>>> strnow, strtz = parsedate(b'now')
>>> (strnow - now) < 1
True
>>> tz == strtz
True
>>> parsedate(b'2000 UTC', formats=extendeddateformats)
(946684800, 0)
)r   r   r
   s   invalid date formats   nows   todayz%b %ds	   yesterdayr'   )days    )rQ   rR   rS   rP   rO   rN   r   s   HMSs   00   1rT   s   invalid date: %rr&   r%   s   date exceeds 32 bits: %di ;i  s   impossible time zone offset: %d)
isinstancetuplerH   r   ProgrammingErrordefaultdateformatsstripr   r   r   r/   todayr-   r   r,   r+   maprJ   split
ValueErrorgetr8   rd   OverflowError
ParseErrorr   rE   )r/   formatsbiaswhenr\   nowr[   r^   bnr0   s              r   	parsedater{     sa   4 |$t9>K(()?@@$::<Dv~6*zx41X;.}}""$--g6""4(		<!8##%(:(:(BBLL
 ""4(3

4 01F kTJ.q!<=DEE&5.q!CDvMNN<M  j;DAy!9&A A TD1I-.AVHN < F&tX>  .   ""%&)9)9$)?? 7s1   !G AJ+H=9J=IJI<Jc                J  ^^^ SS jnSS jnU R                  5       n U (       d  [        R                  " [        S5      5      eU SS S:X  a:  U SS (       d  [        R                  " [        S5      5      eU" U SS 5      mU4S	 j$ U SS S
:X  a:  U SS (       d  [        R                  " [        S5      5      eU" U SS 5      mU4S j$ U SS S:X  aV   [	        U SS 5      nUS:  a%  [        R                  " [        S5      U SS -  5      e[        5       S   US-  S-  -
  mU4S j$ SU ;   a+  U R                  S5      u  pEU" U5      U" U5      smmUU4S j$ U" U 5      U" U 5      smmUU4S j$ ! [
         a&    [        R                  " [        S5      U SS -  5      ef = f)a  Return a function that matches a given date match specifier

Formats include:

'{date}' match a given date to the accuracy provided

'<{date}' on or before a given date

'>{date}' on or after a given date

>>> p1 = parsedate(b"10:29:59")
>>> p2 = parsedate(b"10:30:00")
>>> p3 = parsedate(b"10:30:59")
>>> p4 = parsedate(b"10:31:00")
>>> p5 = parsedate(b"Sep 15 10:30:00 1999")
>>> f = matchdate(b"10:30")
>>> f(p1[0])
False
>>> f(p2[0])
True
>>> f(p3[0])
True
>>> f(p4[0])
False
>>> f(p5[0])
False
c                4    SSS.n[        U [        U5      S   $ )Nrh   )rR   rQ   r   )r{   extendeddateformats)r/   r6   s     r   lowermatchdate.<locals>.lower  s!    %2A6q99r    c                    SSSSS.nS H  n X!S'   [        U [        U5      S   s  $    SUS'   [        U [        U5      S   $ ! [        R                   a     MP  f = f)	Ns   12s   23s   59)rR   rP   rO   rN   )s   31s   30s   29rQ   r   s   28)r{   r~   r   rt   )r/   r6   rf   s      r   uppermatchdate.<locals>.upper  su    %uEB)D$ ':A>qAA * $2A6q99 ## s   AAAs+   dates cannot consist entirely of whitespacer   r'      <Ns   invalid day spec, use '<DATE'c                   > U T:*  $ N xrw   s    r   <lambda>matchdate.<locals>.<lambda>  	    dr       >s   invalid day spec, use '>DATE'c                   > U T:  $ r   r   r   s    r   r   r     r   r    r"   s   invalid day spec: %ss,   %s must be nonnegative (see 'hg help dates')i     c                   > U T:  $ r   r   r   s    r   r   r     r   r    s    to c                &   > U T:  =(       a    U T:*  $ r   r   r   startstops    r   r   r         e1T	1r    c                &   > U T:  =(       a    U T:*  $ r   r   r   s    r   r   r     r   r    )r/   bytesreturnfloat)rm   r   r   r   rJ   rq   r   rp   )	r/   r   r   rf   ary   r   r   rw   s	         @@@r   	matchdater   c  s   ::	: ::<D<=
 	
 
ad	ABx""1%E#FGGT!"X""	ad	ABx""1%E#FGGT!"X""	ad		JtABx=D !8""ABT!"XM  z!}td{R//""	Dzz'"Ahat11Dk5;t11  	J""1%<#=QR#HII	Js   E2 20F"r   )r   zOptional[float]r   hgdate)Ns   %a %b %d %H:%M:%S %Y %1%2)r/   Optional[hgdate]r0   r   r   r   )r/   r   r   r   )r7   r   r   zTuple[Optional[int], bytes])rZ   r   r0   r   r[   z*Optional[Dict[bytes, Tuple[bytes, bytes]]]r   r   )NN)r/   zUnion[bytes, hgdate]ru   zOptional[Iterable[bytes]]rv   zOptional[Dict[bytes, bytes]]r   r   )r/   r   r   zCallable[[float], bool])
__future__r   rW   r   r   typingr   r   r   r   r   r	   i18nr    r   r   r   r   rJ   r   rl   r~   r   r8   r:   rL   rd   r{   r   r   r    r   <module>r      s    #       		   
ucz	  D ) ,  0h "0%
%% %P-
 L <@+++ 9+ 	+` *.)-Z
Z&Z 'Z 	ZzM2r    