
    Mf                    6   d dl 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
Z
d dlmZ d dlmZ ddlmZ ddlmZ ddlmZ dd	lmZ  ed
          Ze	ej        ej        eef         Ze	ej        ej        eedf         Z G d de          Z e            xZxZ Z!dS )    N)AnyCallableDictOptionalTypeVarUnion)relativedelta)tz   )ISOWeek)Month)Quarter)WeekTc            )        ,   e Zd Zd Zddee         dee         fdZddee         defdZddee         defdZddee         defd	Z	ddee         defd
Z
ddee         dee         defdZddee         defdZddeej                 dee         dedededededededededej        fdZddeej                 dee         dedededededededededej        fdZddeej                 dee         dee         dej        fd Zddededededededededefd!Zddej        d"ee         dej        fd#Zdd$ed%edefd&Zdefd'Zdd(edee         defd)Zdej        dej        fd*Zdd"edej        fd+Zdd"edee         dej        fd,Zdej        defd-Zddej        d.ee         defd/Zdej        dej        fd0Zddej        dee         dej        fd1Zddej        dee         dej        fd2Z dde!dee         dee         d3edededededededededed4ee         deej                 fd5Z"dde!dee         dee         d3ededededededededededej        fd6Z#dde!dee         dee         d3ededededededededededej        fd7Z$dd"edej        fd8Z%dd"edej        fd9Z&dd"edee         dej        fd:Z'dd"edee         dej        fd;Z(ddeej                 ded"edee         dedej        fd<Z)ddeej                 ded"edee         dedej        fd=Z*ddeej                 ded"edee         dedededededededededej        fd>Z+ddeej                 ded"edee         dedededededededededej        fd?Z,dde-dee         ded"edee         dededededededededede-dej        f d@Z.dde-dee         ded"edee         dededededededededede-dej        f dBZ/dde-dee         ded"edee         dedededededededededej        fdCZ0dde-dee         ded"edee         dedededededededededej        fdDZ1dej        dej        fdEZ2dde!dee         d3edededededeej                 fdFZ3ddGe!dHe!dee         dIee         dJee         defdKZ4dde5ej        ej        df         ded"edee         dedededededededededeej                 deej                 dMedNede5e6e7f         f$dOZ8dde5ej        ej        df         ded"edee         dedededededededededeej                 deej                 dMede7f"dPZ9dde5ej        ej        df         ded"edee         dedededededededededeej                 deej                 dMedNede5e6e7f         f$dQZ:dde5ej        ej        df         ded"edee         dedededededededededeej                 deej                 dMede7f"dRZ;dde5ej        ej        df         ded"edee         dedededededededededeej                 deej                 dMedNedef$dSZ<dde5ej        ej        df         ded"edee         dedededededededededeej                 deej                 dMedef"dTZ=dde5ej        ej        df         ded"edee         dedededededededededeej                 deej                 dMedNedef$dUZ>dde5ej        ej        df         ded"edee         dedededededededededeej                 deej                 dMedef"dVZ?dde!d3edNedee         dee7         f
dWZ@dde!d3edee         dee7         fdXZAddGe!dHe!dNedefdYZBdGe!dHe!defdZZCddej        dee         defd[ZDddej        dee         dMedefd\ZEddee         d"edMedefd]ZFddee         d"edMedefd^ZGddee         d"edee         dMedef
d_ZHddee         d"edee         dMedef
d`ZIddeej                 dee         ded"edee         dedMedefdaZJddeej                 dee         ded"edee         dedMedefdbZKddeej                 dee         ded"edee         dedededededededededMedef dcZLddeej                 dee         ded"edee         dedededededededededMedef ddZMdde-dee         ded"edee         dedededededededededeej                 deej                 dMede-deee         def(dfZNdde-dee         ded"edee         dedededededededededeej                 deej                 dMede-deee         def(dgZOdde-dee         ded"edee         dedededededededededeej                 deej                 dMede-deee         def(dhZPdde-dee         ded"edee         dedededededededededeej                 deej                 dMede-deee         def(diZQdde-dee         ded"edee         dedededededededededeej                 deej                 dMede-deee         def(djZRdde-dee         ded"edee         dedededededededededeej                 deej                 dMede-deee         def(dkZSdde-dee         ded"edee         dedededededededededeej                 deej                 dMede-deee         def(dlZTdde-dee         ded"edee         dedededededededededeej                 deej                 dMede-deee         def(dmZUdde-dee         ded"edee         dedededededededededeej                 deej                 dMede-deee         def(dnZVdde-dee         ded"edee         dedededededededededeej                 deej                 dMede-deee         def(doZWddeej                 ded"edee         dedededededededededeej                 deej                 dMedNedef$dpZXddeej                 ded"edee         dedededededededededeej                 deej                 dMedNedef$dqZYddeej                 ded"edee         dedededededededededeej                 deej                 dMedef"drZZddeej                 ded"edee         dedededededededededeej                 deej                 dMedef"dsZ[ddeej                 ded"edee         dedededededededededeej                 deej                 dMedNedef$dtZ\ddeej                 ded"edee         dedededededededededeej                 deej                 dMedNedef$duZ]ddvedwedefdxZ^ddeej                 d"edvedwedee         dedededededededededefdyZ_ddeej                 d"edvedwedee         dedededededededededefdzZ`dde5ej        ej        f         d"edefd{Zadde5ej        ej        f         d"edefd|Zbd}ecjd        defd~Zed$edefdZfd$edefdZgdd(edee         deej                 fdZhdd(edee         deej                 fdZidd(edee         deej                 fdZjddedee         deej                 fdZkddedee         deej                 fdZldd(edee         deej                 fdZmdd(edee         deej                 fdZndd(edee         deej                 fdZoddedee         deej                 fdZpddedee         deej                 fdZqdd(edee         d"edee         fdZrdd(edee         d"edee         fdZsdd(edee         d"edee         fdZtdedej        fdZudedej        fdZvdedej        fdZwdedej        fdZxdedej        fdZyddededee         dezee{f         fdZ|dde5ej        ej        f         de5ej        ej        f         dee         deezee{f                  fdZ}dde5ej        ej        f         de5ej        ej        f         dee         deezee{f                  fdZ~ddededee         dee         dIee         dJee         deezee{f                  fdZddGe!dHe!dee         dee         dIee         dJee         deezee{f                  fdZddededefdZdej        defdZdd(edee         dee         fdZddeej                 dej        fdZdefdeej                 dee{gef         defdZddeej                 dej        fdZdefdeej                 dee{gef         defdZddeej                 dedej        fdZddAefdeej                 dedee{gef         defdZddAefdeej                 dedee{gef         defdZdej        defdZdej        defdZddej        dee         dej        fdZddej        dee         dej        fdZdde5eeej        f         deej                 dee         dedee         f
dZdde5eeej        f         deej                 dee         dedee         f
dZddeej                 dedee         d3edef
dZddeej                 dedee         d3edef
dZddeej                 dedee         d3edef
dZddee         deej                 d3edefdZddee         dee         deej                 d3edef
dZddej        d"edefdZdde5eej        f         de5eej        f         dedee         dee         dee         dedee         defdĄZdde5eej        f         de5eej        f         dee         dee         dee         dedee         defdƄZdde5eej        f         de5eej        f         dee         dee         dee         dedee         defdǄZdde5eej        f         de5eej        f         dee         dee         dee         dedee         defdȄZeZeZeZeZdde5eej        f         de5eej        f         dedee         dee         dee         defd˄Zdde!de!de!dee         dee         dee         dee         defdЄZdS )TimeConvertToolsc                     t          t          d          rt          j                    S t          j                    }t          |d          r|                                }t          |d          r|j        n|j        S )Nget_localzone_nameunwrap_shimkey)hasattrtzlocalr   get_localzoner   r   zone)selftz_localzones     R/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/TimeConvert/convert.py__get_base_time_zonez%TimeConvertTools.__get_base_time_zone   su    7011 	0-///,..<// 	6'3355L#*<#?#?V|\EVV    Ntimezoneformatc                    |                                  | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        | j        | j        | j        d| _	        d| _
        d	| _        d| _        d| _        | j        | j        | j        d| _        | j        | j        d
| _        |p| j        | _        |p| j        | _        |p| j        | _        d| _        d| _        d S )Nz%Y-%m-%d %H:%M:%Sz%Y-%m-%dT%H:%M:%S.%fz%Y-%m-%dz%Wz%UISO)r         z%YW%Wz%YW%U)   
   i  i@B )%_TimeConvertTools__get_base_time_zoneBASE_TIME_ZONEDATETIME_FORMATDATETIME_ISOFORMATDATE_FORMATWEEK_FORMATWEEK_FORMAT_UWEEK_FORMAT_WWEEK_FORMAT_ISOMODE_WEEK_FORMATYEARWEEK_FORMATYEARWEEK_FORMAT_UYEARWEEK_FORMAT_WYEARWEEK_FORMAT_ISOMODE_yearweek_FORMAT
LEN_FORMAT	TIME_ZONETIME_FORMATTIME_ISOFORMATSECOND_MILLISECONDSECOND_MICROSECOND)r   r    r!   s      r   __init__zTimeConvertTools.__init__   s   "77992"8%  !!$!#!!
 !

  '!(!(#( %'%%
 %
! $ 
 
 "8T%8!9T%9$?(?")")r   returnc                     |p| j         S N)r8   )r   r    s     r   r    zTimeConvertTools.timezoneD   s     )4>)r   c                     |p| j         S r@   )r9   r   r!   s     r   r!   zTimeConvertTools.formatI       )))r   c                     |p| j         S r@   )r:   rB   s     r   	isoformatzTimeConvertTools.isoformatL   s    ,,,r   c                     |p| j         S r@   )r,   rB   s     r   date_formatzTimeConvertTools.date_formatO   rC   r   valuec                     |r|S t          |t          t          f          r'| j                            t          |                    n|S r@   )
isinstancestrbytesr7   getlen)r   rH   r!   s      r   value_formatzTimeConvertTools.value_formatR   sD     	M2<US%L2Q2Q]t""3u::...W]]r   tznamec                 T    t          j        |p|                     |                    S r@   )r
   gettzr    )r   r    rP   s      r   tzinfozTimeConvertTools.tzinfoW   s%     x9$--"9"9:::r   r   utc_dtyearsmonthsdayssecondsmicrosecondsmillisecondsminuteshoursweeksc                 l    |                      |p|                                 d||||||||	|
