o
    8ήc"                     @   s  d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
mZmZmZ ddlmZ G dd de	ZG d	d
 d
e	ZG dd de	ZG dd de	ZG dd de	ZG dd de	Ze
ejG dd deZe
ejG dd deZe
eje
ejG dd deZe
eje
ejG dd deZe
ej e
ej!G dd deZ"e
ej#e
ej$G dd deZ%e
ej&e
ej'G dd  d eZ(e
ej)G d!d" d"eZ*e
ej+G d#d$ d$eZ,e
ej-G d%d& d&eZ.e
ej/G d'd( d(eZ0e
ej1G d)d* d*eZ2e
ej3G d+d, d,eZ4e
e5G d-d. d.eZ6e
eje
ejG d/d0 d0e	Z7e
eje
ejG d1d2 d2e	Z8e
ejG d3d4 d4e	Z9G d5d6 d6e	Z:e
ej)G d7d8 d8e:Z;e
ej+G d9d: d:e:Z<e
ej-G d;d< d<e:Z=e
ej/G d=d> d>e:Z>e
ej1G d?d@ d@e:Z?e
ej3G dAdB dBe:Z@e
ejAe
ejBG dCdD dDe	ZCdS )Ez)
Typing declarations for np.timedelta64.
    )productN)types)AttributeTemplateConcreteTemplateAbstractTemplateinfer_globalinferinfer_getattr	signature)npdatetime_helpersc                   @      e Zd Zdd ZdS )TimedeltaUnaryOpc                 C   s0   t |dkrd S |\}t|tjsd S t||S )N   )len
isinstancer   NPTimedeltar
   )selfargskwsop r   C/tmp/pip-target-vg8gfxp4/lib/python/numba/core/typing/npdatetime.pygeneric   s   
zTimedeltaUnaryOp.genericN__name__
__module____qualname__r   r   r   r   r   r          r   c                   @   r   )TimedeltaBinOpc                 C   sj   t |dkrd S |\}}tdd |D sd S t|j|jr%t|||S t|j|jr3t|||S d S )N   c                 s       | ]	}t |tjV  qd S Nr   r   r   .0tpr   r   r   	<genexpr>%       z)TimedeltaBinOp.generic.<locals>.<genexpr>)r   allr   can_cast_timedelta_unitsunitr
   r   r   r   leftrightr   r   r   r       s   zTimedeltaBinOp.genericNr   r   r   r   r   r      r   r   c                   @   r   )TimedeltaCmpOpc                 C   ,   |\}}t dd |D sd S ttj||S )Nc                 s   r    r!   r"   r#   r   r   r   r&   2   r'   z)TimedeltaCmpOp.generic.<locals>.<genexpr>r(   r
   r   booleanr+   r   r   r   r   /      zTimedeltaCmpOp.genericNr   r   r   r   r   r.   -   r   r.   c                   @   r   )TimedeltaOrderedCmpOpc                 C   sP   |\}}t dd |D sd S t|j|jst|j|jr&ttj||S d S )Nc                 s   r    r!   r"   r#   r   r   r   r&   <   r'   z0TimedeltaOrderedCmpOp.generic.<locals>.<genexpr>)r(   r   r)   r*   r
   r   r1   r+   r   r   r   r   9   s   zTimedeltaOrderedCmpOp.genericNr   r   r   r   r   r3   7   r   r3   c                   @   r   )TimedeltaMixOpc                    s   |\}}t |tjr|| } fdd}nt |tjr(|| } fdd}ndS t |tjtjfs5dS t |tjr>tj}||S )zo
        (timedelta64, {int, float}) -> timedelta64
        ({int, float}, timedelta64) -> timedelta64
        c                    s   t  |  S r!   r
   othertdr   r   <lambda>M       z(TimedeltaMixOp.generic.<locals>.<lambda>c                    s   t   | S r!   r5   r6   r8   r   r   r:   P   r;   N)r   r   r   FloatIntegerint64)r   r   r   r,   r-   r7   sig_factoryr   r8   r   r   E   s   

zTimedeltaMixOp.genericNr   r   r   r   r   r4   C   r   r4   c                   @   r   )TimedeltaDivOpc                 C   s   |\}}t |tjsdS t |tjr+t|j|js"t|j|jr)ttj||S dS t |tjr7t|||S t |tj	rDt||tj
S dS )zh
        (timedelta64, {int, float}) -> timedelta64
        (timedelta64, timedelta64) -> float
        N)r   r   r   r   r)   r*   r
   float64r<   r=   r>   r+   r   r   r   r   ^   s   zTimedeltaDivOp.genericNr   r   r   r   r   r@   \   r   r@   c                   @      e Zd ZejZdS )TimedeltaUnaryPosN)r   r   r   operatorposkeyr   r   r   r   rC   r       
