o
    8ήc\                     @   s
  d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZmZmZmZmZmZ d dlmZmZ d dlmZmZmZmZmZ eeG dd	 d	eZeG d
d deZ ee!G dd deZ"ee#G dd deZ$ee%e%deeedee
e
dG dd deZ&eG dd deZ'eG dd deZ(eG dd deZ)eG dd deZ*dd Z+dd Z,e-e.ej/ej0fe-e.ej1ej2f Z3e4dd  e 5e3e3D Z6G d!d" d"eZ7eej8G d#d$ d$e7Z9eej:G d%d$ d$e7Z9eej;G d&d' d'e7Z<eej=G d(d' d'e7Z<eej>G d)d* d*e7Z?eej@G d+d* d*e7Z?eejAG d,d- d-eZBeejCG d.d- d-eZBeejDG d/d0 d0eZEeejFG d1d0 d0eZEeejGG d2d3 d3eZHeejIG d4d3 d3eZHeeJG d5d6 d6eZKeejLG d7d8 d8eZMeejNG d9d8 d8eZMeeLG d:d; d;eMZOG d<d= d=eZPeejQG d>d? d?ePZReejSG d@d? d?ePZReejTG dAdB dBePZUeejVG dCdB dBePZUG dDdE dEe7ZWeejXG dFdG dGeWZYeejZG dHdG dGeWZYeej[G dIdJ dJeWZ\eej]G dKdJ dJeWZ\eej^G dLdM dMeWZ_eej`G dNdM dMeWZ_eejaG dOdP dPeZbG dQdR dReZceejdG dSdT dTecZeeejfG dUdV dVecZgeejhG dWdX dXeZiG dYdZ dZeZjG d[d\ d\eZkeejlG d]d^ d^ejZmeejnG d_d` d`ejZoeejpG dadb dbejZqeejrG dcdd ddejZseejtG dedf dfeZueejvG dgdh dheuZweejtG didj djekZxeejvG dkdl dlekZyG dmdn dneZzeejtG dodp dpezZ{eejvG dqdr drezZ|eejrG dsdt dtezZ}eejpG dudv dvezZ~eejnG dwdx dxezZeejlG dydz dzezZeej8G d{d| d|eZG d}d~ d~eZeejG dd deZeejG dd deZdd ZeejG dd deZeejG dd deZeeG dd deZee4G dd deZeejG dd deZeejG dd deZeG dd deZeG dd deZeG dd deZeG dd deZeG dd deZeG dd deZeG dd deZeG dd deZeG dd deZeG dd deZeG dd deZeG dd deZG dd deZeeG dd deZeeG dd deZeeG dd deZeeG dd deZeeG dd deZeeG dd deZeeG dd deZeeG dd deZeeG dd deZeeG dd deZeeG dd deZeeG dd deZeG ddĄ deZeG ddƄ deZeeeeG ddȄ deZG ddʄ deZG dd̄ dejZeedd΄ ZeeddЄ ZeeG dd҄ dejZeeddӃ eeddԃ dS )    N)typeserrors)prange)internal_prange)	AttributeTemplateConcreteTemplateAbstractTemplateinfer_globalinferinfer_getattr	signaturebound_functionmake_callable_template)get_type_min_valueget_type_max_value)typeof_impltype_callablemodelsregister_modelmake_attribute_wrapperc                   @      e Zd Zdd ZdS )Printc                 C   sR   |D ]}| j d|fi }|d u rtd| |jtju sJ qttjg|R  S )N
print_itemzType %s is not printable.)contextresolve_function_type	TypeErrorreturn_typer   noner   )selfargskwsasig r#   A/tmp/pip-target-vg8gfxp4/lib/python/numba/core/typing/builtins.pygeneric   s   zPrint.genericN__name__
__module____qualname__r%   r#   r#   r#   r$   r          r   c                   @      e Zd ZdZdd ZdS )	PrintItemr   c                 C   s   |\}t tjg|R  S N)r   r   r   r   r   r    argr#   r#   r$   r%   $   s   zPrintItem.genericNr'   r(   r)   keyr%   r#   r#   r#   r$   r,           r,   c                   @   sl   e Zd Zdd eejD Zdd eejD Zdd eej	D Z
dd eejD Zee e
 e ZdS )Absc                 C      g | ]}t ||qS r#   r   .0tyr#   r#   r$   
