B
      ›\
  ã               @   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
 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dS )z
Implementation of enums.
é    Né   )Úlower_builtinÚlower_getattrÚlower_getattr_genericÚ
lower_castÚlower_constantÚimpl_ret_untrackedé   )Útypesc       	      C   s@   |j \}}|\}}|  |tj|j|jf||f¡}t| ||j|ƒS )N)ÚargsÚgeneric_compareÚoperatorÚeqÚdtyper   Úreturn_type)	ÚcontextÚbuilderÚsigr   ÚtuÚtvÚuÚvÚres© r   ú5lib/python3.7/site-packages/numba/targets/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   r   r   r   r   r   r   r   r   Úenum_is   s    

r   c       	      C   s@   |j \}}|\}}|  |tj|j|jf||f¡}t| ||j|ƒS )N)r   r   r   Úner   r   r   )	r   r   r   r   r   r   r   r   r   r   r   r   Úenum_ne    s
    

r   Úvaluec             C   s   |S )Nr   )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_int.   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_constant6   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_getitemG   s    

r-   )Ú__doc__r   Zimputilsr   r   r   r   r   r   Ú r
   r   Z
EnumMemberr   Úis_r   r   r   r"   ZIntEnumMemberZIntegerr$   r&   Z	EnumClassr+   ZStringLiteralr-   r   r   r   r   Ú<module>   s    			