o
    0 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S )    )TupleListUnionN   )	LLMatcher
LLExecutorLLInterpreter
batch_size
vocab_sizereturnc                 C   s   | |d d fS )N        r	   r
   r   r   \/home/app/PaddleOCR-VL-test/.venv_paddleocr/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)dtypeZ
pin_memory)torchfullr   int32cudaZis_availabler   r   r   r   allocate_token_bitmask
   s   r   T)Z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   Zrepeat_interleaveZaranger   r   repeatshapeZmasked_fill_float)r   r   Zmask_expandedZbit_indicesZ	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   Z	unsqueezer   r   r   r   r    r!   )r   r   batchvocabZm_batchZm_vocabcutoffr   r   r   apply_token_bitmask_inplace   s   



r'   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_ptrZnumelZelement_size)r(   r)   r*   vr   r   r   fill_next_token_bitmask0   s    r3   executormatchersc                 C   sl   |j tjks
J d|jsJ d| dksJ d|j\}}| s(J d| || |d | d S )Nr"   r+   r#   r,   r-      )	r   r   r   r.   r   r   r/   r0   r1   )r4   r5   r)   r$   r%   r   r   r   fill_next_token_bitmask_par;   s   
r7   )r   )typingr   r   r   r   Z_libr   r   r   intr   ZTensorr   compiler!   r'   r3   r7   r   r   r   r   <module>   s>    
	