<listcomp>+       zAbs.<listcomp>c                 C   r4   r#   r5   r6   r#   r#   r$   r9   ,   r:   c                 C   r4   r#   r5   r6   r#   r#   r$   r9   -   r:   c                 C   s   g | ]}t |j|qS r#   )r   underlying_floatr6   r#   r#   r$   r9   .       N)r'   r(   r)   sortedr   signed_domain	int_casesunsigned_domain
uint_casesreal_domain
real_casescomplex_domaincomplex_casescasesr#   r#   r#   r$   r3   )   s    r3   c                   @   s  e Zd ZeejejeejejeejejejeejejejeejejejeejejejeejejejejeejejejejeejejejejeejejejejeejejejejeejejejejeejejejejeejejejejgZ	dS )SliceN)
r'   r(   r)   r   r   slice2_typeintpr   slice3_typerF   r#   r#   r#   r$   rG   3   s     rG   )
typing_keyc                   @   s   e Zd Zeejejeejejejeejejejejeejejeejejejeejejejejeej	ej
eej	ej
ej
eej	ej
ej
ej
g	ZdS )RangeN)r'   r(   r)   r   r   range_state32_typeint32range_state64_typeint64unsigned_range_state64_typeuint64rF   r#   r#   r#   r$   rL   G   s"    rL   c                   @   r+   )GetItergetiterc                 C   *   |rJ |\}t |tjrt|j|S d S r-   )
isinstancer   IterableTyper   iterator_type)r   r   r    objr#   r#   r$   r%   _   
   zGetIter.genericNr0   r#   r#   r#   r$   rS   [   r2   rS   c                   @   r+   )IterNextiternextc                 C   s4   |rJ |\}t |tjrtt|jtj|S d S r-   )rV   r   IteratorTyper   Pair
yield_typebooleanr   r   r    itr#   r#   r$   r%   j   s
   zIterNext.genericNr0   r#   r#   r#   r$   r[   f   r2   r[   c                   @      e Zd ZdZdZdd ZdS )	PairFirstz?
    Given a heterogeneous pair, return the first element.
    
pair_firstc                 C   rU   r-   )rV   r   r^   r   
first_typer   r   r    pairr#   r#   r$   r%   x   rZ   zPairFirst.genericNr'   r(   r)   __doc__r1   r%   r#   r#   r#   r$   rd   q       rd   c                   @   rc   )
PairSecondz@
    Given a heterogeneous pair, return the second element.
    pair_secondc                 C   rU   r-   )rV   r   r^   r   second_typerg   r#   r#   r$   r%      rZ   zPairSecond.genericNri   r#   r#   r#   r$   rl      rk   rl   c                  G   s   t tjjgdd | D R  S )Nc                 s       | ]}|j V  qd S r-   )bitwidthr7   tpr#   r#   r$   	<genexpr>       z)choose_result_bitwidth.<locals>.<genexpr>)maxr   rI   rp   )inputsr#   r#   r$   choose_result_bitwidth   s   rw   c                  G   s(   t |  }tdd | D }tj||S )zv
    Choose the integer result type for an operation on integer inputs,
    according to the integer typing NBEP.
    c                 s   ro   r-   )signedrq   r#   r#   r$   rs      rt   z$choose_result_int.<locals>.<genexpr>)rw   anyr   Integerfrom_bitwidth)rv   rp   rx   r#   r#   r$   choose_result_int   s   r|   c                 c   s&    | ]\}}t t||||V  qd S r-   r   r|   r7   op1op2r#   r#   r$   rs      s
    