|          S )NTdtutcr    rU   rV   rW   rX   rY   rZ   r[   r\   r]   )several_time_comingbasic_utc_datetime)r   rT   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   s               r   __utc_datetimezTimeConvertTools.__utc_datetime_   st    ''6+NT5L5L5N5NTXcksx  BH  OS  ]d  s  NZ  dk  sx  @E'  F  F  	Fr   local_dtc                 l    |                      |p|                                 d||||||||	|
|          S )NFr_   )rb   basic_local_datetime)r   re   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   s               r   __local_datetimez!TimeConvertTools.__local_datetimeb   st    ''8+Rt7P7P7R7RX]hpx}  GM  TX  bi  xD  S_  ip  x}  EJ'  K  K  	Kr   Tr`   ra   c                 ^    |p+|r|                                  n|                     |          S )Nr    )rc   rg   )r   r`   ra   r    s       r   
__datetimezTimeConvertTools.__datetimee   s5    i3hd--///D<U<U_g<U<h<hir   c
           
      \    t          ||          t          j        |||||||	          z   S )N)rU   rV   )rW   rX   rY   rZ   r[   r\   r]   )r	   datetime	timedelta)
r   rU   rV   rW   rX   rY   rZ   r[   r\   r]   s
             r   __relativedeltaz TimeConvertTools.__relativedeltah   s^    58888;MSWah  xD  S_  ip  x}  EJ  <K  <K  <K  K  	Kr   msc                 4    |r|n|                      |          S r@   )remove_microsecondr   r`   rp   s      r   __remove_ms_or_notz#TimeConvertTools.__remove_ms_or_notk   s    8rrT44R888r   sbasec                 4    t          ||p| j        z            S r@   )intr<   )r   ru   rv   s      r   __seconds_to_otherz#TimeConvertTools.__seconds_to_othern   s    17 78999r   c                     t          j                     }t          j                            |          t          j                            |          z
  S r@   )timerm   fromtimestamputcfromtimestamp)r   now_timestamps     r   offsetzTimeConvertTools.offsets   s;    	 ..}==@Q@b@bcp@q@qqqr   stringc                     |sdS 	 t          j        ||                     |                     n# t          $ r Y dS w xY wdS )NFT)r{   strptimer!   
ValueErrorr   r   r!   s      r   validate_stringz TimeConvertTools.validate_stringy   s\     	5	M&$++f"5"56666 	 	 	55	ts   (/ 
==c                 R    t          |d          r|                    d          n|S )Nreplacer   )microsecond)r   r   r   r`   s     r   rr   z#TimeConvertTools.remove_microsecond   s*    ,3B	,B,BJrzzaz(((Jr   c                     |                      t          j                                                            t          j                  |          S )NrS   rp   )#_TimeConvertTools__remove_ms_or_notrm   utcnowr   r
   UTCr   rp   s     r   rc   z#TimeConvertTools.basic_utc_datetime   s@    &&x'8'?'?'A'A'I'IQSQW'I'X'X]_&```r   c                     |                      |                     |                                 |                     |                    |          S Nr   )r   $_TimeConvertTools__to_local_datetimerc   r    r   rp   r    s      r   rg   z%TimeConvertTools.basic_local_datetime   sJ     &&t'?'?@W@W@Y@Y[_[h[hiq[r[r's'sxz&{{{r   c                 ,    |j         t          j        k    S r@   )rS   r
   r   r   s     r   is_utc_datetimez TimeConvertTools.is_utc_datetime   s    yBF""r   local_tzc                     t          |j                  t          |dk    rdn&t          j        |                     |                              k    S )z
        Check whether local datetime or not.

        ``local_tz`` indicates local tzinfo.
            ``local_dt`` is ``None``: get_localzone from system.
            ``local_dt`` is ``-1``: local tzinfo is ``None``.
        N)rK   rS   r
   rR   r    )r   r`   r   s      r   is_local_datetimez"TimeConvertTools.is_local_datetime   sB    ( 29~~X^^TT$--X`JaJaAbAb!c!cccr   c                 L    t          j         |j        |j        |j                  S r@   )rm   yearmonthdayr   s     r   date_to_datetimez!TimeConvertTools.date_to_datetime   s     "(BF;;;r   c                    |                      |          r|S 	 |                     |          }n# t          $ r Y nw xY w|                     |          }|                    |          }|                    t          j                  S )Nr   )r   
make_naiver   rS   r   
astimezoner
   r   )r   r`   r    rS   re   s        r   __to_utc_datetimez"TimeConvertTools.__to_utc_datetime   s    ## 	I	$$BB 	 	 	D	X&&::V:,,""26***s   / 
<<c                 .   |                      |          }|                     |          }|j        s|                    |          S |                     ||          r|S |                    t          j                  }|                    |          S )N)rP   r   )r   )r    rS   r   r   r
   r   r   )r   r`   r    rP   rS   rT   s         r   __to_local_datetimez$TimeConvertTools.__to_local_datetime   s    x((F++y 	-::V:,,,!!"v!66 	I26**  (((r   idxdttypec                    t          |t          j                  r|}net          |t          j                  r|                     |          }n5t          |t          t
          f          r|                     ||          }nd S |dk    r|                     ||          }n|dk    r|                     ||          }|| 	                    |||p|||	|
|||	  	        z   S )Nra   rj   local	rU   rV   rW   rX   rY   rZ   r[   r\   r]   )
rJ   rm   dater   rK   rL   string_to_datetime"_TimeConvertTools__to_utc_datetimer    _TimeConvertTools__relativedelta)r   rH   r    r!   r   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r   r`   s                   r   to_datetimezTimeConvertTools.to_datetime   s   eX.// 	BBx}-- 	&&u--BBU|,, 	((77BB4U??''X'>>BBw))"x)@@BD((uV$+RU_f  vB  Q]  gn  v{  CH(  I  I  I  	Ir   c                 H    |                      |||||||||	|
|||d          S )Nra   r    r!   r   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r   r   r   rH   r    r!   r   rU   rV   rW   rX   rY   rZ   r[   r\   r]   s                 r   to_utc_datetimez TimeConvertTools.to_utc_datetime   sb    SX]flsw  BI  Xd  s  IP  X]  ej  sx  y  y  	yr   c                 H    |                      |||||||||	|
|||d          S )Nr   r   r   r   s                 r   to_local_datetimez"TimeConvertTools.to_local_datetime   sb    SX]flsw  BI  Xd  s  IP  X]  ej  sz  {  {  	{r   c                 X    |                      |                     d          |          S Nr   rW   r   r   several_days_agor   s     r   yesterday_utc_datetimez'TimeConvertTools.yesterday_utc_datetime   s,    &&t'<'<!'<'D'D&LLLr   c                 X    |                      |                     d          |          S r   r   several_days_comingr   s     r   tomorrow_utc_datetimez&TimeConvertTools.tomorrow_utc_datetime   s,    &&t'?'?Q'?'G'GB&OOOr   c                 \    |                      |                     d|d          |          S NFr   )ra   r    rW   r   r   r   s      r   yesterday_local_datetimez)TimeConvertTools.yesterday_local_datetime   s3    &&t'<'<QY`a'<'b'bgi&jjjr   c                 \    |                      |                     d|d          |          S r   r   r   s      r   tomorrow_local_datetimez(TimeConvertTools.tomorrow_local_datetime   s3    &&t'?'?ET\cd'?'e'ejl&mmmr   c                     |                      |                     |||          t          j        |          z
  |          S Nrj   r   r   r   _TimeConvertTools__datetimerm   rn   r   r`   ra   rp   r    rW   s         r   r   z!TimeConvertTools.several_days_ago   C    &&tr3'R'RU]UgmqUrUrUr'rwy&zzzr   c                     |                      |                     |||          t          j        |          z   |          S r   r   r   s         r   r   z$TimeConvertTools.several_days_coming   r   r   c                     |                      |                     |||          |                     |||||	|
|||	  	        z
  |          S Nrj   r   r   r   r   r   r   r`   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   s                 r   several_time_agoz!TimeConvertTools.several_time_ago       &&tr3'R'RUYUiUipu  E  LP  Za  p|  KW  ah  pu  }BUi  VC  VC  (C  HJ&  K  K  	Kr   c                     |                      |                     |||          |                     |||||	|
|||	  	        z   |          S r   r   r   s                 r   rb   z$TimeConvertTools.several_time_coming   r   r   c                     |p|}t          |t          t          f          r|                     ||          }|                     ||||||||	|
||||          S Nr`   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   )rJ   rK   rL   utc_string_to_utc_datetimerb   r   rH   r!   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   r`   s                   r   utc_datetimezTimeConvertTools.utc_datetime   s    ec5\** 	C33E6BBE''5cb8[`iovz  EL  [g  vB  LS  [`  hm'  n  n  	nr   Fc                     |p|}t          |t          t          f          r|                     ||          }|                     ||||||||	|
||||          S r   )rJ   rK   rL   string_to_local_datetimerb   r   s                   r   local_datetimezTimeConvertTools.local_datetime  s    ec5\** 	A11%@@E''5cb8[`iovz  EL  [g  vB  LS  [`  hm'  n  n  	nr   c                     t          |t          t          f          r|                     ||          }|                     |                     ||||||||	|
||||                    S NrH   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   )rJ   rK   rL   r   to_dater   r   rH   r!   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   s                  r   utc_datezTimeConvertTools.utc_date
  s    ec5\** 	C33E6BBE||D--EsrT\dirx  @D  NU  dp  K  U\  di  qv-  w  w  x  x  	xr   c                     t          |t          t          f          r|                     ||          }|                     |                     ||||||||	|
