o
    V۷i                  	   @   s8  d dl mZmZ d dlZd dlmZ ddlmZm	Z	 de
de
dee
e
f fd	d
Zde
de
deej fddZdeej deej ddfddZdeej deej ddfddZ	 ddedeej de
ddfddZde	deeee
f  deej ddfddZde	deeee
ee
 f  deej ddfddZdS )    )TupleListN)NDArray   )	LLMatcher
LLExecutor
batch_size
vocab_sizereturnc                 C   s   | |d d fS )N        r   r	   r   r   F/home/ubuntu/vllm_env/lib/python3.10/site-packages/llguidance/numpy.pyget_bitmask_shape   s   r   c                 C   s   t jt| |dt jdS )Ndtype)npfullr   int32r   r   r   r   allocate_token_bitmask   s
   r   logitsmaskc                 C   sh   t j|ddd}t t jdt jd|jd }||? d@ }|d d d | jd f }t j | |dk< d S )Nr   r   axisr   r   )r   repeattilearanger   shapeinf)r   r   mask_expandedbit_indices	bit_masksr   r   r   "apply_token_bitmask_inplace_kernel   s
   r$   c                 C   s   | j dkrtj| dd} |j dkrtj|dd}|jtjks"J d| j dks+J d| j\}}|j\}}||ks=J dd| }||kr[tj | d d |d f< | d d d |f } t| | d S )	Nr   r   r   Mask must be int32   zLogits must be 2DzBatch size mismatchr   )ndimr   expand_dimsr   r   r   r    r$   )r   r   batchvocabm_batchm_vocabcutoffr   r   r   apply_token_bitmask_inplace   s   



r.   interpbitmaskindexc                 C   sd   |j tjks
J d|jdksJ d||d d f }|jd s$J d| |jj|j|j	  d S )Nr%   r&   Mask must be 2DC_CONTIGUOUSMask must be contiguous)
r   r   r   r'   flagsunsafe_compute_mask_ptrctypesdatasizeitemsize)r/   r0   r1   vr   r   r   fill_next_token_bitmask/   s
   r<   executormatchersc                 C   ^   |j tjks
J d|jdksJ d|j\}}|jd s!J d| ||jj|d | dS z
    Compute the token mask directly into the specified array.
    For each matcher, provide the index of the target mask.
    r%   r&   r2   r3   r4      N)	r   r   r   r'   r   r5   r6   r7   r8   r=   r>   r0   r)   r*   r   r   r   fill_next_token_bitmask_par9   
   
rC   c                 C   r?   r@   )	r   r   r   r'   r   r5   (unsafe_compute_mask_ptr_with_draft_tokenr7   r8   rB   r   r   r   -fill_next_token_bitmask_par_with_draft_tokensG   rD   rF   )r   )typingr   r   numpyr   numpy.typingr   _libr   r   intr   r   r   float32r$   r.   r<   rC   rF   r   r   r   r   <module>   sT    
	
	



