o
    _oiL"                     @  sd  d dl mZ d dl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 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 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 d dlmZ G dd deZd8ddZd8ddZd9d"d#Zd:d$d%Zd;d*d+Z d<d/d0Z!d9d1d2Z"d=d6d7Z#dS )>    )annotationsN)
NamedTuple)castDAY_OF_WEEK_TABLE)DAYS_PER_L_YEAR)DAYS_PER_MONTHS)DAYS_PER_N_YEAR)
EPOCH_YEAR)MONTHS_OFFSETS)SECS_PER_4_YEARS)SECS_PER_100_YEARS)SECS_PER_400_YEARS)SECS_PER_DAY)SECS_PER_HOUR)SECS_PER_MIN)SECS_PER_YEAR)TM_DECEMBER)
TM_JANUARY)Timezone)zoneinfoc                   @  sX   e Zd ZU ded< ded< ded< ded< ded< ded< ded< ded	< dddZdS )PreciseDiffintyearsmonthsdayshoursminutessecondsmicroseconds
total_daysreturnstrc                 C  s<   | j  d| j d| j d| j d| j d| j d| j dS )Nz years z months z days z hours z	 minutes z	 seconds z microseconds)r   r   r   r   r   r   r   )self r$   Y/var/www/html/kuke-dev/django-kuke/venv/lib/python3.10/site-packages/pendulum/_helpers.py__repr__&   s   zPreciseDiff.__repr__N)r!   r"   )__name__
__module____qualname____annotations__r&   r$   r$   r$   r%   r      s   
 r   yearr   r!   boolc                 C  s$   | d dko| d dkp| d dkS )N   r   d     r$   r+   r$   r$   r%   is_leap2   s   $r1   c                 C  s.   d
dd}|| d dkp|| d d d	kS )Nyr   r!   c                 S  s   | | d  | d  | d  S )Nr-   r.   r/   r$   )r2   r$   r$   r%   p7   s   zis_long_year.<locals>.p   r-         )r2   r   r!   r   r$   )r+   r3   r$   r$   r%   is_long_year6   s   
$r7   monthdayc                 C  sL   |dk r| d8 } | | d  | d  | d  t |d   | d }|s$d}|S )Nr6   r5   r-   r.   r/   r4   r   )r+   r8   r9   wr$   r$   r%   week_day=   s$   
	r;   c                 C  s   t | rtS tS )N)r1   r   r	   r0   r$   r$   r%   days_in_yearP   s   r<   	unix_time
utc_offsetr   (tuple[int, int, int, int, int, int, int]c                 C  s  t }t| }|dkr|dt 8 }|d7 }n
|dt 7 }|d8 }||7 }|d|t  7 }|t; }|dk r<|t7 }|d8 }d}t| }||krX||8 }|d7 }d}t| }||ksFt| }||krr||8 }|d	7 }d}t| }||ks`t| }||kr||8 }|d7 }d}t| }||ksztd }	|t d }
|t; }|	t	d krt
| |	 }|
|kr|
|8 }
n
|	d8 }	|	t	d kst|t\}}t|t\}}||	|
||||fS )
zY
    Returns a UNIX time as a broken-down time
    for a particular transition type.
    r   i*     i ir  r/   r5   r.   r-   )r
   mathfloorr   r   r   r   r   r   r   r   divmodr   r   )r=   r>   r   r+   r   Z	leap_yearZsec_per_100yearsZsec_per_4yearsZsec_per_yearr8   r9   Zmonth_offsethourminutesecondr$   r$   r%   
local_timeW   s`   

	rG   d1!datetime.datetime | datetime.dated2c              
   C  s(  d}| |krt ddddddddS t| tjr| jnd}t|tjr%|jnd}|du r/|dus7|du r;|dur;td| |krF|| } }d}d}d}d}d}d}	t|j|j|jt| j| j| j }
d}d}d}|r||r|t	|}t	|}||ko{|du}t|tjrt| tjr|r|
dkr| 
 }|
 }|r| | } |r|| }|j| j }|j| j }|j| j }|j| j }	n|j}|j}|j}|j}	|	dk r|	d7 }	|d8 }|dk r|d7 }|d8 }|dk r|d7 }|d8 }|dk r|d	7 }|d8 }|j| j }|j| j }||j| j 7 }|dk rl|j}|j}|dkr"d
}|d8 }n|d8 }tt|}t| | }ttt|j |j }||| k rV|| jk rQ|| j7 }n||7 }n||| krdd}|d7 }n||7 }|d8 }|dk ry|d
7 }|d8 }t || || || || || || ||	 ||
 S )z
    Calculate a precise difference between two datetimes.

    :param d1: The first datetime
    :param d2: The second datetime
    r5   r   Nz=Comparison between naive and aware datetimes is not supportedFi@B <         )r   
isinstancedatetimetzinfo
ValueError_day_numberr+   r8   r9   _get_tzinfo_name	utcoffsetrD   rE   rF   microsecondr   r1   r   )rH   rJ   signZtzinfo1Ztzinfo2Zd_diffZ	hour_diffZmin_diffZsec_diffZmic_diffr    Z
in_same_tzZtz1Ztz2Zoffset1Zoffset2Zy_diffZm_diffr+   r8   ZleapZdays_in_last_monthZdays_in_monthr$   r$   r%   precise_diff   s   	






rX   c                 C  sP   |d d }| |d  } d|  | d  | d  | d  |d d	 d  |d
  S )N	   rN   
   im  r-   r.   r/   i2     r5   r$   )r+   r8   r9   r$   r$   r%   rS   3  s   rS   rQ   datetime.tzinfo | None
str | Nonec                 C  sN   | d u rd S t | drttj| jS t | drtt| jS t | dr%| jS d S )Nkeynamezone)hasattrr   r   ZZoneInfor^   r   r_   r`   )rQ   r$   r$   r%   rT   A  s   


rT   )r+   r   r!   r,   )r+   r   r8   r   r9   r   r!   r   )r+   r   r!   r   )r=   r   r>   r   r   r   r!   r?   )rH   rI   rJ   rI   r!   r   )rQ   r\   r!   r]   )$
__future__r   rP   rA   typingr   r   Zpendulum.constantsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Zpendulum.tz.timezoner   Zpendulum.utils._compatr   r   r1   r7   r;   r<   rG   rX   rS   rT   r$   r$   r$   r%   <module>   s@    





E 