||||                    S r   )rJ   rK   rL   r   r   r   r   s                  r   
local_datezTimeConvertTools.local_date  s    ec5\** 	A11%@@E||D//eV^fktz  BF  PW  fr  AM  W^  fk  sx/  y  y  z  z  	zr   c                 *    |                                 S r@   )r   r   s     r   datetime_to_datez!TimeConvertTools.datetime_to_date  s    wwyyr   c                 @   t          |t          j                  r|                                }nRt          |t          j                  r|}n5t          |t          t          f          r|                     ||          }nd S ||                     |||p||          z   S )N)rU   rV   rW   r]   )rJ   rm   r   rK   rL   string_to_dater   )	r   rH   r!   r   rU   rV   rW   r]   r   s	            r   r   zTimeConvertTools.to_date  s    eX.// 	::<<DDx}-- 	DDU|,, 	&&uf55DD4d**vDKTW_d*eeeer   value1value2format1format2c                 j    |                      ||p|          |                      ||p|          k    S Nr!   )r   )r   r   r   r!   r   r   s         r   is_the_same_dayz TimeConvertTools.is_the_same_day$  s9    ||F7+<f|==f]d]nhnAoAooor   r$   isucmodec                 0   | j                             || j                  }|| j        k    r8t          j        |                     ||||||||||	|
||||||                    S t          j        |                     |||||||||	|
|||                    S N)rH   r!   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   re   rT   r   )ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   )	r6   rM   r5   r   
fromstring
utc_stringr   withdater   r   rH   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   re   rT   r   r   yearweek_formats                      r   utc_yearweekzTimeConvertTools.utc_yearweek)  s   377d>VWWd666?4??\_dfqy  BG  PV  ]a  kr  AM  \h  ry  AF  NS  ^f  ou  |@?  $A  $A  B  B  Beh^clry}  HO  ^j  yE  OV  ^c  kp  !q  !q  r  r  	rr   c                 N    |                      |||||||||	|
||||||d          S Nr$   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   re   rT   r   r   )r   r   rH   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   re   rT   r   s                    r   utc_isoyearweekz TimeConvertTools.utc_isoyearweek/  sw      CBQV_elp  {B  Q]  lx  BI  QV  ^c  nv  E  LP  WX   Y  Y  	Yr   c                 0   | j                             || j                  }|| j        k    r8t          j        |                     ||||||||||	|
||||||                    S t          j        |                     |||||||||	|
|||                    S r   )	r6   rM   r5   r   r   local_stringr   r   r   r   s                      r   local_yearweekzTimeConvertTools.local_yearweek2  s"   377d>VWWd666?4#4#45^afhs{  DI  RX  _c  mt  CO  ^j  t{  CH  PU  `h  qw  ~B#4  $C  $C  D  D  D32PX`ent{  JQ  `l  {G  QX  `e  mr  !s  !s  t  t  	tr   c                 N    |                      |||||||||	|
||||||d          S r   )r  r   s                    r   local_isoyearweekz"TimeConvertTools.local_isoyearweek8  sw    ""5cb8SXagnr  }D  S_  nz  DK  SX  `e  px  AG  NR  YZ"  [  [  	[r   c                 X    |                      |||||||||	|
|||||||          j        S Nr   )r   weekr   rH   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   re   rT   r   r   s                     r   utc_weekzTimeConvertTools.utc_week=  s    
   CBQV_elp  {B  Q]  lx  BI  QV  ^c  nv  E  LP  W[   \  \  a  	ar   c                 N    |                      |||||||||	|
||||||d          S r   )r	  r   s                    r   utc_isoweekzTimeConvertTools.utc_isoweekD  so    }}UXU[ahlv}  MY  ht  ~E  MR  Z_  jr  {A  HL  ST}  U  U  	Ur   c                 X    |                      |||||||||	|
|||||||          j        S r  )r  r  r  s                     r   
local_weekzTimeConvertTools.local_weekG  s    
 ""5cb8SXagnr  }D  S_  nz  DK  SX  `e  px  AG  NR  Y]"  ^  ^  c  	cr   c                 N    |                      |||||||||	|
||||||d          S r   )r  r   s                    r   local_isoweekzTimeConvertTools.local_isoweekN  so    u#"xu]cjnx  O[  jv  @G  OT  \a  lt  }C  JN  UV  W  W  	Wr   c                     |                      ||          }|sd S |dk    rt          d          t          j        |          |z   S )Nr   r$   z+to_week only support mode equals 3 nowadays)r   r   r   r   )r   rH   r   r   r!   r   s         r   to_weekzTimeConvertTools.to_weekQ  sR    ||E&|11 	4199JKKK%%++r   c                 4    |                      ||d|          S )Nr$   )r   r   r!   r  )r   rH   r   r!   s       r   
to_isoweekzTimeConvertTools.to_isoweekY  s    ||Es6|BBBr   c                 `    |                      ||          |                      ||          z
  S )N)r   r  )r   r   r   r   s       r   	weekdeltazTimeConvertTools.weekdelta\  s-    ||F|..f41P1PPPr   c                 X    |                      |          |                      |          z
  S r@   )r  )r   r   r   s      r   isoweekdeltazTimeConvertTools.isoweekdelta_  s%    v&&)@)@@@r   c                 6   |                      |          }	 |                    |          S # t          $ rb |                    |                    d                                                                                                        d          cY S w xY w)Nzunicode-escape)r!   strftimeUnicodeEncodeErrorencodedecode)r   r`   r!   s      r   datetime_to_unicode_stringz+TimeConvertTools.datetime_to_unicode_stringe  s    V$$	k;;v&&&! 	k 	k 	k;;v}}-=>>EEGGHHOOQQXXYijjjjj	ks   , A)BBc                     |r|                      ||          S |                    |                     |                    S r   )r  r  r!   )r   r`   r!   r   s       r   datetime_to_stringz#TimeConvertTools.datetime_to_stringo  sB     	F222f2EEE{{4;;v..///r   c                     |                      |                     |          |                     |          |          S Nr   r   )r   r   r!   r   r!   rp   r   s       r   yesterday_utc_stringz%TimeConvertTools.yesterday_utc_stringt  s<    &&t'B'Bb'B'I'I4;;W]K^K^ei&jjjr   c                     |                      |                     |          |                     |          |          S r"  )r   r   r!   r$  s       r   tomorrow_utc_stringz$TimeConvertTools.tomorrow_utc_stringw  s<    &&t'A'AR'A'H'H$++V\J]J]dh&iiir   c                     |                      |                     ||          |                     |          |          S N)rp   r    r#  )r   r   r!   r   r!   rp   r    r   s        r   yesterday_local_stringz'TimeConvertTools.yesterday_local_stringz  sB    &&t'D'DU]'D'^'^`d`k`klr`s`sz~&r   c                     |                      |                     ||          |                     |          |          S r)  )r   r   r!   r*  s        r   tomorrow_local_stringz&TimeConvertTools.tomorrow_local_string}  sB    &&t'C'CrT\'C']']_c_j_jkq_r_ry}&~~~r   c           	          |                      |                     |||||          |                     |          |          S N)r`   ra   rp   r    rW   r#  )r   r   r!   r   r`   r!   ra   rp   r    rW   r   s           r   several_days_ago_stringz(TimeConvertTools.several_days_ago_string  sc    &&t'<'<PR]elp'<'q'qsws~s~  @F  tG  tG  NR&  S  S  	Sr   c           	          |                      |                     |||||          |                     |          |          S r/  )r   r   r!   r0  s           r   several_days_coming_stringz+TimeConvertTools.several_days_coming_string  sk    &&t'?'?23SU`hos'?'t'tvz  wB  wB  CI  wJ  wJ  QU&  V  V  	Vr   c                     |                      |                     ||||||||	|
