
    
`i,              	          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Z
de	de	dej        fd	Z ej        d
          dej        dej        ddfd            Zdej        dej        ddfdZ	 ddeeef         dej        de	ddfdZdedeeee	f                  dej        ddfdZdedeeee	ee	         f                  dej        ddfdZdS )    )TupleListUnionN   )	LLMatcher
LLExecutorLLInterpreter
batch_size
vocab_sizereturnc                     | |dz   dz  fS )N        r
   r   s     d/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/llguidance/torch.pyget_bitmask_shaper      s    bR/00    c                     t          j        t          | |          dt           j        t           j                                                  S )N)dtype
pin_memory)torchfullr   int32cudais_availabler   s     r   allocate_token_bitmaskr   
   sA    :*j11
k:**,,	   r   T)dynamiclogitsmaskc                 L   t          j        |dd          }t          j        d| j        t           j                                      |j        d                   }||z	  dz  }|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_maskss        r   "apply_token_bitmask_inplace_kernelr/      s     +D"!<<<M,r&-%*[2 2 228&A2G2G +-2I!!!-fl1o--.I
	Qf66666r   c                    |                                  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|z  }||k    r&t          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cutoffs          r   apply_token_bitmask_inplacer9      s   zz||q!!!$$xxzzQ~~a  :$$$&:$$$::<<11<LE5zGWG2'\Fv~~"6]]qqq&''z7F7
#&vt44444r   interpbitmaskindexc                    |j         t          j        k    s
J d            |j        s
J d            |                                dk    s
J d            ||d d f         }|                                s
J d            |                     |                                |                                |	                                z             d S )Nr1   Mask must be on CPUr2   Mask must be 2DMask must be contiguous)
r   r   r   is_cpur#   is_contiguousunsafe_compute_mask_ptrdata_ptrnumelelement_size)r:   r;   r<   vs       r   fill_next_token_bitmaskrH   0   s     =EK''')='''>00000>;;==A0qqqA??77777
""1::<<Q^^=M=M1MNNNNNr   executormatchersc                 T   |j         t          j        k    s
J d            |j        s
J d            |                                dk    s
J d            |j        \  }}|                                s
J d            |                     ||                                |dz  |           d S Nr1   r>   r2   r?   r@      )	r   r   r   rA   r#   r)   rB   rC   rD   rI   rJ   r;   r4   r5   s        r   fill_next_token_bitmask_parrO   ;   s     =EK''')='''>00000>;;==A0=LE5  ""==$==="$$Xw/?/?/A/A519%*, , , , ,r   c                 T   |j         t          j        k    s
J d            |j        s
J d            |                                dk    s
J d            |j        \  }}|                                s
J d            |                     ||                                |dz  |           d S rL   )	r   r   r   rA   r#   r)   rB   (unsafe_compute_mask_ptr_with_draft_tokenrD   rN   s        r   -fill_next_token_bitmask_par_with_draft_tokensrR   G   s     =EK''')='''>00000>;;==A0=LE5  ""==$==="55h@P@P@R@RTY\]T]_deeeeer   )r   )typingr   r   r   r   _libr   r   r	   intr   Tensorr   compiler/   r9   rH   rO   rR   r   r   r   <module>rX      s   % % % % % % % % % %  6 6 6 6 6 6 6 6 6 61# 13 15c? 1 1 1 1s       t7u| 7-2\7>B7 7 7 75 5&+l57;5 5 5 5( *+O OE)]*B$C O%*\O#&O/3O O O O	,* 	,*.uY^/D*E	,).	,:>	, 	, 	, 	,fJ f*.uYT#Y5N/O*Pf).f:>f f f f f fr   