
    
`i              	          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	Zde
de
deej                 fd
Zdeej                 deej                 ddfdZdeej                 deej                 ddfdZ	 ddedeej                 de
ddfdZde	deeee
f                  deej                 ddfdZde	deeee
ee
         f                  deej                 ddfdZdS )    )TupleListN)NDArray   )	LLMatcher
LLExecutor
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/numpy.pyget_bitmask_shaper      s    bR/00    c                 `    t          j        t          | |          dt           j                  S )Ndtype)npfullr   int32r   s     r   allocate_token_bitmaskr      s0    7*j11
h   r   logitsmaskc                    t          j        |dd          }t          j        t          j        dt           j                  |j        d                   }||z	  dz  }|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_maskss        r   "apply_token_bitmask_inplace_kernelr)      s    IdBQ///M'")Bbh777AGGK+-2I!!!-fl1o--.I fWF9>r   c                    | j         dk    rt          j        | d          } |j         dk    rt          j        |d          }|j        t          j        k    s
J d            | j         dk    s
J d            | j        \  }}|j        \  }}||k    s
J d            d|z  }||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cutoffs          r   apply_token_bitmask_inplacer4      s   {aQ///yA~~~d+++:!!!#7!!!;!0<LE5zGWG2'\Fv~~ fWqqq&''z7F7
#&vt44444r   interpbitmaskindexc                    |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	        z             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)r5   r6   r7   vs       r   fill_next_token_bitmaskrC   /   s     =BH$$$&:$$$<1/qqqA7>"==$==="
""18=!&1:2EFFFFFr   executormatchersc                     |j         t          j        k    s
J d            |j        dk    s
J d            |j        \  }}|j        d         s
J d            |                     ||j        j        |dz  |           dS z
    Compute the token mask directly into the specified array.
    For each matcher, provide the index of the target mask.
    r+   r,   r9   r:   r;      N)	r   r   r   r-   r$   r<   r=   r>   r?   rD   rE   r6   r/   r0   s        r   fill_next_token_bitmask_parrJ   9   s     =BH$$$&:$$$<1/=LE5=(CC*CCC($$Xw~/BEAIuUUUUUr   c                     |j         t          j        k    s
J d            |j        dk    s
J d            |j        \  }}|j        d         s
J d            |                     ||j        j        |dz  |           dS rG   )	r   r   r   r-   r$   r<   (unsafe_compute_mask_ptr_with_draft_tokenr>   r?   rI   s        r   -fill_next_token_bitmask_par_with_draft_tokensrM   G   s     =BH$$$&:$$$<1/=LE5=(CC*CCC(55h@SUZ]^U^`efffffr   )r   )typingr   r   numpyr   numpy.typingr   _libr   r   intr   r   r   float32r)   r4   rC   rJ   rM   r   r   r   <module>rT      s(                           ' ' ' ' ' ' ' '1# 13 15c? 1 1 1 1s '*/6rx/@   %wrz/B %-4RX->%CG% % % %5
(; 5&-bh&75<@5 5 5 5( *+G GI G%,RX%6G#&G/3G G G GV* V*.uY^/D*EV)0):V?CV V V VgJ g*.uYT#Y5N/O*Pg)0):g?Cg g g g g gr   