rs   c                   @   sD   e Zd ZeeZedd eejD 7 Zedd eej	D 7 ZdS )BinOpc                 C      g | ]}t |||qS r#   r5   r7   opr#   r#   r$   r9          zBinOp.<listcomp>c                 C   r   r#   r5   r   r#   r#   r$   r9      r   N)
r'   r(   r)   listinteger_binop_casesrF   r=   r   rB   rD   r#   r#   r#   r$   r      s    r   c                   @      e Zd ZdS BinOpAddNr'   r(   r)   r#   r#   r#   r$   r          r   c                   @   r   r   r   r#   r#   r#   r$   r      r   c                   @   r   BinOpSubNr   r#   r#   r#   r$   r      r   r   c                   @   r   r   r   r#   r#   r#   r$   r      r   c                   @   r   BinOpMulNr   r#   r#   r#   r$   r      r   r   c                   @   r   r   r   r#   r#   r#   r$   r      r   c                   @   ,   e Zd ZeeZedd eejD 7 ZdS )BinOpModc                 C   r   r#   r5   r   r#   r#   r$   r9      r   BinOpMod.<listcomp>N	r'   r(   r)   r   r   rF   r=   r   rB   r#   r#   r#   r$   r          r   c                   @   r   )r   c                 C   r   r#   r5   r   r#   r#   r$   r9      r   r   Nr   r#   r#   r#   r$   r      r   c                   @   R   e Zd Zdd eeeD Zedd eej	D 7 Zedd eej
D 7 ZdS )BinOpTrueDivc                 C      g | ]\}}t tj||qS r#   r   r   float64r~   r#   r#   r$   r9          BinOpTrueDiv.<listcomp>c                 C   r   r#   r5   r   r#   r#   r$   r9      r   c                 C   r   r#   r5   r   r#   r#   r$   r9      r   Nr'   r(   r)   	itertoolsproductmachine_intsrF   r=   r   rB   rD   r#   r#   r#   r$   r          
r   c                   @   r   )r   c                 C   r   r#   r   r~   r#   r#   r$   r9      r   r   c                 C   r   r#   r5   r   r#   r#   r$   r9      r   c                 C   r   r#   r5   r   r#   r#   r$   r9      r   Nr   r#   r#   r#   r$   r      r   c                   @   r   )BinOpFloorDivc                 C   r   r#   r5   r   r#   r#   r$   r9      r   BinOpFloorDiv.<listcomp>Nr   r#   r#   r#   r$   r      r   r   c                   @   r   )r   c                 C   r   r#   r5   r   r#   r#   r$   r9      r   r   Nr   r#   r#   r#   r$   r      r   c                   @   s(   e Zd Zeeej Zdd eD ZdS )DivModc                 C   s    g | ]}t t|d ||qS )   )r   r   UniTupler6   r#   r#   r$   r9      s     zDivMod.<listcomp>N)	r'   r(   r)   r   r=   r   rB   _tysrF   r#   r#   r#   r$   r      s    r   c                   @      e Zd ZeeZedd ejejej	fD 7 Zedd ejejej	fD 7 Zedd e
ejD 7 Zedd e
ejD 7 ZdS )
BinOpPowerc                 C      g | ]
}t tjtj|qS r#   r   r   float32r   r#   r#   r$   r9          BinOpPower.<listcomp>c                 C   r   r#   r   r   r#   r#   r$   r9     r   c                 C   r   r#   r5   r   r#   r#   r$   r9     r<   c                 C   r   r#   r5   r   r#   r#   r$   r9     r<   Nr'   r(   r)   r   r   rF   r   rN   rP   rR   r=   rB   rD   r#   r#   r#   r$   r          r   c                   @   r   )r   c                 C   r   r#   r   r   r#   r#   r$   r9     r   r   c                 C   r   r#   r   r   r#   r#   r$   r9     r   c                 C   r   r#   r5   r   r#   r#   r$   r9     r<   c                 C   r   r#   r5   r   r#   r#   r$   r9     r<   Nr   r#   r#   r#   r$   r   	  r   c                   @   r   )PowerBuiltinNr   r#   r#   r#   r$   r     s    r   c                   @   s<   e Zd Zdd eejD Zedd eejD 7 ZdZdS )BitwiseShiftOperationc                 C   2   g | ]}t jt jfD ]}tt|t j||q
qS r#   )r   rR   rP   r   ru   rI   r7   r   r   r#   r#   r$   r9   '      
z BitwiseShiftOperation.<listcomp>c                 C   r   r#   )r   rR   rP   r   ru   uintpr   r#   r#   r$   r9   *  r   FN)	r'   r(   r)   r=   r   r>   rF   r@   unsafe_castingr#   r#   r#   r$   r     s    
r   c                   @   r   BitwiseLeftShiftNr   r#   r#   r#   r$   r   0  r   r   c                   @   r   r   r   r#   r#   r#   r$   r   4  r   c                   @   r   BitwiseRightShiftNr   r#   r#   r#   r$   r   9  r   r   c                   @   r   r   r   r#   r#   r#   r$   r   >  r   c                   @   s0   e Zd ZeejejejgZeee7 ZdZ	dS )BitwiseLogicOperationFN)
r'   r(   r)   r   r   r`   rF   r   r   r   r#   r#   r#   r$   r   C  s    r   c                   @   r   
BitwiseAndNr   r#   r#   r#   r$   r   I  r   r   c                   @   r   r   r   r#   r#   r#   r$   r   N  r   c                   @   r   	BitwiseOrNr   r#   r#   r#   r$   r   S  r   r   c                   @   r   r   r   r#   r#   r#   r$   r   X  r   c                   @   r   
BitwiseXorNr   r#   r#   r#   r$   r   ]  r   r   c                   @   r   r   r   r#   r#   r#   r$   r   b  r   c                   @   sP   e Zd ZeejejgZedd eejD 7 Zedd eej	D 7 ZdZ
dS )BitwiseInvertc                 C      g | ]	}t t||qS r#   r}   r   r#   r#   r$   r9   q      zBitwiseInvert.<listcomp>c                 C   r   r#   r}   r   r#   r#   r$   r9   r  r   FN)r'   r(   r)   r   r   r`   rF   r=   r@   r>   r   r#   r#   r#   r$   r   k  s
    r   c                   @   s|   e Zd Zdd eejD Zedd eejD 7 Zedd eejD 7 Zedd eej	D 7 Zee
