o
    ]۷iP                     @   s:   zd dl Z dZW n ey   dZY nw G dd dZdS )    NTFc                   @   s<   e Zd ZdedefddZdd Zdd Zd	efd
dZdS )	TokenListuse_bitmask
vocab_sizec                 C   sH   || _ |rtstd| j r|d d }tj|tjd| _d S g | _d S )Nz'LMFormatEnforcer bitmasks require torch       )dtype)r   
_HAS_TORCH
ValueErrortorchzerosint32allowed_tokens)selfr   r   tensor_size r   P/home/ubuntu/vllm_env/lib/python3.10/site-packages/lmformatenforcer/tokenlist.py__init__   s   
zTokenList.__init__c                 C   s@   | j r|d? }|d@ }| j|  d|> O  < d S | j| d S N   r      )r   r   appendr   token_idelement_index	bit_indexr   r   r   r      s
   zTokenList.appendc                 C   sj   | j r-t|tjrtj| j| d S |D ]}|d? }|d@ }| j|  d|> O  < qd S | j| d S r   )r   
isinstancer
   Tensorbitwise_or_r   extend)r   	token_idsr   r   r   r   r   r   r      s   zTokenList.extendreturnc                 C   s6   | j r|d }|d }| j| d|> @ dkS || jv S )Nr   r   r   )r   r   r   r   r   r   is_token_allowed)   s
   
zTokenList.is_token_allowedN)	__name__
__module____qualname__boolintr   r   r   r!   r   r   r   r   r      s
    r   )r
   r   ImportErrorr   r   r   r   r   <module>   s    