U
    ,‰dZ  ã                   @   s  d Z ddlZddlmZmZmZmZmZmZ ddl	m
Z
 ddlmZ eeje
je
jƒdd„ ƒZeeje
je
jƒdd	„ ƒZeeje
je
jƒd
d„ ƒZee
jdƒdd„ ƒZee
je
jƒdd„ ƒZee
jƒdd„ ƒZee
jƒdd„ ƒZede
je
jƒdd„ ƒZee
jdƒdd„ ƒZdS )z
Implementation of enums.
é    N)Úlower_builtinÚlower_getattrÚlower_getattr_genericÚ
lower_castÚlower_constantÚimpl_ret_untracked)Útypes)Úoverload_methodc           	      C   s@   |j \}}|\}}|  |tj|j|jf||f¡}t| ||j|ƒS ©N)ÚargsÚgeneric_compareÚoperatorÚeqÚdtyper   Úreturn_type©	ÚcontextÚbuilderÚsigr   ZtuÚtvÚuÚvÚres© r   ú:/tmp/pip-unpacked-wheel-eu7e0c37/numba/cpython/enumimpl.pyÚenum_eq   s    


 ÿr   c           	      C   sX   |j \}}|\}}||kr:|  |tj|j|jf||f¡}n|  |jd¡}t| ||j|ƒS )NF)r   r   r   r   r   Zget_constantr   r   r   r   r   r   Úenum_is   s    


 ÿr   c           	      C   s@   |j \}}|\}}|  |tj|j|jf||f¡}t| ||j|ƒS r
   )r   r   r   Úner   r   r   r   r   r   r   Úenum_ne"   s    


 ÿr   Úvaluec                 C   s   |S r
   r   )r   r   ÚtyÚvalr   r   r   Ú
enum_value+   s    r"   c                 C   s   |   |||j|¡S )z=
    Convert an IntEnum member to its raw integer value.
    )Úcastr   )r   r   ZfromtyZtotyr!   r   r   r   Úint_enum_to_int0   s    r$   c                 C   s   |   ||j|j¡S )zB
    Return a LLVM constant representing enum member *pyval*.
    )Úget_constant_genericr   r   )r   r   r    Zpyvalr   r   r   Úenum_constant8   s    r&   c                 C   s   t |j|ƒ}|  ||j|j¡S )z2
    Return an enum member by attribute name.
    )ÚgetattrÚinstance_classr%   r   r   )r   r   r    r!   ÚattrÚmemberr   r   r   Úenum_class_getattr@   s    r+   Zstatic_getitemc                 C   s(   |j \}}|j|j }|  ||j|j¡S )z.
    Return an enum member by index name.
    )r   r(   Zliteral_valuer%   r   r   )r   r   r   r   Zenum_cls_typÚidxr*   r   r   r   Úenum_class_getitemI   s
    

ÿr-   Ú__hash__c                 C   s   dd„ }|S )Nc                 S   s
   t | jƒS r
   )Úhashr   )r!   r   r   r   Ú	hash_implW   s    zintenum_hash.<locals>.hash_implr   )r!   r0   r   r   r   Úintenum_hashT   s    r1   )Ú__doc__r   Znumba.core.imputilsr   r   r   r   r   r   Z
numba.corer   Znumba.core.extendingr	   r   Z
EnumMemberr   Úis_r   r   r   r"   ZIntEnumMemberZIntegerr$   r&   Z	EnumClassr+   ZStringLiteralr-   r1   r   r   r   r   Ú<module>   s,    