||||          |                     |          |          S Nr   r#  )r   r   r!   r   r`   r!   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   r   s                   r   several_time_ago_stringz(TimeConvertTools.several_time_ago_string  s    &&t'<'<PR]emr  |B  IM  W^  my  HT  ^e  mr  z'<  (@  (@  BF  BM  BM  NT  BU  BU  \`&  a  a  	ar   c                     |                      |                     ||||||||	|
||||          |                     |          |          S r5  )r   rb   r!   r6  s                   r   several_time_coming_stringz+TimeConvertTools.several_time_coming_string  s    &&t'?'?23SU`hpu  E  LP  Za  p|  KW  ah  pu  }B'?  (C  (C  EI  EP  EP  QW  EX  EX  _c&  d  d  	dr   rO   c                 @   |p|p|}|s|r|                      |          n|}t          |t          t          f          r|                     ||          }|                     |                      ||||||||	|
||||          |                     |          |          S )N)rH   r   r#  )r   rJ   rK   rL   r   r   r!   r   rH   r!   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   re   rT   r   r`   rO   final_dts                        r   r   zTimeConvertTools.utc_string  s   (B(&<D__4$$8$444W_he-- 	O66xNNH&&t'8'8xSUWbjrw  AG  NR  \c  r~  MY  cj  rw  D'8  (E  (E  GK  GR  GR  SY  GZ  GZ  ae&  f  f  	fr   c                 @   |p|p|}|s|r|                      |          n|}t          |t          t          f          r|                     ||          }|                     |                     ||||||||	|
||||          |                     |          |          S )N)r`   r   r#  )r   rJ   rK   rL   r   r   r   r!   r;  s                        r   r  zTimeConvertTools.local_string  s   *B*(>F_6_4++v+666W_he-- 	M44X|LLH&&t':':sWYdlty  CI  PT  ^e  t@  O[  el  ty  AF':  (G  (G  IM  IT  IT  U[  I\  I\  cg&  h  h  	hr   c                 z    |                      |p||                     |          |||||||	|
||||||||          S N)rH   r!   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   re   rT   r   rO   )r   r!   r   rH   r!   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   re   rT   r   r`   rO   s                       r   utc_datetime_stringz$TimeConvertTools.utc_datetime_string  s    U[bV9L9LRUZ\gow|  FL  SW  ah  wC  R^  ho  w|  DI  T\  ek  rv  EQ  R  R  	Rr   c                 z    |                      |p||                     |          |||||||	|
||||||||          S r?  )r  r!   r@  s                       r   local_datetime_stringz&TimeConvertTools.local_datetime_string  s      u{4;;v;N;NTW\^iqy~  HN  UY  cj  yE  T`  jq  y~  FK  V^  gm  tx  GS   T  T  	Tr   c                 z    |                      |p||                     |          |||||||	|
||||||||          S r?  r   rE   r@  s                       r   utc_isostringzTimeConvertTools.utc_isostring      U[b9O9OUX]_jrz  IO  VZ  dk  zF  Ua  kr  z  GL  W_  hn  uy  HT  U  U  	Ur   c                 z    |                      |p||                     |          |||||||	|
||||||||          S r?  r  rE   r@  s                       r   local_isostringz TimeConvertTools.local_isostring        u{4>>&;Q;QWZ_alt  }B  KQ  X\  fm  |H  Wc  mt  |A  IN  Ya  jp  w{  JV   W  W  	Wr   c                 z    |                      |p||                     |          |||||||	|
||||||||          S r?  rE  r@  s                       r   utc_datetime_isostringz'TimeConvertTools.utc_datetime_isostring  rG  r   c                 z    |                      |p||                     |          |||||||	|
||||||||          S r?  rI  r@  s                       r   local_datetime_isostringz)TimeConvertTools.local_datetime_isostring  rK  r   c                     |                      |p||                     |          |||||||	|
||||||||                     |p||                    S r?  )r   rG   rO   r@  s                       r   utc_date_stringz TimeConvertTools.utc_date_string  s    U[b9I9I&9Q9QWZ_alt  }B  KQ  X\  fm  |H  Wc  mt  |A  IN  Ya  jp  w{  JN  J[  J[  \a  \g  eg  iu  Jv  Jv  w  w  	wr   c                     |                      |p||                     |          |||||||	|
||||||||                     |p||                    S r?  )r  rG   rO   r@  s                       r   local_date_stringz"TimeConvertTools.local_date_string  s      u{4;K;KF;S;SY\acnv  D  MS  Z^  ho  ~J  Ye  ov  ~C  KP  [c  lr  y}  LP  L]  L]  ^c  ^i  gi  kw  Lx  Lx   y  y  	yr   c                 h    t          |                     |||||||||	|
|||||||                    S r  )rK   r   r   r`   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   re   rT   r   r   s                     r   utc_yearweek_stringz$TimeConvertTools.utc_yearweek_string  s    4$$RSR(RW`fmq  |C  R^  my  CJ  RW  _d  ow  @F  MQ  X\$  ]  ]  ^  ^  	^r   c                 h    t          |                     |||||||||	|
|||||||                    S r  )rK   r  rU  s                     r   local_yearweek_stringz&TimeConvertTools.local_yearweek_string  s    4&&rsrHTYbhos  ~E  T`  o{  EL  TY  af  qy  BH  OS  Z^&  _  _  `  `  	`r   c                 f    t          |                     |||||||||	|
||||||                    S N)ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   re   rT   r   )rK   r   r   r`   ra   rp   r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   re   rT   r   s                    r   utc_isoyearweek_stringz'TimeConvertTools.utc_isoyearweek_string  s~    4''XUZcipt  F  Ua  p|  FM  UZ  bg  rz  CI  PT'  U  U  V  V  	Vr   c                 f    t          |                     |||||||||	|
||||||                    S rZ  )rK   r  r[  s                    r   local_isoyearweek_stringz)TimeConvertTools.local_isoyearweek_string  s~    4))"#"xW\ekrv  AH  Wc  r~  HO  W\  di  t|  EK  RV)  W  W  X  X  	Xr   c                 h    t          |                     |||||||||	|
|||||||                    S r  )rK   r	  rU  s                     r   utc_week_stringz TimeConvertTools.utc_week_string  s}    4==he\bimw~  NZ  iu  F  NS  [`  ks  |B  IM  TX=  Y  Y  Z  Z  	Zr   c                 h    t          |                     |||||||||	|
|||||||                    S r  )rK   r  rU  s                     r   local_week_stringz"TimeConvertTools.local_week_string  s    4??232PU^dko  zA  P\  kw  AH  PU  ]b  mu  ~D  KO  VZ?  [  [  \  \  	\r   micromillic                 b    |r|                      |          S |r|                     |          S |S r@   )seconds_to_microsecondsseconds_to_milliseconds)r   ru   rc  rd  s       r   __micro_or_milliz!TimeConvertTools.__micro_or_milli  s?     	3//222 	3//222r   c                     |                      |                     |                     ||||||	|
||||          |          ||          S N)
r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   r   )rc  rd  )!_TimeConvertTools__micro_or_millidatetime_to_timestamp_TimeConvertTools__utc_datetime)r   rT   rp   rc  rd  r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   s                  r   utc_timestampzTimeConvertTools.utc_timestamp  s    $$T%?%?@S@STZemuz  DJ  QU  _f  uA  P\  fm  uz  BG@S  AH  AH  MO%?  &P  &P  X]  ej$  k  k  	kr   c                     |                      |                     |                     ||||||	|
||||          |          ||          S rj  )rk  rl  !_TimeConvertTools__local_datetime)r   re   rp   rc  rd  r    rU   rV   rW   rX   rY   rZ   r[   r\   r]   s                  r   local_timestampz TimeConvertTools.local_timestamp  s    $$T%?%?@U@UV^iqy~  HN  UY  cj  yE  T`  jq  y~  FK@U  AL  AL  QS%?  &T  &T  \a  in$  o  o  	or   c                 |    |                      |                                          }|s|S ||j        | j        z  z   S r@   )structime_to_timestamp	timetupler   r<   )r   r`   rp   stamps       r   rl  z&TimeConvertTools.datetime_to_timestamp  sA    
 ++BLLNN;; 	Lr~(????r   c                 0    |                      ||          S r   )rl  rs   s      r   date_to_timestampz"TimeConvertTools.date_to_timestamp  s    ))")444r   	structimec                 D    t          t          j        |                    S r@   )rx   r{   mktime)r   rx  s     r   rs  z'TimeConvertTools.structime_to_timestamp  s    4;y))***r   c                 :    |                      || j                  S N)rv   )#_TimeConvertTools__seconds_to_otherr<   r   ru   s     r   rf  z(TimeConvertTools.seconds_to_microseconds      &&qt/F&GGGr   c                 :    |                      || j                  S r|  )r}  r;   r~  s     r   rg  z(TimeConvertTools.seconds_to_milliseconds  r  r   c                     |                      ||          }|                     ||          sd S |                     ||                                          S r@   )rO   r   r   r   r   s      r   r   zTimeConvertTools.string_to_date  sV    ""6622##FF33 	4&&vv66;;===r   c                     |                      ||          }|                     ||          sd S |                     ||                                          S r@   )rO   r   string_to_utc_datetimer   r   s      r   string_to_utc_datez#TimeConvertTools.string_to_utc_date  sV    ""6622##FF33 	4**66::??AAAr   c                     |                      ||          }|                     ||          sd S |                     ||                                          S r@   )rO   r   r   r   r   s      r   string_to_local_datez%TimeConvertTools.string_to_local_date  sV    ""6622##FF33 	4,,VV<<AACCCr   r   c                     |                      ||          }|                     ||          sd S |                     ||                                          S r@   )rO   r   r   r   r   r   r!   s      r   utc_string_to_utc_datez'TimeConvertTools.utc_string_to_utc_date   sV    "":v66##J77 	4..z6BBGGIIIr   c                     |                      ||          }|                     ||          sd S |                     ||                                          S r@   )rO   r   utc_string_to_local_datetimer   r  s      r   utc_string_to_local_datez)TimeConvertTools.utc_string_to_local_date  sV    "":v66##J77 	400VDDIIKKKr   c                     |                      ||          }|                     ||          sd S t          j                            ||          S r@   )rO   r   rm   r   r   s      r   r   z#TimeConvertTools.string_to_datetime  sM    ""6622##FF33 	4 ))&&999r   c                     |                      ||          }|                     ||          sd S |                     |                     ||                    S r@   )rO   r   r   r   r   s      r   r  z'TimeConvertTools.string_to_utc_datetime  sX    ""6622##FF33 	4%%d&=&=ff&M&MNNNr   c                     |                      ||          }|                     ||          sd S |                     |                     ||                    S r@   )rO   r   r   r   r   s      r   r   z)TimeConvertTools.string_to_local_datetime  sX    ""6622##FF33 	4''(?(?(O(OPPPr   c                     |                      ||          }|                     ||          sd S |                     |                     ||                    |                                 z   S r@   )rO   r   r   r   r   r  s      r   r   z+TimeConvertTools.utc_string_to_utc_datetime   sj    "":v66##J77 	4%%d&=&=j&&Q&QRRUYU`U`UbUbbbr   c                     |                      ||          }|                     ||          sd S |                     |                     ||                    |                                 z   S r@   )rO   r   r   r   r   r  s      r   r  z-TimeConvertTools.utc_string_to_local_datetime&  sj    "":v66##J77 	4''(?(?
F(S(STTW[WbWbWdWdddr   c                 2    |                      |||          S r   )string_to_local_timestampr   r   r!   rp   s       r   string_to_timestampz$TimeConvertTools.string_to_timestamp.  s    --ff-DDDr   c                     |                      |          }|                     ||          sd S |                     |                     ||          |          S r   )r!   r   rl  r  r  s       r   string_to_utc_timestampz(TimeConvertTools.string_to_utc_timestamp1  sZ    V$$##FF33 	4))$*E*Eff*U*UZ\)]]]r   c                     |                      |          }|                     ||          sd S |                     |                     ||          |          S r   )r!   r   rl  r   r  s       r   r  z*TimeConvertTools.string_to_local_timestamp7  s[    V$$##FF33 	4))$*G*GPV*W*W\^)___r   ru  c                 @    t           j                             |          S r@   )rm   r|   r   ru  s     r   timestamp_to_datetimez&TimeConvertTools.timestamp_to_datetimeC  s     ..u555r   c                 R    |                      |                     |                    S r@   )r   r  r  s     r   timestamp_to_utc_datetimez*TimeConvertTools.timestamp_to_utc_datetimeF  s$    %%d&@&@&G&GHHHr   c                 ,    |                      |          S r@   )r  r  s     r   timestamp_to_local_datetimez,TimeConvertTools.timestamp_to_local_datetimeJ  s    ))%000r   c                 |    |                      |                     |          |                     d                    S )Nr   rj   )
make_awarer  r    r  s     r   utc_timestamp_to_utc_datetimez.TimeConvertTools.utc_timestamp_to_utc_datetimeM  s3    t99%@@4==Y^K_K_```r   c                 R    |                      |                     |                    S r@   )r   r  r  s     r   utc_timestamp_to_local_datetimez0TimeConvertTools.utc_timestamp_to_local_datetimeQ  s$    ''(B(B5(I(IJJJr   stamp1stamp2intervalc                     ||z
  }t          |          }|o||z  }|dz  }|dz  dz  }|dz  dz  }	|dz  }