ejejg7 ZdS )UnaryOpc                 C   r   r#   r}   r   r#   r#   r$   r9   x  r   zUnaryOp.<listcomp>c                 C   r   r#   r}   r   r#   r#   r$   r9   y  r   c                 C   r4   r#   r5   r   r#   r#   r$   r9   z  r:   c                 C   r4   r#   r5   r   r#   r#   r$   r9   {  r:   N)r'   r(   r)   r=   r   r@   rF   r>   rB   rD   r   rI   r`   r#   r#   r#   r$   r   w  s    r   c                   @   r   )UnaryNegateNr   r#   r#   r#   r$   r     r   r   c                   @   r   )UnaryPositiveNr   r#   r#   r#   r$   r     r   r   c                   @   s|   e Zd ZeejejgZedd eejD 7 Zedd eej	D 7 Zedd eej
D 7 Zedd eejD 7 ZdS )UnaryNotc                 C      g | ]}t tj|qS r#   r   r   r`   r   r#   r#   r$   r9     r   zUnaryNot.<listcomp>c                 C   r   r#   r   r   r#   r#   r$   r9     r   c                 C   r   r#   r   r   r#   r#   r$   r9     r   c                 C   r   r#   r   r   r#   r#   r$   r9     r   N)r'   r(   r)   r   r   r`   rF   r=   r>   r@   rB   rD   r#   r#   r#   r$   r     s    r   c                   @   sh   e Zd ZeejejejgZedd eejD 7 Zedd eej	D 7 Zedd eej
D 7 ZdS )OrderedCmpOpc                 C      g | ]	}t tj||qS r#   r   r   r#   r#   r$   r9     r   zOrderedCmpOp.<listcomp>c                 C   r   r#   r   r   r#   r#   r$   r9     r   c                 C   r   r#   r   r   r#   r#   r$   r9     r   N)r'   r(   r)   r   r   r`   rF   r=   r>   r@   rB   r#   r#   r#   r$   r     s
    r   c                   @   s&   e Zd Zejdd eejD  ZdS )UnorderedCmpOpc                 C   r   r#   r   r   r#   r#   r$   r9     s    zUnorderedCmpOp.<listcomp>N)r'   r(   r)   r   rF   r=   r   rD   r#   r#   r#   r$   r     s    
r   c                   @   r   )CmpOpLtNr   r#   r#   r#   r$   r     r   r   c                   @   r   )CmpOpLeNr   r#   r#   r#   r$   r     r   r   c                   @   r   )CmpOpGtNr   r#   r#   r#   r$   r     r   r   c                   @   r   )CmpOpGeNr   r#   r#   r#   r$   r     r   r   c                   @   r   )	ConstOpEqc                 C   s>   |rJ |\}}t |tjrt |tjrttj||S d S d S r-   )rV   r   Literalr   r`   )r   r   r    arg1arg2r#   r#   r$   r%     s
   zConstOpEq.genericNr&   r#   r#   r#   r$   r     r*   r   c                   @   r   )ConstOpNotEqNr   r#   r#   r#   r$   r     r   r   c                   @   r   )CmpOpEqNr   r#   r#   r#   r$   r     r   r   c                   @   r   )CmpOpNeNr   r#   r#   r#   r$   r     r   r   c                   @   r   )TupleComparec                 C   sn   |\}}t |tjr3t |tjr5t||D ]\}}| j| j||fi }|d u r+ d S qttj||S d S d S r-   )	rV   r   	BaseTuplezipr   r   r1   r   r`   )r   r   r    lhsrhsuvresr#   r#   r$   r%     s   zTupleCompare.genericNr&   r#   r#   r#   r$   r         r   c                   @   r   )TupleEqNr   r#   r#   r#   r$   r     r   r   c                   @   r   )TupleNeNr   r#   r#   r#   r$   r     r   r   c                   @   r   )TupleGeNr   r#   r#   r#   r$   r     r   r   c                   @   r   )TupleGtNr   r#   r#   r#   r$   r     r   r   c                   @   r   )TupleLeNr   r#   r#   r#   r$   r     r   r   c                   @   r   )TupleLtNr   r#   r#   r#   r$   r     r   r   c                   @   r   )TupleAddc                 C   s|   t |dkr4|\}}t|tjr6t|tjr8t|tjs:t|tjs<tjt|t| }t|||S d S d S d S d S d S )Nr   )lenrV   r   r   BaseNamedTuple
from_typestupler   )r   r   r    r!   br   r#   r#   r$   r%     s   

zTupleAdd.genericNr&   r#   r#   r#   r$   r     r*   r   c                   @   r   )CmpOpIdentityc                 C   s   |\}}t tj||S r-   r   )r   r   r    r   r   r#   r#   r$   r%     s   zCmpOpIdentity.genericNr&   r#   r#   r#   r$   r     r   r   c                   @   r   )CmpOpIsNr   r#   r#   r#   r$   r     r   r   c                   @   r   )
CmpOpIsNotNr   r#   r#   r#   r$   r     r   r   c                 C   s2   t | tjr| S t | tjr| jrtjS tjS dS )zZ
    Normalize the *index* type (an integer or slice) for indexing a 1D
    sequence.
    N)rV   r   	SliceTyperz   rx   rI   r   )indexr#   r#   r$   normalize_1d_index  s
   r   c                   @   r   )GetItemCPointerc                 C   sB   |rJ |\}}t |tjrt |tjrt|j|t|S d S d S r-   )rV   r   CPointerrz   r   dtyper   )r   r   r    ptridxr#   r#   r$   r%      s
   zGetItemCPointer.genericNr&   r#   r#   r#   r$   r     r*   r   c                   @   r   )SetItemCPointerc                 C   sH   |rJ |\}}}t |tjr t |tjr"ttj|t||jS d S d S r-   )rV   r   r   rz   r   r   r   r   )r   r   r    r   r   valr#   r#   r$   r%   )  s
   
