o
    i	                     @   s<   d Z ddlmZmZ G dd deZG dd deedZdS )	a/  
This is a replacement for the stdlib enum.IntEnum.

Notably, it has much better import time performance, since it doesn't generate
and evaluate Python code at startup time.

It supports the most important subset of the IntEnum API.  See `test_enum` in
`cuda_bindings/tests/test_basics.py` for details.
    )AnyIteratorc                       s\   e Zd Z fddZdefddZdefddZded fd	d
Z	de
defddZ  ZS )FastEnumMetaclassc                    s   t  ||| i | _i | _| j D ]8\}}|dr"|dr"qt|t	r,|\}}n	t|t
r4d }nqt
| |}||_||_|| j|< || j|< q| j D ]
\}}t| || qQd S )N__)super__init____singletons____members____dict__items
startswithendswith
isinstancetupleint__new____doc___namesetattr)clsnamebases	namespacevaluedoc	singletonmember	__class__ V/home/ubuntu/.local/lib/python3.10/site-packages/cuda/bindings/_internal/_fast_enum.pyr      s&   



zFastEnumMetaclass.__init__returnc                 C   s   d| j  dS )Nz<enum 'z'>)__name__r   r   r   r    __repr__/      zFastEnumMetaclass.__repr__c                 C   s
   t | jS N)lenr	   r#   r   r   r    __len__2      
zFastEnumMetaclass.__len__FastEnumc                 C   s   t | j S r&   )iterr	   valuesr#   r   r   r    __iter__5   r%   zFastEnumMetaclass.__iter__itemc                 C   s
   || j v S r&   )r   )r   r.   r   r   r    __contains__8   r)   zFastEnumMetaclass.__contains__)r"   
__module____qualname__r   strr$   r   r(   r   r-   r   boolr/   __classcell__r   r   r   r    r      s    r   c                   @   sP   e Zd Zdedd fddZdefddZedefddZedefd	d
Z	dS )r*   r   r!   c                 C   s,   | j |}|d u rt| d| j |S )Nz is not a valid )r   get
ValueErrorr"   )r   r   r   r   r   r    r   =   s   zFastEnum.__new__c                 C   s"   d| j j d| j dt|  dS )N<.z: >)r   r"   r   r   selfr   r   r    r$   C   s   "zFastEnum.__repr__c                 C   s   | j S r&   )r   r:   r   r   r    r   F   s   zFastEnum.namec                 C   s   t | S r&   )r   r:   r   r   r    r   J   s   zFastEnum.valueN)
r"   r0   r1   r   r   r2   r$   propertyr   r   r   r   r   r    r*   <   s    r*   )	metaclassN)r   typingr   r   typer   r   r*   r   r   r   r    <module>   s   
'