|dz  }|||
|	||||t          t          |d                    |o||k    d
S )N<   i     Q i:	 r   )
signr]   rW   r\   r[   rX   total_secondsdeltacount_down_secondsr  )absmin)r   r  r  r  r  	abs_deltar  delta_secondsdelta_minutesdelta_hours
delta_daysdelta_weekss               r   timestamp_deltaz TimeConvertTools.timestamp_deltaX  s    JJ	/Ui/!B!R",4'",%'
6)  $$&"%c%mm"4"4 :Y(%:
 
 	
r   dt1dt2c                 |    |                      |                     |          |                     |          |          S r@   )r  rl  r   r  r  r  s       r   datetime_deltazTimeConvertTools.datetime_deltan  s8    ##D$>$>s$C$CTE_E_`cEdEdfnooor   c                 2    |                      |||          S N)r  )r  r  s       r   
date_deltazTimeConvertTools.date_deltaq  s    ""3h"???r   string1string2c                    |                      |          }|                     ||p|          r|                     ||p|          sd S |                     |                     ||p|          |                     ||p|          |          S r@   )r!   r   r  r  )r   r  r  r  r!   r   r   s          r   string_deltazTimeConvertTools.string_deltat  s    V$$$$Wg.?@@ 	$J^J^_fhohysyJzJz 	4##D$<$<WgFWQW$X$XZ^ZrZrsz  }D  }N  HN  [O  [O  QY  Z  Z  	Zr   c                    t          |t          j                  r|                     |          }ndt          |t          j                  r|                     |          }n4t          |t
          t          f          r|                     ||p|          }t          |t          j                  r|                     |          }ndt          |t          j                  r|                     |          }n4t          |t
          t          f          r|                     ||p|          }|                     |||          S r  )	rJ   rm   rl  r   rw  rK   rL   r  r  )r   r   r   r  r!   r   r   s          r   r  zTimeConvertTools.deltaz  s)   fh/00 	I//77FF.. 	I++F33FFe-- 	I--fg6GHHFfh/00 	I//77FF.. 	I++F33FFe-- 	I--fg6GHHF##FFX#FFFr   c                     t          t          |r|                                 n|                                 |z
  d                    S )Nr   )r  r  rn  rq  )r   ru  ra   s      r   timestamp_countdownz$TimeConvertTools.timestamp_countdown  sC    3O**,,,9M9M9O9OSXXZ[\\]]]r   c                 x    |                      |                     |                     |                              S r@   )r  rl  r   r   s     r   datetime_countdownz#TimeConvertTools.datetime_countdown  s3    ''(B(B4CYCYZ\C]C](^(^___r   c                     |                      |          }|                     ||          sd S |                     |                     ||                    S r@   )r!   r   r  r  r   s      r   string_countdownz!TimeConvertTools.string_countdown  sT    V$$##FF33 	4''(D(DVV(T(TUUUr   c                 Z    |                      |                              dddd          S Nr   )hourminutesecondr   )rm  r   )r   rT   s     r   utc_datetime_midnightz&TimeConvertTools.utc_datetime_midnight  s.    ##F++44!Aa]^4___r   seconds_cast_funcc                     |                      |          } ||                     ||                     |          z
                      S r@   )rm  r  r  )r   rT   r  s      r   utc_seconds_since_midnightz+TimeConvertTools.utc_seconds_since_midnight  sH    $$V,,  !3!3FT=W=WX^=_=_4_!`!`aaar   c                 Z    |                      |                              dddd          S r  )rp  r   )r   re   s     r   local_datetime_midnightz(TimeConvertTools.local_datetime_midnight  s/    %%h//88aRSab8cccr   c                     |                      |          } ||                     ||                     |          z
                      S r@   )rp  r  r  )r   re   r  s      r   local_seconds_since_midnightz-TimeConvertTools.local_seconds_since_midnight  sH    ((22  !3!3Ht?[?[\d?e?e4e!f!fgggr   c                 Z    |r|                      |          n|                     |          S r@   )r  r  )r   r`   ra   s      r   datetime_midnightz"TimeConvertTools.datetime_midnight  s/    14Zt))"---$:V:VWY:Z:ZZr   c                 l     ||r|                      |          n|                     |                    S r@   )r  r  r   r`   ra   r  s       r   seconds_since_midnightz'TimeConvertTools.seconds_since_midnight  s;      !v!@!@!D!D!DQUQrQrsuQvQvwwwr   c                 H     |d|                      ||          z
            S )Nr  r`   ra   )r  r  s       r   seconds_until_midnightz'TimeConvertTools.seconds_until_midnight  s,      )D)DPS)D)T)T!TUUUr   c                 .    |                                 duS )a?  
        Determine if a given datetime.datetime is aware.
        The concept is defined in Python's docs:
        https://docs.python.org/library/datetime.html#datetime.tzinfo
        Assuming value.tzinfo is either None or a proper datetime.tzinfo,
        value.utcoffset() implements the appropriate logic.
        N	utcoffsetr   rH   s     r   is_awarezTimeConvertTools.is_aware  s       ,,r   c                 .    |                                 du S )a?  
        Determine if a given datetime.datetime is naive.
        The concept is defined in Python's docs:
        https://docs.python.org/library/datetime.html#datetime.tzinfo
        Assuming value.tzinfo is either None or a proper datetime.tzinfo,
        value.utcoffset() implements the appropriate logic.
        Nr  r  s     r   is_naivezTimeConvertTools.is_naive  s       D((r   c                     |                      |          }|                     |          rt          d|z            |                    |          S )z:Make a naive datetime.datetime in a given time zone aware.z+make_aware expects a naive datetime, got %sr   )rS   r  r   r   r   rH   r    rS   s       r   r  zTimeConvertTools.make_aware  sP    X&&== 	TJURSSS}}F}+++r   c                     |                      |          }|                     |          rt          d          |                    |                              d          S )z;Make an aware datetime.datetime naive in a given time zone.z2make_naive() cannot be applied to a naive datetimeNr   )rS   r  r   r   r   r  s       r   r   zTimeConvertTools.make_naive  s\    X&&== 	SQRRR''//t/<<<r   base_dtc                    |p|                                  }|sd S t          |t          j                  r|r|n|                     |          |k     S t          |t          t
          f          r8|r|                     ||          n|                     ||          }|o||k     S t          |t                    r4| 	                    |r|n|                     |          d          }||k     S d S Nr   Tr   
rc   rJ   rm   r   rK   rL   r   r  rx   rl  r   rH   r  r!   ra   rT   ru  s          r   is_past_timezTimeConvertTools.is_past_time     6T4466 	4eX.// 	Q EEEd&>&>u&E&EPPec5\** 	/NQ  IT44U64JJJW[WrWrsx  BHWr  XI  XIF.fw..eS!! 	!..#/dww4C[C[\cCdCdim.nnE5= tr   c                    |p|                                  }|sd S t          |t          j                  r|r|n|                     |          |k    S t          |t          t
          f          r8|r|                     ||          n|                     ||          }|o||k    S t          |t                    r4| 	                    |r|n|                     |          d          }||k    S d S r  r  r  s          r   is_future_timezTimeConvertTools.is_future_time  r  r   c                 h    |                      |                     ||||          |          j        S )N)r`   ra   r    rU   r  )r   rb   r   r   r`   ra   r    r   s        r   r   zTimeConvertTools.year  s5    $":":bcT\dg":"h"hnqrrwwr   c                 h    |                      |                     ||||          |          j        S )N)r`   ra   r    rV   r  )r   rb   r   r  s        r   r   zTimeConvertTools.month	  s5    $":":bcT\eh":"i"iorssyyr   c                 h    |                      |                     ||||          |          j        S )N)r`   ra   r    rW   r  )r   rb   r   r  s        r   r   zTimeConvertTools.day  s5    $":":bcT\cf":"g"gmpqquur   r   c                 `    t          j        |p|                     ||                    rdndS )Nr   in  im  )calendarisleapr   )r   r   r`   r   s       r   days_of_yearzTimeConvertTools.days_of_year  s0    od&Ddiii.D.DEENss3Nr   r   c                     t          j        |p|                     ||          |p|                     ||                    d         S )Nr  )r   r   r   )r  