zSetItemCPointer.genericNr&   r#   r#   r#   r$   r   '  r*   r   c                   @   r   )Lenc                 C   sH   |rJ |\}t |tjtjfrttj|S t |tjr"t|j|S d S r-   )rV   r   Bufferr   r   rI   	RangeTyper   r   r   r    r   r#   r#   r$   r%   2  s   zLen.genericNr&   r#   r#   r#   r$   r   0  r*   r   c                   @   r   )TupleConstructorc                 C   sB   |rJ t |dkrttdS |\}t|tjrt||S d S )Nr   r#   )r   r   r   TuplerV   r   r   r#   r#   r$   r%   <  s   
zTupleConstructor.genericNr&   r#   r#   r#   r$   r   :  r*   r   c                   @   r   )Containsc                 C   s.   |rJ |\}}t |tjrttj||S d S r-   )rV   r   Sequencer   r`   )r   r   r    seqr   r#   r#   r$   r%   I  s
   zContains.genericNr&   r#   r#   r#   r$   r  G  r*   r  c                   @   r   )	TupleBoolc                 C   s*   |rJ |\}t |tjrttj|S d S r-   )rV   r   r   r   r`   r   r#   r#   r$   r%   R  rZ   zTupleBool.genericNr&   r#   r#   r#   r$   r  P  r*   r  c                   @   r+   )StaticGetItemTuplestatic_getitemc                 C   s   |\}}d }t |tjsd S t |tr'z|j| }W n ty&   tdw t |tr5tj|j| }|d urCt	|g|R  }|S d S )Nztuple index out of range)
rV   r   r   int
IndexErrorr   NumbaIndexErrorslicer   r   r   r   r    tupr   retr"   r#   r#   r$   r%   ]  s    


zStaticGetItemTuple.genericNr0   r#   r#   r#   r$   r  Y  r2   r  c                   @   r+   )StaticGetItemLiteralListr  c                 C   sP   |\}}d }t |tjsd S t |tr|j| }|d ur&t|g|R  }|S d S r-   )rV   r   LiteralListr  r   r  r#   r#   r$   r%   r  s   

z StaticGetItemLiteralList.genericNr0   r#   r#   r#   r$   r  n  r2   r  c                   @   r+   )StaticGetItemLiteralStrKeyDictr  c                 C   sz   |\}}d }t |tjsd S t |tr-||jv r|j|}n	td| d|j| }|d ur;t|g|R  }|S d S )NzKey 'z' is not in dict.)	rV   r   LiteralStrKeyDictstrfieldsr   r   NumbaKeyErrorr   )r   r   r    r  r   r  lookupr"   r#   r#   r$   r%     s   


z&StaticGetItemLiteralStrKeyDict.genericNr0   r#   r#   r#   r$   r  ~  r2   r  c                   @   r+   )GenericNotInznot inc                 C   s>   |d d d }| j tj||}t|jg|jd d d R  S )N)r   r   operatorcontainsr   r   r   )r   r   r    r"   r#   r#   r$   r%     s   zGenericNotIn.genericNr0   r#   r#   r#   r$   r    r2   r  c                   @   sZ   e Zd ZejZdd Zdd Zdd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd ZdS )MemoryViewAttributec                 C      t jS r-   r   r`   r   bufr#   r#   r$   resolve_contiguous     z&MemoryViewAttribute.resolve_contiguousc                 C   r  r-   r  r  r#   r#   r$   resolve_c_contiguous  r!  z(MemoryViewAttribute.resolve_c_contiguousc                 C   r  r-   r  r  r#   r#   r$   resolve_f_contiguous  r!  z(MemoryViewAttribute.resolve_f_contiguousc                 C   r  r-   r   rI   r  r#   r#   r$   resolve_itemsize  r!  z$MemoryViewAttribute.resolve_itemsizec                 C   r  r-   r$  r  r#   r#   r$   resolve_nbytes  r!  z"MemoryViewAttribute.resolve_nbytesc                 C   r  r-   r  r  r#   r#   r$   resolve_readonly  r!  z$MemoryViewAttribute.resolve_readonlyc                 C      t t j|jS r-   r   r   rI   ndimr  r#   r#   r$   resolve_shape     z!MemoryViewAttribute.resolve_shapec                 C   r(  r-   r)  r  r#   r#   r$   resolve_strides  r,  z#MemoryViewAttribute.resolve_stridesc                 C   r  r-   r$  r  r#   r#   r$   resolve_ndim  r!  z MemoryViewAttribute.resolve_ndimN)r'   r(   r)   r   
MemoryViewr1   r   r"  r#  r%  r&  r'  r+  r-  r.  r#   r#   r#   r$   r    s    r  c                   @   s*   e Zd ZejZdd Zeddd ZdS )BooleanAttributec                 C   
   t |S r-   r   NumberClassr   r8   r#   r#   r$   resolve___class__     