rC   c                   @   rB   )TimedeltaUnaryNegN)r   r   r   rD   negrF   r   r   r   r   rH   v   rG   rH   c                   @   rB   )TimedeltaBinAddN)r   r   r   rD   addrF   r   r   r   r   rJ   z       
rJ   c                   @   rB   )TimedeltaBinSubN)r   r   r   rD   subrF   r   r   r   r   rM      rL   rM   c                   @   rB   )TimedeltaBinMultN)r   r   r   rD   mulrF   r   r   r   r   rO      rL   rO   c                   @   rB   )TimedeltaTrueDivN)r   r   r   rD   truedivrF   r   r   r   r   rQ      rL   rQ   c                   @   rB   )TimedeltaFloorDivN)r   r   r   rD   floordivrF   r   r   r   r   rS      rL   rS   c                   @   rB   )TimedeltaCmpEqNr   r   r   rD   eqrF   r   r   r   r   rU      rG   rU   c                   @   rB   )TimedeltaCmpNeNr   r   r   rD   nerF   r   r   r   r   rX      rG   rX   c                   @   rB   )TimedeltaCmpLtNr   r   r   rD   ltrF   r   r   r   r   r[      rG   r[   c                   @   rB   )TimedeltaCmpLENr   r   r   rD   lerF   r   r   r   r   r^      rG   r^   c                   @   rB   )TimedeltaCmpGtNr   r   r   rD   gtrF   r   r   r   r   ra      rG   ra   c                   @   rB   )TimedeltaCmpGENr   r   r   rD   gerF   r   r   r   r   rd      rG   rd   c                   @   s   e Zd ZdS )TimedeltaAbsN)r   r   r   r   r   r   r   rg      s    rg   c                   @      e Zd ZejZdd ZdS )DatetimePlusTimedeltac                 C   s   t |dkrd S |\}}t|tjr|}|}nt|tjr"|}|}nd S t|tjr?t|j|j}|d urAtt|||S d S d S Nr   )	r   r   r   r   
NPDatetimer    combine_datetime_timedelta_unitsr*   r
   )r   r   r   r,   r-   dtr9   r*   r   r   r   r      s$   zDatetimePlusTimedelta.genericN)r   r   r   rD   rK   rF   r   r   r   r   r   ri          ri   c                   @   rh   )DatetimeMinusTimedeltac                 C   sf   t |dkrd S |\}}t|tjr-t|tjr/t|j|j}|d ur1tt|||S d S d S d S rj   )	r   r   r   rk   r   r   rl   r*   r
   )r   r   r   rm   r9   r*   r   r   r   r      s   zDatetimeMinusTimedelta.genericNr   r   r   rD   rN   rF   r   r   r   r   r   ro      rn   ro   c                   @   rh   )DatetimeMinusDatetimec                 C   sZ   t |dkrd S |\}}t|tjr)t|tjr+t|j|j}tt|||S d S d S rj   )	r   r   r   rk   r   get_best_unitr*   r
   r   )r   r   r   r,   r-   r*   r   r   r   r      s   zDatetimeMinusDatetime.genericNrp   r   r   r   r   rq      s    rq   c                   @   r   )DatetimeCmpOpc                 C   r/   )Nc                 s   r    r!   )r   r   rk   r#   r   r   r   r&      r'   z(DatetimeCmpOp.generic.<locals>.<genexpr>r0   r+   r   r   r   r      r2   zDatetimeCmpOp.genericNr   r   r   r   r   rs      r   rs   c                   @   rB   )DatetimeCmpEqNrV   r   r   r   r   rt      rG   rt   c                   @   rB   )DatetimeCmpNeNrY   r   r   r   r   ru      rG   ru   c                   @   rB   )DatetimeCmpLtNr\   r   r   r   r   rv      rG   rv   c                   @   rB   )DatetimeCmpLENr_   r   r   r   r   rw     rG   rw   c                   @   rB   )DatetimeCmpGtNrb   r   r   r   r   rx     rG   rx   c                   @   rB   )DatetimeCmpGENre   r   r   r   r   ry   
  rG   ry   c                   @   r   )DatetimeMinMaxc                 C   s   |rJ t |dksJ d}t|d tjtjfsJ |t|d tjr2t|d tjs1t|nt|d tjs>t|t|d g|R  S )Nr   zfDatetimeMinMax requires both arguments to be NPDatetime type or both arguments to be NPTimedelta typesr   r   )r   r   r   rk   r   	TypeErrorr
   )r   r   r   	error_msgr   r   r   r     s   zDatetimeMinMax.genericNr   r   r   r   r   rz     s    rz   )D__doc__	itertoolsr   rD   
numba.corer   numba.core.typing.templatesr   r   r   r   r   r	   r
   numba.npr   r   r   r.   r3   r4   r@   rE   rC   rI   rH   rK   iaddrJ   rN   isubrM   rP   imulrO   rR   itruedivrQ   rT   	ifloordivrS   rW   rU   rZ   rX   r]   r[   r`   r^   rc   ra   rf   rd   absrg   ri   ro   rq   rs   rt   ru   rv   rw   rx   ry   datetime_minimumdatetime_maximumrz   r   r   r   r   <module>   s    $