monthranger   r   )r   r   r   r`   r   s        r   days_of_monthzTimeConvertTools.days_of_month  sO    ")G231G1GQVQqZ^ZdZdegmpZdZqZqssstvwwr   tdc                 ~    |s|j         dz  |j        z   S |j         dz  |j        z   | j        z  |j        z   | j        z  S )zTotal seconds in the duration.r  )rW   rX   r<   rY   )r   r   rp   s      r   r  zTimeConvertTools.total_seconds  sH     	07U?RZ//52:-1HH2?Z^b^uuur   r   
start_dateend_dateinclude_endstart_date_formatend_date_formatreturn_typereturn_formatc	              #   R  K   t          |t                    r|                     ||p|p| j                  }t          |t                    r|                     ||p|p| j                  }|r|t	          j        d          z   }|dv r_t          t          ||z
  j                            D ]8}	| 	                    |t	          j        |	          z   |p|p| j                  V  9d S t          t          ||z
  j                            D ]}	|t	          j        |	          z   V  d S )Nr   r   rK   )
rJ   rK   r   r,   rm   rn   rangerx   rW   r   )
r   r  r  r  r!   r  r  r  r  ns
             r   
date_rangezTimeConvertTools.date_range  sb     j#&& 	j,,Z9J9hf9hX\XhiiJh$$ 	d**8_5b5bRVRbccH 	8("4Q"7"77H+++3: 5;<<==  --j8;Ma;P;P.PR_R}ciR}mqm}~~~~~~  3: 5;<<== 9 9 8#5a#8#8888889 9r   isoweekc              #     K   t          |t                    r|                     ||p|p| j                  }t          |t                    r|                     ||p|p| j                  }t	          j        |          }t	          j        |          }	|dv rt          t          |	|z
            dz             D ]}
||
z   }|                                | 	                    |
                                |p|p| j                  | 	                    |                                |p|p| j                  dV  d S t          t          |	|z
            dz             D ]	}
||
z   V  
d S )Nr
  r   )r  startend)rJ   rK   r   r,   r   r   r  rx   rE   r   mondaysunday)r   r  r  r!   r  r  r  r  
start_weekend_weekr  current_weeks               r   
week_rangezTimeConvertTools.week_range+  s     j#&& 	j,,Z9J9hf9hX\XhiiJh$$ 	d**8_5b5bRVRbccH%j11
#H--+++3x*4559::  )A~(2244!44\5H5H5J5JMLw]cLwgkgwxx22<3F3F3H3H-Ju[aJueieuvv       3x*4559:: % % 1n$$$$% %r   c              #     K   t          |t                    r|                     ||p|p| j                  }t          |t                    r|                     ||p|p| j                  }t	          j        |          }t	          j        |          }	|dv rt          t          |	|z
            dz             D ]`}
||
z   }t          |          |                     |j	        |p|p| j                  |                     |j
        |p|p| j                  dV  ad S t          t          |	|z
            dz             D ]	}
||
z   V  
d S )Nr
  r   )r   r  r  )rJ   rK   r   r,   r   	from_dater  rx   r   r  r  )r   r  r  r!   r  r  r  r  start_month	end_monthr  current_months               r   month_rangezTimeConvertTools.month_range>  s     j#&& 	j,,Z9J9hf9hX\XhiiJh$$ 	d**8_5b5bRVRbccHoj11OH--	+++3y;677!;<<   +a //!44]5M}Oz`fOzjnjz{{22=3I=Kv\bKvfjfvww       3y;677!;<< & &!Ao%%%%& &r   c              #     K   t          |t                    r|                     ||p|p| j                  }t          |t                    r|                     ||p|p| j                  }t	          j        |          }t	          j        |          }	|dv rt          t          |	|z
            dz             D ]e}
||
z   }|                                | 	                    |j
        |p|p| j                  | 	                    |j        |p|p| j                  dV  fd S t          t          |	|z
            dz             D ]	}
||
z   V  
d S )Nr
  r   )quarterr  r  )rJ   rK   r   r,   r   r  r  rx   rE   r   r  r  )r   r  r  r!   r  r  r  r  start_quarterend_quarterr  current_quarters               r   quarter_rangezTimeConvertTools.quarter_rangeQ  s     j#&& 	j,,Z9J9hf9hX\XhiiJh$$ 	d**8_5b5bRVRbccH)*55'11+++3{]:;;a?@@  "/!"3.88::!44_5OQ^Q|bhQ|lpl|}}22?3K]Mx^dMxhlhxyy       3{]:;;a?@@ ( (#a'''''( (r      
isoweekdayc                    t          |t                    r|                     ||p|p| j                  }t          |t                    r|                     ||p|p| j                  }|                     ||                              d          }|                                }|                                }	|	|k    r||cxk    r|	k    rn n|dz  }n||k    s|	|k    r|dz  }|S )Nr]   r   )rJ   rK   r   r,   r  rM   r%  )
r   r  r  r%  r!   r  r  r]   start_isoweekdayend_isoweekdays
             r   isoweekdaycountz TimeConvertTools.isoweekdaycounti  s   j#&& 	j,,Z9J9hf9hX\XhiiJh$$ 	d**8_5b5bRVRbccH##J99==gFF &0022!,,..---:?????????