z"BooleanAttribute.resolve___class__number.itemc                 C      |rJ |s
t |S d S r-   r5   r   r8   r   r    r#   r#   r$   resolve_item     zBooleanAttribute.resolve_itemN)	r'   r(   r)   r   Booleanr1   r5  r   r:  r#   r#   r#   r$   r0    s
    r0  c                   @   sJ   e Zd ZejZdd Zdd Zdd Ze	ddd	 Z
e	d
dd ZdS )NumberAttributec                 C   r1  r-   r2  r4  r#   r#   r$   r5    r6  z!NumberAttribute.resolve___class__c                 C      t |d|S Nr;   getattrr4  r#   r#   r$   resolve_real     zNumberAttribute.resolve_realc                 C   r>  r?  r@  r4  r#   r#   r$   resolve_imag  rC  zNumberAttribute.resolve_imagzcomplex.conjugatec                 C   s   |rJ |rJ t |S r-   r5   r9  r#   r#   r$   resolve_conjugate  s   z!NumberAttribute.resolve_conjugater7  c                 C   r8  r-   r5   r9  r#   r#   r$   r:    r;  zNumberAttribute.resolve_itemN)r'   r(   r)   r   Numberr1   r5  rB  rD  r   rE  r:  r#   r#   r#   r$   r=    s    
r=  c                   @      e Zd ZejZdd ZdS )NPTimedeltaAttributec                 C   r1  r-   r2  r4  r#   r#   r$   r5    r6  z&NPTimedeltaAttribute.resolve___class__N)r'   r(   r)   r   NPTimedeltar1   r5  r#   r#   r#   r$   rH        rH  c                   @   rG  )NPDatetimeAttributec                 C   r1  r-   r2  r4  r#   r#   r$   r5    r6  z%NPDatetimeAttribute.resolve___class__N)r'   r(   r)   r   
NPDatetimer1   r5  r#   r#   r#   r$   rK    rJ  rK  c                   @   s:   e Zd ZejZdd Zdd Zdd Ze	ddd	 Z
d
S )SliceAttributec                 C   r  r-   r$  r4  r#   r#   r$   resolve_start  r!  zSliceAttribute.resolve_startc                 C   r  r-   r$  r4  r#   r#   r$   resolve_stop  r!  zSliceAttribute.resolve_stopc                 C   r  r-   r$  r4  r#   r#   r$   resolve_step  r!  zSliceAttribute.resolve_stepzslice.indicesc                 C   s\   |rJ t |dkrtdt | |\}t|tjs#td| tttjdtjS )N   z/indices() takes exactly one argument (%d given)z/'%s' object cannot be interpreted as an integer   )	r   r   NumbaTypeErrorrV   r   rz   r   r   rI   )r   r8   r   r    typr#   r#   r$   resolve_indices  s   
zSliceAttribute.resolve_indicesN)r'   r(   r)   r   r   r1   rN  rO  rP  r   rU  r#   r#   r#   r$   rM    s    rM  c                   @   rG  )NumberClassAttributec                    s&   |j  fdd}tt|dS )zN
        Resolve a number class's constructor (e.g. calling int(...))
        c                    s   t | tjtjfr  jtj}| j| t	fi }|j
S t | tjtjtjfr-S t | tjtjfrNjdkr=S d|  d d d}t|t | tjr`| jdkr`| jkr`S d|  d d}t | tjrw|d	 d
7 }t|)N@   zCannot cast z to z as z is not 64 bits wide.r   zCasting z directly is unsupported.z Try doing '<array>.astype(np.z
)' instead)rV   r   r   r  r   resolve_value_typenparrayget_call_typeDTyper   rF  r<  IntEnumMemberrL  rI  rp   r   TypingErrorArrayr*  r   )r   fntyr"   msgr4  r#   r$   typer#  s*   


z4NumberClassAttribute.resolve___call__.<locals>.typerr1   rb  )instance_typer   Functionr   )r   classtyrb  r#   r4  r$   resolve___call__  s    z%NumberClassAttribute.resolve___call__N)r'   r(   r)   r   r3  r1   rg  r#   r#   r#   r$   rV    rJ  rV  c                   @   rG  )TypeRefAttributec                    sP   |j  t tr$t tjr&G  fdddt}tt || j	dS dS dS )a?  
        Resolve a number class's constructor (e.g. calling int(...))

        Note:

        This is needed because of the limitation of the current type-system
        implementation.  Specifically, the lack of a higher-order type
        (i.e. passing the ``DictType`` vs ``DictType(key_type, value_type)``)
        c                       s    e Zd Zdd Z fddZdS )z3TypeRefAttribute.resolve___call__.<locals>.Redirectc                 S   s
   || _ d S r-   )r   )r   r   r#   r#   r$   __init__`  r6  z<TypeRefAttribute.resolve___call__.<locals>.Redirect.__init__c                    s&   | j  ||}t|dr|j| _|S )Npysig)r   r   hasattrrj  )r   r   kwargsresultr8   r#   r$   __call__c  s   
