o
    ޭh\"                     @  sp  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 erd dl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)TYPE_CHECKING)
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)Timezonec                   @  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$   V/var/www/html/stock_analysis/be/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_leap7   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%   p<   s   zis_long_year.<locals>.p   r-         )r2   r   r!   r   r$   )r+   r3   r$   r$   r%   is_long_year;   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_dayB   s$   
	r;   c                 C  s   t | rtS tS )N)r1   r   r
   r0   r$   r$   r%   days_in_yearU   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   	leap_yearsec_per_100yearssec_per_4yearssec_per_yearr8   r9   month_offsethourminutesecondr$   r$   r%   
local_time\   s`   

	rL   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	utcoffsetrI   rJ   rK   microsecondr   r1   r	   )rM   rO   signtzinfo1tzinfo2d_diff	hour_diffmin_diffsec_diffmic_diffr    
in_same_tztz1tz2offset1offset2y_diffm_diffr+   r8   leapdays_in_last_monthdays_in_monthr$   r$   r%   precise_diff   s   	






rn   c                 C  sP   |d d }| |d  } d|  | d  | d  | d  |d d	 d  |d
  S )N	   rS   
   im  r-   r.   r/   i2     r5   r$   )r+   r8   r9   r$   r$   r%   rX   5  s   rX   rV   datetime.tzinfo | None
str | Nonec                 C  sL   | d u rd S t | drtd| jS t | drtd| jS t | dr$| jS d S )Nkeyzzoneinfo.ZoneInfonamer   zone)hasattrr   rt   ru   rv   )rV   r$   r$   r%   rY   C  s   


rY   )r+   r   r!   r,   )r+   r   r8   r   r9   r   r!   r   )r+   r   r!   r   )r=   r   r>   r   r   r   r!   r?   )rM   rN   rO   rN   r!   r   )rV   rr   r!   rs   )$
__future__r   rU   rA   typingr   r   r   pendulum.constantsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   zoneinfopendulum.tz.timezoner   r   r1   r7   r;   r<   rL   rn   rX   rY   r$   r$   r$   r%   <module>   sD    





E 