:--:1M1M
r   start_value	end_valuestart_format
end_formatc                     |                      |||d          }|                      |||p|d          }|                      |||p|d          }|r|st          d          ||k    r||}}||cxk    o|k    nc S )Nra   )r    r!   r   z.`start_value` and `end_value` should not empty)r   r   )r   rH   r*  r+  r    r!   r,  r-  s           r   betweenzTimeConvertTools.between|  s      &QV WW&&{XfNdXdmr&ss$$Y&J^T^gl$mm	 	O) 	OMNNN""%.Ke0000y00000r   )NNr@   )NNr   r   r   r   r   r   r   r   r   )NTN)	r   r   r   r   r   r   r   r   r   )T)r   )TN)NNr   r   r   r   r   r   r   r   r   r   N)NNr   r   r   r   r   r   r   r   r   r   )NTTNr   )NTTNr   r   r   r   r   r   r   r   r   )NNTTNr   r   r   r   r   r   r   r   r   N)NNFTNr   r   r   r   r   r   r   r   r   N)NNTTNr   r   r   r   r   r   r   r   r   )NNFTNr   r   r   r   r   r   r   r   r   )Nr   r   r   r   r   )NNN)NTTNr   r   r   r   r   r   r   r   r   NNFr$   )NTTNr   r   r   r   r   r   r   r   r   NNF)NFTNr   r   r   r   r   r   r   r   r   NNFr$   )NFTNr   r   r   r   r   r   r   r   r   NNF)r   r$   N)r   N)r$   )NF)NTF)NTNF)NNTTNr   F)NNTTNr   r   r   r   r   r   r   r   r   F)NNTTNr   r   r   r   r   r   r   r   r   NNFNN)NNFTNr   r   r   r   r   r   r   r   r   NNFNN)FF)NFFFNr   r   r   r   r   r   r   r   r   )F)NNNN)NNT)NFNr   )NNr   )NNNr   )FNNNr   N)NNNr  N)NNNr   N)r$  NNN)__name__
__module____qualname__r(   r   rK   r=   r    r!   rE   rG   rO   rS   rm   rx   rm  rp  boolr   r   r   r}  r   r   rr   rc   rg   r   r   r   r   r   r   TimeAnyTr   r   r   r   r   r   r   r   r   r   rb   	TimeAnyNTr   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r  r  r  r  r  r  r   r%  r'  r+  r-  r1  r3  r7  r9  r   r  rA  rC  rF  rJ  rM  rO  rQ  rS  rV  rX  r\  r^  r`  rb  rk  rn  rq  rl  rw  r{   struct_timers  rf  rg  r   r  r  r  r  r   r  r   r   r  r  r  r  r  r  r  r  r  r   r   r  r  r  r  r  r  r  r  r  floatr   r   r  r  r  r  r  r  r  r  r  r   r  r  r   r   r   r  r  rn   r  r  r  r  r#  	daterange	weekranger  quarterranger)  r/   r   r   r   r      sK       W W W$* $*# $*x} $* $* $* $*L* *# *# * * * *
* *Xc] *c * * * *- - - - - - -* *(3- *3 * * * *^ ^(3- ^ ^Y\ ^ ^ ^ ^
; ;x} ;S ; ; ; ;F FXh.?%@ FS[\_S` Fps F  BE F  QT F  cf F  z} F  QT F  cf F  sv F  CF F  OW  O` F F F FK K(2C)D KW_`cWd Ktw K  FI K  UX K  gj K  ~A K  UX K  gj K  wz K  GJ K  S[  Sd K K K Kj jXh&78 jhtn jgopsgt j  AI  AR j j j jK KS Kc KS KWZ Knq K  FI K  X[ K  hk K  x{ K K K K9 9X%6 9HTN 9V^Vg 9 9 9 9: :C :s :3 : : : :
r r r r r c 8C= D    KX%6 K8;L K K K K
a aT aX5F a a a a| |t |hsm |W_Wh | | | | #("3 # # # # #d dH$5 d# dZ^ d d d d,<8= <X5F < < < <	+ 	+H$5 	+# 	+ZbZk 	+ 	+ 	+ 	+) )h&7 )8C= )\d\m ) ) ) )I I IXc] IS[\_S` Inq I  B I  PS I  _b I  qt I  HK I  _b I  qt I  AD I  QT I  bj  kn  bo I  {C  DL  DQ  {R I I I Iy yX y# yW_`cWd yru y  CF y  TW y  cf y  ux y  LO y  cf y  ux y  EH y  UX y  ai  ar y y y y{ {x {8C= {YabeYf {tw {  EH {  VY {  eh {  wz {  NQ {  eh {  wz {  GJ {  WZ {  ck  ct { { { {
M M M9J M M M MP P P8I P P P Pk k4 k(3- k[c[l k k k kn n$ n# nZbZk n n n n{ {8H,=#> {D {]a {t|  ~A  uB {  QT {  ]e  ]n { { { {{ {hx/@&A {t {`d {w  AD  xE {  TW {  `h  `q { { { {K K8H,=#> KD K]a Kt|  ~A  uB K  RU K  cf K  ru K  DG K  [^ K  ru K  DG K  TW K  dg K  px  pA K K K KK Khx/@&A Kt K`d Kw  AD  xE K  UX K  fi K  ux K  GJ K  ^a K  ux K  GJ K  WZ K  gj K  s{  sD K K K Kn n) nHSM nW[ nhl n  @H  IL  @M n  ]` n  nq n  }@ n  OR n  fi n  }@ n  OR n  _b n  or n  |E n  QY  Qb n n n nn nI nhsm nY] nko n  CK  LO  CP n  `c n  qt n  @C n  RU n  il n  @C n  RU n  be n  ru n  H n  T\  Te n n n nx xi x xSW xdh x  |D  EH  |I x  Y\ x  jm x  y| x  KN x  be x  y| x  KN x  [^ x  kn x  w  wD x x x x
z z	 z(3- zUY zgk z  G  HK  L z  \_ z  mp z  | z  NQ z  eh z  | z  NQ z  ^a z  nq z  zB  zG z z z z
8#4     	f 	fX 	fx} 	f# 	fZ] 	fkn 	fz} 	f  KN 	f  W_  `h  `m  Wn 	f 	f 	f 	fp ph p p(SV- piqruiv p  IQ  RU  IV p  bf p p p p
r r%(98=$(N"O r]a rnr r  FN  OR  FS r  cf r  tw r  CF r  UX r  lo r  CF r  UX r  eh r  ux r  HP  QY  Qb  Hc r  t|  }E  }N  tO r  ^b r  ru r  ~C  DH  JQ  DQ  ~R r r r rY YU8+<hmT+Q%R Y`d Yqu Y  IQ  RU  IV Y  fi Y  wz Y  FI Y  X[ Y  or Y  FI Y  X[ Y  hk Y  x{ Y  KS  T\  Te  Kf Y  w  @H  @Q  wR Y  ae Y  ry Y Y Y Yt tE(*;X]D*P$Q t_c tqu t  IQ  RU  IV t  fi t  wz t  FI t  X[ t  or t  FI t  X[ t  hk t  x{ t  KS  T\  Te  Kf t  w  @H  @Q  wR t  ae t  ux t  AF  GK  MT  GT  AU t t t t[ [uX->t-S'T [bf [tx [  LT  UX  LY [  il [  z} [  IL [  [^ [  ru [  IL [  [^ [  kn [  {~ [  NV  W_  Wh  Ni [  zB  CK  CT  zU [  dh [  u| [ [ [ [
a aeH$5x}d$JK aY] ajn a  BJ  KN  BO a  _b a  ps a  B a  QT a  hk a  B a  QT a  ad a  qt a  DL  MU  M^  D_ a  px  yA  yJ  pK a  Z^ a  nq a  z} a a a aU Ux'8(-'M!N U\` Umq U  EM  NQ  ER U  be U  sv U  BE U  TW U  kn U  BE U  TW U  dg U  tw U  GO  PX  Pa  Gb U  s{  |D  |M  sN U  ]a U  nq U U U Uc ch&7&L M c[_ cmq c  EM  NQ  ER c  be c  sv c  BE c  TW c  kn c  BE c  TW c  dg c  tw c  GO  PX  Pa  Gb c  s{  |D  |M  sN c  ]a c  qt c  }@ c c c cW W5):HM4)O#P W^b Wpt W  HP  QT  HU W  eh W  vy W  EH W  WZ W  nq W  EH W  WZ W  gj W  wz W  JR  S[  Sd  Je W  v~  G  P  vQ W  `d W  qt W W W W, ,X ,C ,3 ,HUXM ,emnuev , , , ,C C Cs C CYabiYj C C C CQ Q Q( Q# Qc Q Q Q QA8 AX A# A A A Ak kX-> kQT kad k k k k0 0X%6 0 0\` 0mp 0 0 0 0
k k8C= kT kX\ kil k k k kj j(3- jD jW[ jhk j j j j@ @Xc] @t @^fgj^k @z~ @  LO @ @ @ @ HSM d ]efi]j y}   KN    S S(83D*E SV^_bVc Squ S  CG S  Zb  cf  Zg S  vy S  EI S  VY S S S SV VXh6G-H VYabeYf Vtx V  FJ V  ]e  fi  ]j V  y| V  HL V  Y\ V V V Va a(83D*E aV^_bVc aqu a  CG a  Zb  cf  Zg a  wz a  HK a  WZ a  il a  @C a  WZ a  il a  y| a  IL a  X\ a  il a a a ad dXh6G-H dYabeYf dtx d  FJ d  ]e  fi  ]j d  z} d  KN d  Z] d  lo d  CF d  Z] d  lo d  | d  LO d  [_ d  lo d d d df f	 f(3- fUY ffj f  ~F  GJ  ~K f  [^ f  lo f  {~ f  MP f  dg f  {~ f  MP f  ]` f  mp f  @H  IQ  IZ  @[ f  lt  u}  uF  lG f  VZ f  hq f  HP  QT  HU f  ad f f f fh h) hHSM hW[ him h  AI  JM  AN h  ^a h  or h  ~A h  PS h  gj h  ~A h  PS h  `c h  ps h  CK  LT  L]  C^ h  ow  x@  xI  oJ h  Y] h  kt h  KS  TW  KX h  dg h h h hR R R8C= R^b Ros R  GO  PS  GT R  dg R  ux R  DG R  VY R  mp R  DG R  VY R  fi R  vy R  IQ  RZ  Rc  Id R  u}  ~F  ~O  uP R  _c R  qz R  QY  Z]  Q^ R  jm R R R RT T9 TXc] T`d Trv T  JR  SV  JW T  gj T  x{ T  GJ T  Y\ T  ps T  GJ T  Y\ T  il T  y| T  LT  U]  Uf  Lg T  x@  AI  AR  xS T  bf T  t} T  T\  ]`  Ta T  mp T T T TU U9 UXc] UX\ Uim U  AI  JM  AN U  ^a U  or U  ~A U  PS U  gj U  ~A U  PS U  `c U  ps U  CK  LT  L]  C^ U  ow  x@  xI  oJ U  Y] U  kt U  KS  TW  KX U  dg U U U UW WY Wx} WZ^ Wlp W  DL  MP  DQ W  ad W  ru W  AD W  SV W  jm W  AD W  SV W  cf W  sv W  FN  OW  O`  Fa W  rz  {C  {L  rM W  \` W  nw W  NV  WZ  N[ W  gj W W W WU UI Uhsm Uae Urv U  JR  SV  JW U  gj U  x{ U  GJ U  Y\ U  ps U  GJ U  Y\ U  il U  y| U  LT  U]  Uf  Lg U  x@  AI  AR  xS U  bf U  t} U  T\  ]`  Ta U  mp U U U UW Wi WQT Wcg Wuy W  MU  VY  MZ W  jm W  {~ W  JM W  \_ W  sv W  JM W  \_ W  lo W  | W  OW  X`  Xi  Oj W  {C  DL  DU  {V W  ei W  w@ W  W_  `c  Wd W  ps W W W Ww wY wx} wZ^ wko w  CK  LO  CP w  `c w  qt w  @C w  RU w  il w  @C w  RU w  be w  ru w  EM  NV  N_  E` w  qy  zB  zK  qL w  [_ w  mv w  MU  VY  MZ w  fi w w w wy yy y# y\` ynr y  FN  OR  FS y  cf y  tw y  CF y  UX y  lo y  CF y  UX y  eh y  ux y  HP  QY  Qb  Hc y  t|  }E  }N  tO y  ^b y  py y  PX  Y\  P] y  il y y y y^ ^hx/@&A ^t ^`d ^w  AD  xE ^  UX ^  fi ^  ux ^  GJ ^  ^a ^  ux ^  GJ ^  WZ ^  gj ^  zB  CK  CT  zU ^  fn  ow  o@  fA ^  PT ^  dg ^  ps ^ ^ ^ ^` `1B(C `QU `cg `  {C  DG  {H `  X[ `  il `  x{ `  JM `  ad `  x{ `  JM `  Z] `  jm `  }E  FN  FW  }X `  iq  rz  rC  iD `  SW `  gj `  sv ` ` ` `V V(2C)D VRV Vcg V  {C  DG  {H V  X[ V  il V  x{ V  JM V  ad V  x{ V  JM V  Z] V  jm V  }E  FN  FW  }X V  iq  rz  rC  iD V  SW V  dg V V V VX X8H4E+F XTX Xfj X  ~F  GJ  ~K X  [^ X  lo X  {~ X  MP X  dg X  {~ X  MP X  ]` X  mp X  @H  IQ  IZ  @[ X  lt  u}  uF  lG X  VZ X  gj X X X XZ Z(8+<"= Z4 Z\` Zs{|  tA Z  QT Z  be Z  qt Z  CF Z  Z] Z  qt Z  CF Z  SV Z  cf Z  v~  G  P  vQ Z  bj  ks  k|  b} Z  LP Z  `c Z  lo Z Z Z Z\ \HX->$? \T \_c \v~  @C  wD \  TW \  eh \  tw \  FI \  ]` \  tw \  FI \  VY \  fi \  yA  BJ  BS  yT \  em  nv  n  e@ \  OS \  cf \  or \ \ \ \
  d s    k kHX->$? kD kae kvz k  OW  X[  O\ k  lo k  }@ k  LO k  ^a k  ux k  LO k  ^a k  nq k  ~A k  JM k k k ko o1B(C oPT oei oz~ o  S[  \_  S` o  ps o  AD o  PS o  be o  y| o  PS o  be o  ru o  BE o  NQ o o o o@ @h.?.N(O @UY @fi @ @ @ @5 5E(*;X]*J$K 5QU 5be 5 5 5 5+0@ +S + + + +H H H H H HH H H H H H
> >S >(3- >8T\TaKb > > > >B B Bhsm BxX`XeOf B B B BD D3 D DQYZbZgQh D D D DJ J Jhsm JW_`h`mWn J J J JL L3 L LYabjboYp L L L L: : :hsm :xX`XiOj : : : :O OS O(3- OS[\d\mSn O O O OQ Qs QHSM QU]^f^oUp Q Q Q Qc cS c(3- c[cdldu[v c c c ce es eHSM e]efnfw]x e e e eE E# Ex} EQU Ebjknbo E E E E^ ^c ^8C= ^UY ^fnorfs ^ ^ ^ ^` ` `Xc] `W[ `hpqthu ` ` ` `63 683D 6 6 6 6Is Ix7H I I I I1 19J 1 1 1 1a3 a8;L a a a aKS KX=N K K K K
 
c 
3 
(3- 
[_`ceh`h[i 
 
 
 
,p p%(98=(H"I pPUV^VgiqivVvPw p  DL  MP  DQ p  ]e  fj  kn  ps  ks  ft  ]u p p p p@ @eH$5x}$DE @ERZRcemerRrLs @  @H  IL  @M @  Ya  bf  gj  lo  go  bp  Yq @ @ @ @Z ZC Z# Z# Z_ghk_l Z  G  HK  L Z  ^f  gj  ^k Z  w  @D  EH  JM  EM  @N  wO Z Z Z ZG GH Gh G(3- G`hil`m G  @H  IL  @M G  _g  hk  _l G  x@  AE  FI  KN  FN  AO  xP G G G G&^ ^ ^4 ^3 ^ ^ ^ ^`X%6 `3 ` ` ` `V Vs VHSM VXVY] V V V V` `HX5F,G `S[Sd ` ` ` ` PT  ~C b b(:K1L bhpruqvxyqyhz b  HI b b b bd d9J0K dW_Wh d d d d TX  BG h hXh>O5P hltvyuz|}u}l~ h  LM h h h h[ [HX->$? [T [^f^o [ [ [ [ HLY^  IN x x(2C)D xRV xs{  ~A  }B  DE  }E  tF x  ST x x x x HLY^  IN V V(2C)D VRV Vs{  ~A  }B  DE  }E  tF V  ST V V V V-h/ -D - - - -)h/ )D ) ) ) ), , 1 ,Xc] ,V^Vg , , , ,= = 1 =Xc] =V^Vg = = = = %S(2C(C"D xX`XiOj   |D  EH  |I   W[   go  pt  gu    & E#sH4E*E$F QYZbZkQl   ~F  GJ  ~K   Y]   iq  rv  iw    *x xx 12 x xX`adXe xsv x  @C x x x xz z!23 z zYabeYf ztw z  AD z z z zv vhx01 vt vW_`cWd vru v  B v v v vO O# O8HDU;V Odg Ops O O O Ox x(3- xx} xYabjbsYt x  CF x  OR x x x x
v v 2 v v v v v v9 9U3+=%> 9%PSU]UbPbJc 9rv 9  IQ  RU  IV 9  rz  {~  r 9  Ya  be  Yf 9  | 9  Ya  be  Yf 9  rz 9 9 9 9% %U3+=%> %%PSU]UbPbJc %muvymz %  W_  `c  Wd %  ~F  GJ  ~K %  ad %  AI  JM  AN %  Zb % % % %&& &eC,>&? &5QTV^VcQcKd &nvwzn{ &  X`  ad  Xe &  G  HK  L &  be &  G  HK  L &  X` & & & &&( (c8=.@(A (USVX`XeSeMf (pxy|p} (  Zb  cf  Zg (  AI  JM  AN (  dg (  AI  JM  AN (  Zb ( ( ( (& IIJ L %X]0B*C uUXZbZgUgOh vy   HP  QT  HU   qy  z}  q~   X`  ad  Xe   qt    &1 1X 1H 1 1]efi]j 1  |D  EH  |I 1  `h  il  `m 1  BJ  KN  BO 1  [_ 1 1 1 1 1 1r   r   )"r  rm   r{   typingr   r   r   r   r   r   r   dateutil.relativedeltar	   dateutil.tzr
   r  r   r   r   r  r   r  r   r   r   rK   rL   r4  r5  objectr   TCtcTimeConvertr;  r   r   <module>rC     sW      @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @  0 0 0 0 0 0                               GCLL"HM3=>(#X]CDE	r1 r1 r1 r1 r1v r1 r1 r1j )(** * *R+++r   