z<TypeRefAttribute.resolve___call__.<locals>.Redirect.__call__N)r'   r(   r)   ri  ro  r#   rn  r#   r$   Redirect^  s    rp  rc  N)
rd  rV   type
issubclassr   Typeobjectre  r   r   )r   rf  rp  r#   rn  r$   rg  J  s   
z!TypeRefAttribute.resolve___call__N)r'   r(   r)   r   TypeRefr1   rg  r#   r#   r#   r$   rh  F  rJ  rh  c                   @   s   e Zd Zdd Zdd ZdS )
MinMaxBasec                 C   s2   |D ]}t |tjtjtjfs d S q| jj| S r-   )rV   r   rF  rL  rI  r   unify_types)r   tysr8   r#   r#   r$   _unify_minmaxr  s
   zMinMaxBase._unify_minmaxc                 C   s~   |rJ |sdS t |dkr*t|d tjr(t|d }|s'td| jjf ndS |}| |}|dur=t	|g|R  S dS )z0
        Resolve a min() or max() call.
        NrQ  r   z%s() argument is an empty tuple)
r   rV   r   r   r   r   r1   r'   ry  r   )r   r   r    rx  rettyr#   r#   r$   r%   x  s"   
zMinMaxBase.genericN)r'   r(   r)   ry  r%   r#   r#   r#   r$   rv  p  s    rv  c                   @   r   )MaxNr   r#   r#   r#   r$   r{    r   r{  c                   @   r   )MinNr   r#   r#   r#   r$   r|    r   r|  c                   @   sH   e Zd ZeejejeejejeejejejeejejejgZ	dS )RoundN)
r'   r(   r)   r   r   rI   r   rP   r   rF   r#   r#   r#   r$   r}    s    r}  c                   @   r   )Boolc                 C   s>   |rJ |\}t |tjtjfrttj|S | jtj	||S r-   )
rV   r   r<  rF  r   r`   r   r   r  truthr.   r#   r#   r$   r%     s
   zBool.genericNr&   r#   r#   r#   r$   r~        r~  c                   @   r   )Intc                 C   sL   |rt d|\}t|tjrt||S t|tjtjfr$ttj|S d S )Nzkws not supported)	r   NumbaAssertionErrorrV   r   rz   r   Floatr<  rI   r.   r#   r#   r$   r%     s   

zInt.genericNr&   r#   r#   r#   r$   r    r  r  c                   @   r   )r  c                 C   sd   |rJ |\}|t jvrtd|t jv rtd|t jv r&tt j|S |t jv r0t||S d S )Nz float() only support for numbersz float() does not support complex)	r   number_domainr   rS  rD   integer_domainr   r   rB   r.   r#   r#   r$   r%     s   






zFloat.genericNr&   r#   r#   r#   r$   r    r  r  c                   @   r   )Complexc                 C   s   |rJ t |dkr(|\}|tjvrtd|tjkr"ttj|S ttj|S t |dkr\|\}}|tjvs<|tjvrAtd||  krLtjkrUn nttj||S ttj||S d S )NrQ  z"complex() only support for numbersr   )	r   r   r  r   rS  r   r   	complex64
complex128)r   r   r    r/   realimagr#   r#   r$   r%     s$   




zComplex.genericNr&   r#   r#   r#   r$   r    r  r  c                   @   r   )	Enumeratec                 C   st   |rJ |d }t |dkrt|d tjstdt |dkr%t|  t|tjr8t|}t	|g|R  S d S )Nr   rQ  z3Only integers supported as start value in enumerater   )
r   rV   r   rz   r   rS  	enumeraterW   EnumerateTyper   )r   r   r    rb   enumerate_typer#   r#   r$   r%     s   

zEnumerate.genericNr&   r#   r#   r#   r$   r    r  r  c                   @   r   )Zipc                 C   s8   |rJ t dd |D rt|}t|g|R  S d S )Nc                 s   s    | ]	}t |tjV  qd S r-   )rV   r   rW   )r7   rb   r#   r#   r$   rs     s    zZip.generic.<locals>.<genexpr>)allr   ZipTyper   )r   r   r    zip_typer#   r#   r$   r%     s
   
zZip.genericNr&   r#   r#   r#   r$   r    r  r  c                   @   r   )Iterc                 C   B   |rJ t |dkr|d }t|tjrt|jg|R  S d S d S NrQ  r   )r   rV   r   rW   r   rX   ra   r#   r#   r$   r%        zIter.genericNr&   r#   r#   r#   r$   r    r  r  c                   @   r   )Nextc                 C   r  r  )r   rV   r   r]   r   r_   ra   r#   r#   r$   r%      r  zNext.genericNr&   r#   r#   r#   r$   r    r  r  c                   @   r   )TypeBuiltinc                 C   sP   |rJ t |dkr$t|d }| j|d}|d ur&t|g|R  S d S d S )NrQ  r   	__class__)r   r   	unliteralr   resolve_getattrr   )r   r   r    r/   rf  r#   r#   r$   r%   -  s   zTypeBuiltin.genericNr&   r#   r#   r#   r$   r  *  r  r  c                   @   rG  )OptionalAttributec                 C   s   | j |j|S r-   )r   r  rq  )r   optionalattrr#   r#   r$   generic_resolve>  r,  z!OptionalAttribute.generic_resolveN)r'   r(   r)   r   Optionalr1   r  r#   r#   r#   r$   r  :  rJ  r  c                   @   rG  )DeferredAttributec                 C   s   | j | |S r-   )r   r  get)r   deferredr  r#   r#   r$   r  G  s   z!DeferredAttribute.generic_resolveN)r'   r(   r)   r   DeferredTyper1   r  r#   r#   r#   r$   r  C  rJ  r  c                   @   r   )MinValInferc                 C   sH   |rJ t |dksJ t|d tjtjfr"t|d jg|R  S d S r  )r   rV   r   r\  r3  r   r   )r   r   r    r#   r#   r$   r%   O  s
   zMinValInfer.genericNr&   r#   r#   r#   r$   r  L  r  r  c                   @   s    e Zd ZdZdd Zdd ZdS )
IndexValuez
    Index and value
    c                 C   s   || _ || _d S r-   r   value)r   indr   r#   r#   r$   ri  ]  s   
zIndexValue.__init__c                 C   s   d| j | jf S )NzIndexValue(%f, %f)r  )r   r#   r#   r$   __repr__a  r,  zIndexValue.__repr__N)r'   r(   r)   rj   ri  r  r#   r#   r#   r$   r  Y  s    r  c                       s   e Zd Z fddZ  ZS )IndexValueTypec                    s"   || _ tt| jd|d d S )NzIndexValueType({}))name)val_typsuperr  ri  format)r   r  r  r#   r$   ri  f  s   

zIndexValueType.__init__)r'   r(   r)   ri  __classcell__r#   r#   r  r$   r  e  s    r  c                 C   s   t | j|}t|S r-   )r   r  r  )r   cr  r#   r#   r$   typeof_indexl  s   r  c                 C   s   dd }|S )Nc                 S   s    | t jks
| t jkrt|S d S r-   )r   rI   r   r  )r  mvalr#   r#   r$   rb  t  s   ztype_index_value.<locals>.typerr#   )r   rb  r#   r#   r$   type_index_valuer  s   r  c                   @   r   )IndexValueModelc                 C   s*   dt jfd|jfg}tj| ||| d S )Nr   r  )r   rI   r  r   StructModelri  )r   dmmfe_typemembersr#   r#   r$   ri  |  s   zIndexValueModel.__init__N)r'   r(   r)   ri  r#   r#   r#   r$   r  z  r*   r  r   r  )r   numpyrY  r  
numba.corer   r   numbar   numba.parfors.parforr   numba.core.typing.templatesr   r   r   r	   r
   r   r   r   r   numba.cpython.builtinsr   r   numba.core.extendingr   r   r   r   r   printr   r,   absr3   r  rG   rangerL   rS   r[   rd   rl   rw   r|   r=   setrI   rP   r   rR   r   r   r   r   r   addr   iaddsubr   isubmulr   imulmodr   imodtruedivr   itruedivfloordivr   	ifloordivdivmodr   powr   ipowr   r   lshiftr   ilshiftrshiftr   irshiftr   and_r   iandor_r   iorxorr   ixorinvertr   r   negr   posr   not_r   r   r   ltr   ler   gtr   ger   eqr   ner   r   r   r   r   r   r   r   r   r   r   r   is_r   is_notr   r   getitemr   setitemr   r   r   r   r  r  r  r  r  r  r  r  r  r0  r=  rH  rK  rM  rV  rh  rv  ru   r{  minr|  roundr}  boolr~  r  r  floatr  complexr  r  r  r   r  iterr  nextr  rq  r  r  r  r  rt  r  rs  r  registerr  r  r  r  r#   r#   r#   r$   <module>   s   ,		





	",)!	


	