o
    -g"                     @   s\   d Z ddlZddlmZmZ ddlZddlmZ dd Zdd	 Zd
d Z	G dd de
ZdS )z
Where the magic happens.
    N)datetime	timedelta   )
_iteritemsc                 C   s
   t | |S )z!Add a number of months to a date.month_delta)datenumber r
   L/var/www/html/django-vendor/venv/lib/python3.10/site-packages/moment/date.py	add_month      
r   c                 C   s   |d }t | |S )z(Subtract a number of months from a date.r   )r   r	   negative_monthr
   r
   r   subtract_month   s   
r   c                 C   s   | j | d }| j| j | d d  }|sd}t| jd|d dkr/|d dkr-|d dkr/dnd	dd
dd
ddd
dd
dg|d  }| j|||dS )zn
    Create a new date with a modified number of months.

    https://stackoverflow.com/a/22443132/485216
       r         r   d   i           )daymonthyear)r   r   minr   replace)r   deltar   r   r   r
   r
   r   r      s   *r   c                   @   sX  e Zd ZdZdd ZdEddZdEddZdEd	d
Zdd ZdFddZ	dd Z
dd Zedd Zedd Zedd Zedd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* Zed+d, Zed-d. Zed/d0 Zed1d2 Zed3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dS )GMutableDatez'Incapsulate mutable dates in one class.c                 C   s
   || _ d S N_date)selfr   r
   r
   r   __init__5      
zMutableDate.__init__Nc                 K   s  |s|st |rt|D ]
\}}| || q|dks|dkr*t| j|d | _| S |dks2|dkr;t| j|| _| S |dksC|dkrO|  jt|d7  _| S |d	ksW|d
krc|  jt|d7  _| S |dksk|dkrw|  jt|d7  _| S |dks|dkr|  jt|d7  _| S |dks|dkr|  jt|d7  _| S |dks|dkr|  jt|d7  _| S |dks|dkr|  jt|d7  _| S )z Add time to the original moment.yearsr   r   monthsr   weeksweekr'   daysr   r*   hourshourr,   minutesminuter/   secondssecondr2   millisecondsmillisecondr5   microsecondsmicrosecondr8   )lenr   addr   r!   r   r"   keyamountkwdskvr
   r
   r   r<   8   <   	zMutableDate.addc                 K   s   | j ||fi |S )zJust in case.)subtract)r"   r>   r?   r@   r
   r
   r   subQ   s   zMutableDate.subc                 K   s  |s|st |rt|D ]
\}}| || q|dks|dkr*t| j|d | _| S |dks2|dkr;t| j|| _| S |dksC|dkrO|  jt|d8  _| S |d	ksW|d
krc|  jt|d8  _| S |dksk|dkrw|  jt|d8  _| S |dks|dkr|  jt|d8  _| S |dks|dkr|  jt|d8  _| S |dks|dkr|  jt|d8  _| S |dks|dkr|  jt|d8  _| S )z'Subtract time from the original moment.r%   r   r   r&   r   r'   r(   r)   r*   r   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   )r;   r   rD   r   r!   r   r=   r
   r
   r   rD   U   rC   zMutableDate.subtractc                 K   s  t |D ]\}}|dks|dkr| jj|d| _q|dks!|dkr*| jj|d| _q|dks2|dkr;| jj|d	| _q|d
ksC|dkrL| jj|d| _q|dksT|dkr]| jj|d| _q|dkse|dkrn| jj|d| _q|dksv|dkr| jj|d| _q|dkr| | q| S )z2A Pythonic way to replace various date attributes.r%   r   )r   r&   r   )r   r*   r   )r   r,   r-   )r-   r/   r0   )r0   r2   r3   )r3   r8   r9   )r9   weekday)r   r!   r   _weekday)r"   r@   r>   valuer
   r
   r   r   n   s&   
zMutableDate.replaceTFc                 C   sl   t d}z| j| }W n ty!   |jtjd}| j| }Y nw | }|r,t|}|r2|d9 }t	|S )zMilliseconds since epoch.r   )tzinfoi  )
r   utcfromtimestampr!   	TypeErrorr   pytzutctotal_secondsroundint)r"   roundingr5   zeror   r2   r
   r
   r   epoch   s   
