
    h4                        d dl 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	 d d	lm
Z
 d d
lmZ d dlZd dlmZ d dlmZ d dlmZ erd dlmZ d dlmZ d dlmZ d dlmZ  G d de      Zy)    )annotationsN)date)datetime)	timedelta)TYPE_CHECKING)Iterator)Union)cast)overload)MONTHS_PER_YEAR)Duration)precise_diff)Self)SupportsIndex)PreciseDiffLocalec                      e Zd ZdZe	 d.	 	 	 	 	 	 	 d/d       Ze	 d.	 	 	 	 	 	 	 d0d       Z	 d.	 	 	 	 	 	 	 d1 fdZ	 d.	 	 	 	 	 	 	 d2 fdZed3d       Zed3d       Z	ed3d       Z
ed3d	       Zed3d
       Zed3d       Zed3d       Zed4d       Zed4d       Zd3dZd3dZd3dZd3dZd5d6dZ	 d7	 	 	 	 	 d8dZd9dZd:dZ	 	 	 	 d;dZd<dZeZd<dZd=dZd>dZeZed?d       Z ed@d       Z dAdZ e Z!edBd       Z"edCd        Z"dDd!Z"d<d"Z#dEd#Z$d=d$Z%dFd%Z&dFd&Z'd?d'Z(	 dG	 	 	 dHd(Z)	 	 dId)Z*	 	 	 	 dJd*Z+d3d+Z,dKd,Z-dKd-Z. xZ/S )LIntervalz4
    An interval of time between two datetimes.
    c                     y N clsstartendabsolutes       \/var/www/html/retail-simulation-api/retail/lib/python3.12/site-packages/pendulum/interval.py__new__zInterval.__new__"        	    c                     y r   r   r   s       r   r   zInterval.__new__+   r    r!   c                   t        |t              rt        |t              r t        |t              st        |t              rt        d      t        |t              rKt        |t              r;|j                  |j                  |j                  |j                  t	        d      |r	||kD  r||}}|}|}t        |t
        j                        rot        |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  	      }nEt        |t
        j                        r+t!        |j                  |j                  |j                        }t        |t
        j                        rot        |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  	      }nEt        |t
        j                        r+t!        |j                  |j                  |j                        }t        |t              rt        |t              r|j                  |j                  u r|j                  At#        t$        t#        t        |      j'                               }||z
  j)                  d       }t        |t              r?|j                  3t#        t$        |j'                               }||z
  j)                  d       }||z
  }t*        | Y  | |j/                               S )Nz9Both start and end of an Interval must have the same typez5can't compare offset-naive and offset-aware datetimes)tzinfofoldr$   seconds)
isinstancer   
ValueErrorr$   	TypeErrorpendulumDateTimeyearmonthdayhourminutesecondmicrosecondr%   Dater   r
   r   	utcoffsetreplacesuperr   total_seconds)	r   r   r   r   _start_endoffsetdelta	__class__s	           r   r   zInterval.__new__4   sq    uh'sH-eX.3)K 
 uh'3)$JJ*<<+JJ& STTCeX../

		

!!||ZZ
F x}}-%**ekk599=Fc8,,-		



zzXX
D X]]+#))SWW5D
 vx(4*,}}(ih)>)H)H)JK 6/22$2?#x(T[[-Di9v..d.;&=wsE,?,?,ABBr!   c           
     ,   t         |           t        |t        j                        s^t        |t
              rt        j                  |      }n5t        j                  |j                  |j                  |j                        }|}nt        |t        j                        rdt        |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                         }n+t        |j                  |j                  |j                        }t        |t        j                        s^t        |t
              rt        j                  |      }n5t        j                  |j                  |j                  |j                        }|}nt        |t        j                        rdt        |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                         }n+t        |j                  |j                  |j                        }d| _        ||kD  rd| _        |r||}}||}}|| _        || _        || _        t+        ||      | _        y )Nr&   FT)r8   __init__r)   r,   r5   r   instancer   r.   r/   r0   r-   r1   r2   r3   r4   r$   _invert	_absoluter:   r;   r   _delta)selfr   r   r   r:   r;   r>   s         r   r@   zInterval.__init__   s    	 %/%* ))%0 ejj%++uyyIF%!2!23!JJKKIIJJLLLL%% <<	 ejj%++uyyA #x}}-#x('',mmCHHciiAD#x001HHIIGGHHJJJJOO::	 CHHcii93;DL"CU%tf!9>7:	#/#=r!   c                .    | j                   j                  S r   )rD   yearsrE   s    r   rG   zInterval.years       {{   r!   c                .    | j                   j                  S r   )rD   monthsrH   s    r   rK   zInterval.months   s    {{!!!r!   c                    t        | j                  j                        dz  | j                  | j                  j                        z  S N   )absrD   days_signrH   s    r   weekszInterval.weeks   s4    4;;##$)DJJt{{7G7G,HHHr!   c                    | j                   S r   )_daysrH   s    r   rP   zInterval.days   s    zzr!   c                ~    t        | j                  j                        dz  | j                  | j                        z  S rM   )rO   rD   rP   rQ   rT   rH   s    r   remaining_dayszInterval.remaining_days   s.    4;;##$q(4::djj+AAAr!   c                .    | j                   j                  S r   )rD   hoursrH   s    r   rX   zInterval.hours   rI   r!   c                .    | j                   j                  S r   )rD   minutesrH   s    r   rZ   zInterval.minutes   s    {{"""r!   c                    | j                   S r   )r:   rH   s    r   r   zInterval.start   s    {{r!   c                    | j                   S r   )r;   rH   s    r   r   zInterval.end   s    yyr!   c                    | j                   S )zC
        Gives the duration of the Interval in full years.
        )rG   rH   s    r   in_yearszInterval.in_years   s     zzr!   c                B    | j                   t        z  | j                  z   S )zD
        Gives the duration of the Interval in full months.
        )rG   r   rK   rH   s    r   	in_monthszInterval.in_months   s     zzO+dkk99r!   c                V    | j                         }d}|dk  rd}|t        |      dz  z  S )N   r   rN   )in_daysrO   )rE   rP   signs      r   in_weekszInterval.in_weeks   s1    ||~!8Ds4yA~&&r!   c                .    | j                   j                  S r   )rD   
