o
    V۷i,                  	   @   s(  d dl mZmZmZ d dlZddlmZmZmZ de	de	dee	e	f fdd	Z
de	de	dejfd
dZejdddejdejddfddZdejdejddfddZ	 ddeeef dejde	ddfddZdedeeee	f  dejddfddZdedeeee	ee	 f  dejddfddZdS )     )TupleListUnionN   )	LLMatcher
LLExecutorLLInterpreter
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/torch.pyget_bitmask_shape   s   r   c                 C   s    t jt| |dt jt j dS )N)dtype
pin_memory)torchfullr   int32cudais_availabler   r   r   r   allocate_token_bitmask
   s   r   T)dynamiclogitsmaskc                 C   sn   t j|ddd}t jd| jt jd|jd }||? d@ }|d d d | jd f }| |dktd d S )Nr   r   )dim)devicer   r   -inf)	r   repeat_interleavearanger   r   repeatshapemasked_fill_float)r   r   mask_expandedbit_indices	bit_masksr   r   r   "apply_token_bitmask_inplace_kernel   s   
r*   c                 C   s   |   dkr| d} |  dkr|d}|jtjks J d|   dks*J d| j\}}|j\}}||ks<J dd| }||krZtd| d d |d f< | d d d |f } t| | d S )	Nr   r   Mask must be int32   zLogits must be 2DzBatch size mismatchr   r    )r   	unsqueezer   r   r   r$   r&   r*   )r   r   batchvocabm_batchm_vocabcutoffr   r   r   apply_token_bitmask_inplace   s   



r3   interpbitmaskindexc                 C   sv   |j tjks
J d|jsJ d| dksJ d||d d f }| s+J d| | | |	   d S )Nr+   Mask must be on CPUr,   Mask must be 2DMask must be contiguous)
r   r   r   is_cpur   is_contiguousunsafe_compute_mask_ptrdata_ptrnumelelement_size)r4   r5   r6   vr   r   r   fill_next_token_bitmask0   s    rA   executormatchersc                 C   l   |j tjks
J d|jsJ d| dksJ d|j\}}| s(J d| || |d | d S Nr+   r7   r,   r8   r9      )	r   r   r   r:   r   r$   r;   r<   r=   rB   rC   r5   r.   r/   r   r   r   fill_next_token_bitmask_par;   s   
rH   c                 C   rD   rE   )	r   r   r   r:   r   r$   r;   (unsafe_compute_mask_ptr_with_draft_tokenr=   rG   r   r   r   -fill_next_token_bitmask_par_with_draft_tokensG   s   
rJ   )r   )typingr   r   r   r   _libr   r   r   intr   Tensorr   compiler*   r3   rA   rH   rJ   r   r   r   r   <module>   sL    
	