zMutableDate.epochc                 C   s@   | j  }|dk rt|| }n|| }| j t| }|| _ | S )z;Mutate the original moment by changing the day of the week.r   )r!   
isoweekdayabsr   )r"   r	   rF   r*   r   r
   r
   r   rG      s   
zMutableDate._weekdayc                 C   
   | j  S )z"Return the date's ISO 8601 string.)r!   	isoformatr"   r
   r
   r   rW      r   zMutableDate.isoformatc                 C   s   | j ddddd | S )z=Get rid of hour, minute, second, and microsecond information.r   )r,   r/   r2   r8   )r   rX   r
   r
   r   rR      s   zMutableDate.zeroc                 C      | j S )z0Return the mutable date's inner datetime format.r    rX   r
   r
   r   r         zMutableDate.datetimec                 C   rY   )z&Access the internal datetime variable.r    rX   r
   r
   r   r      rZ   zMutableDate.datec                 C      | j jS r   )r!   r   rX   r
   r
   r   r         zMutableDate.yearc                 C   r[   r   )r!   r   rX   r
   r
   r   r      r\   zMutableDate.monthc                 C   r[   r   )r!   r   rX   r
   r
   r   r      r\   zMutableDate.dayc                 C   rV   r   )r!   rT   rX   r
   r
   r   rF      r   zMutableDate.weekdayc                 C   r[   r   r!   r-   rX   r
   r
   r   r-      r\   zMutableDate.hourc                 C   r[   r   r]   rX   r
   r
   r   r,      r\   zMutableDate.hoursc                 C   r[   r   r!   r0   rX   r
   r
   r   r0      r\   zMutableDate.minutec                 C   r[   r   r^   rX   r
   r
   r   r/      r\   zMutableDate.minutesc                 C   r[   r   r!   r3   rX   r
   r
   r   r3      r\   zMutableDate.secondc                 C   r[   r   r_   rX   r
   r
   r   r2      r\   zMutableDate.secondsc                 C   r[   r   r!   r9   rX   r
   r
   r   r9      r\   zMutableDate.microsecondc                 C   r[   r   r`   rX   r
   r
   r   r8      r\   zMutableDate.microsecondsc                 C   r[   r   )r!   rI   rX   r
   r
   r   rI      r\   zMutableDate.tzinfoc                 C   s2   t |tr
| j| S t |t| r| j|j S d S r   
isinstancer   r!   typer   r"   otherr
   r
   r   __sub__   
   

zMutableDate.__sub__c                 C   s
   |  |S r   )rf   rd   r
   r
   r   __rsub__   r$   zMutableDate.__rsub__c                 C   s2   t |tr
| j|k S t |t| r| j|jk S d S r   ra   rd   r
   r
   r   __lt__   rg   zMutableDate.__lt__c                 C   s2   t |tr
| j|kS t |t| r| j|jkS d S r   ra   rd   r
   r
   r   __le__   rg   zMutableDate.__le__c                 C   s2   t |tr
| j|kS t |t| r| j|jkS d S r   ra   rd   r
   r
   r   __eq__   rg   zMutableDate.__eq__c                 C   s2   t |tr
| j|kS t |t| r| j|jkS d S r   ra   rd   r
   r
   r   __ne__   rg   zMutableDate.__ne__c                 C   s2   t |tr
| j|kS t |t| r| j|jkS d S r   ra   rd   r
   r
   r   __gt__  rg   zMutableDate.__gt__c                 C   s2   t |tr
| j|kS t |t| r| j|jkS d S r   ra   rd   r
   r
   r   __ge__  rg   zMutableDate.__ge__)NN)TF)%__name__
__module____qualname____doc__r#   r<   rE   rD   r   rS   rG   rW   propertyrR   r   r   r   r   r   rF   r-   r,   r0   r/   r3   r2   r9   r8   rI   rf   rh   ri   rj   rk   rl   rm   rn   r
   r
   r
   r   r   2   sd    



















r   )rr   calendarr   r   rL   utilsr   r   r   r   objectr   r
   r
   r
   r   <module>   s    