total_daysrH   s    r   rd   zInterval.in_days  s    {{%%%r!   c                2   ddl m} d| j                  fd| j                  fd| j                  fd| j
                  fd| j                  fd| j                  fd	| j                  fg} |j                  |xs t        j                               }g }|D ]e  }|\  }}	t        |	      dkD  s|j                  d
| d|j                  t        |	                   }
|j                  |
j!                  |	             g |sd}t        | j"                        dkD  r/d|j                  d       }t        | j"                        dz  d}nd|j                  d       }|j                  |      }
|j                  |
j!                  |             |j%                  |      S )z
        Get the current interval in words in the current locale.

        Ex: 6 jours 23 heures 58 minutes

        :param locale: The locale to use. Defaults to current locale.
        :param separator: The separator to use between each unit
        r   r   r.   r/   weekr0   r1   r2   r3   zunits..zunits.second.rb   g    .Az.2fzunits.microsecond.)pendulum.locales.localer   rG   rK   rR   rV   rX   rZ   remaining_secondsloadr,   
get_localerO   translationpluralappendformatmicrosecondsjoin)rE   locale	separatorr   	intervalsloaded_localepartsintervalunitinterval_countrp   counts               r   in_wordszInterval.in_words  s    	3 TZZ dkk"TZZ D''(TZZ t||$t--.
	 !,F,Kh6I6I6K L!H#+ D.>"Q&+77TF!M$8$8^9L$M#NO [//?@ "  E4$$%)&}';';A'>&?@t001C7<+M,@,@,C+DE'33D9KLL++E23~~e$$r!   c              #    K   d}t         j                  }| j                  s| j                  rd}t         j                  }| j
                  | j                  }}|} |||      rat        t        t        j                  t        j                  f   |        t        | j
                  |      di ||i}||z  } |||      r`y y w)Naddsubtractr   )operatorlerC   invertger   r   r
   r	   r,   r-   r5   getattr)rE   r|   amountmethodopr   r   is           r   rangezInterval.range0  s      [[~~$++FBZZsnuX..=>FF/GDJJ/<4)<EKA ns   B?CCc                6    t        | j                               S )z4
        Return the Interval as a Duration.
        r'   )r   r9   rH   s    r   as_durationzInterval.as_durationC  s      2 2 455r!   c                $    | j                  d      S )NrP   )r   rH   s    r   __iter__zInterval.__iter__I  s    zz&!!r!   c                J    | j                   |cxk  xr | j                  k  S c S r   )r   r   )rE   items     r   __contains__zInterval.__contains__L  s"     zzT-TXX----r!   c                @    | j                         j                  |      S r   )r   __add__rE   others     r   r   zInterval.__add__Q      !))%00r!   c                @    | j                         j                  |      S r   )r   __sub__r   s     r   r   zInterval.__sub__V  r   r!   c                d    | j                  | j                  | j                  | j                        S r   )r>   r   r   rC   rH   s    r   __neg__zInterval.__neg__Y  s!    ~~dhh

DNNCCr!   c                @    | j                         j                  |      S r   )r   __mul__r   s     r   r   zInterval.__mul__\  r   r!   c                     y r   r   r   s     r   __floordiv__zInterval.__floordiv__a      r!   c                     y r   r   r   s     r   r   zInterval.__floordiv__e  r   r!   c                @    | j                         j                  |      S r   )r   r   r   s     r   r   zInterval.__floordiv__i  s    !..u55r!   c                     y r   r   r   s     r   __truediv__zInterval.__truediv__n  r   r!   c                     y r   r   r   s     r   r   zInterval.__truediv__r  r   r!   c                @    | j                         j                  |      S r   )r   r   r   s     r   r   zInterval.__truediv__v  s    !--e44r!   c                @    | j                         j                  |      S r   )r   __mod__r   s     r   r   zInterval.__mod__y  r   r!   c                @    | j                         j                  |      S r   )r   
__divmod__r   s     r   r   zInterval.__divmod__|  s    !,,U33r!   c                R    | j                  | j                  | j                  d      S )NT)r   )r>   r   r   rH   s    r   __abs__zInterval.__abs__  s    ~~djj$((T~BBr!   c                <    d| j                    d| j                   dS )Nz<Interval [z -> z]>)r:   r;   rH   s    r   __repr__zInterval.__repr__  s    T[[Mdii[;;r!   c                "    | j                         S r   )r   rH   s    r   __str__zInterval.__str__  s    }}r!   c                    t        |t              sJ t        |t              r|j                         }| j                         }||k(  rdS ||kD  rdS dS )Nr   rb   rc   )r)   r   r   as_timedelta)rE   r   tds      r   _cmpzInterval._cmp  sT    %+++eX&&&(E %Kq<"u*Q<"<r!   c                    | j                   | j                  }}| j                  r| j                  r||}}||| j                  fS r   )r   r   rB   rC   )rE   protocolr   r   s       r   	_getstatezInterval._getstate  s<     ZZs<<DNNCc4>>))r!   c                $    | j                  d      S )N   )__reduce_ex__rH   s    r   
__reduce__zInterval.__reduce__  s     !!!$$r!   c                <    | j                   | j                  |      fS r   )r>   r   )rE   r   s     r   r   zInterval.__reduce_ex__  s     ~~t~~h777r!   c                Z    t        | j                  | j                  | j                  f      S r   )hashr   r   rC   rH   s    r   __hash__zInterval.__hash__  s     TZZ4>>:;;r!   c                    t        |t              rG| j                  | j                  | j                  f|j                  |j                  |j                  fk(  S | j                         |k(  S r   )r)   r   r   r   rC   r   r   s     r   __eq__zInterval.__eq__  s\    eX&JJ$..9		>   ##%..r!   c                &    | j                  |       S r   )r   r   s     r   __ne__zInterval.__ne__  s    ;;u%%%r!   )F)r   pendulum.DateTime | datetimer   r   r   boolreturnr   )r   pendulum.Date | dater   r   r   r   r   r   )r   3pendulum.DateTime | pendulum.Date | datetime | dater   r   r   r   r   r   )r   r   r   r   r   r   r   None)r   int)r   r   )N )rv   z
str | Nonerw   strr   r   )rb   )r|   r   r   r   r   +Iterator[pendulum.DateTime | pendulum.Date])r   r   )r   r   )r   z3datetime | date | pendulum.DateTime | pendulum.Dater   r   )r   r   r   r   )r   r   )r   zint | floatr   r   )r   r   r   r   )r   r   r   r   )r   zint | timedeltar   zint | Duration)r   r   r   float)r   r   r   r   )r   zfloat | timedeltar   zDuration | float)r   r   r   ztuple[int, Duration])r   r   )   )r   r   r   zutuple[pendulum.DateTime | pendulum.Date | datetime | date, pendulum.DateTime | pendulum.Date | datetime | date, bool])r   tuple[type[Self], tuple[pendulum.DateTime | pendulum.Date | datetime | date, pendulum.DateTime | pendulum.Date | datetime | date, bool]])r   r   r   r   )r   objectr   r   )0__name__
__module____qualname____doc__r   r   r@   propertyrG   rK   rR   rP   rV   rX   rZ   r   r   r^   r`   rf   rd   r   r   r   r   r   r   __radd__r   r   r   __rmul__r   __div__r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r>   s   @r   r   r      s    
 	+ * 	
 
  
 	# " 	
 
  	PCBPC APC 	PC
 
PCl 	A>BA> AA> 	A>
 
A>F ! ! " " I I   B B ! ! # #    :'&)%X ()!$	4&6".G.	.
1 H1D1 H   6 G   514C<	= )**%*
*
%

%
8%
8

8</&r!   r   )
__future__r   r   r   r   r   typingr   r   r	   r
   r   r,   pendulum.constantsr   pendulum.durationr   pendulum.helpersr   typing_extensionsr   r   r   rl   r   r   r   r!   r   <module>r      sN    "            . & ) &/,.j&x j&r!   