o
    ÔÙ¾im  ã                   @   sX   d Z ddlmZmZmZ ddlZddlmZmZm	Z	 G dd„ de	ƒZ
G dd	„ d	eƒZdS )
zLThe baseclass of a backend for reasoner grammar-guided constrained decoding.é    )ÚListÚOptionalÚTupleNé   )ÚINVALID_GRAMMAR_OBJÚBaseGrammarBackendÚBaseGrammarObjectc                       s  e Zd Zdedef‡ fdd„Zdefdd„Zded	efd
d„Zdd„ Z	defdd„Z
dd„ Zdd„ Zdeded	ejfdd„Zdejded	dfdd„Zdejd	ejfdd„Zedd „ ƒZd	efd!d"„Zed#d$„ ƒZejd%d$„ ƒZd&d'„ Zd(d)„ Zd*ee d+ee d,efd-d.„Z‡  ZS )/ÚReasonerGrammarObjectÚgrammarÚthink_end_idc                    s    t ƒ  ¡  || _|| _d| _d S )Néÿÿÿÿ)ÚsuperÚ__init__r
   r   Útokens_after_think_end)Úselfr
   r   ©Ú	__class__© úc/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/constrained/reasoner_grammar_backend.pyr      s   

zReasonerGrammarObject.__init__Ú	reasoningc                 C   s   |rd| _ d S d| _ d S )Nr   r   ©r   )r   r   r   r   r   Úmaybe_init_reasoning%   s   z*ReasonerGrammarObject.maybe_init_reasoningÚtokenÚreturnc                 C   s>   | j dkr|| jkrd| _ d S | j dkr|  j d7  _ d S d S )Nr   r   r   )r   r   ©r   r   r   r   r   Útransfer_state(   s
   

ÿz$ReasonerGrammarObject.transfer_statec                 C   s4   | j dkr
d| _ d S | j dkr|  j d8  _ d S d S )Nr   r   r   r   ©r   r   r   r   Úrollback_state.   s
   


ÿz$ReasonerGrammarObject.rollback_statec                 C   s$   | j dkr| j |¡ |  |¡ d S ©Nr   )r   r
   Úaccept_tokenr   r   r   r   r   r   4   s   
z"ReasonerGrammarObject.accept_tokenc                 C   s
   | j  ¡ S ©N)r
   Úis_terminatedr   r   r   r   r!   9   s   
z#ReasonerGrammarObject.is_terminatedc                 C   s:   t || jƒ}|dkr| j |¡ t|ƒD ]}|  ¡  qd S r   )Úminr   r
   ÚrollbackÚranger   )r   ÚkÚsteps_after_thinkÚ_r   r   r   r#   <   s   
ÿzReasonerGrammarObject.rollbackÚ
vocab_sizeÚ
batch_sizec                 C   ó   | j  |||¡S r    )r
   Úallocate_vocab_mask)r   r(   r)   Údevicer   r   r   r+   D   s   z)ReasonerGrammarObject.allocate_vocab_maskÚ
vocab_maskÚidxNc                 C   s    | j dkr| j ||¡ d S d S r   )r   r
   Úfill_vocab_mask)r   r-   r.   r   r   r   r/   I   s   
ÿz%ReasonerGrammarObject.fill_vocab_maskc                 C   s   | j  ||¡S r    )r
   Úmove_vocab_mask)r   r-   r,   r   r   r   r0   M   s   z%ReasonerGrammarObject.move_vocab_maskc                 C   ó   | j jS r    )r
   Úapply_vocab_maskr   r   r   r   r2   P   ó   z&ReasonerGrammarObject.apply_vocab_maskc                 C   s   t | j ¡ | jƒS r    )r	   r
   Úcopyr   r   r   r   r   r4   T   s   zReasonerGrammarObject.copyc                 C   r1   r    ©r
   Úfinishedr   r   r   r   r6   W   r3   zReasonerGrammarObject.finishedc                 C   s   || j _d S r    r5   )r   r6   r   r   r   r6   [   s   c                 C   ó   | j  |¡S r    )r
   Útry_jump_forward)r   Ú	tokenizerr   r   r   r8   _   ó   z&ReasonerGrammarObject.try_jump_forwardc                 C   r7   r    )r
   Újump_forward_str_state)r   Úhelperr   r   r   r;   b   r:   z,ReasonerGrammarObject.jump_forward_str_stateÚold_output_idsÚnew_output_idsÚ
next_statec                 C   r*   r    )r
   Újump_and_retokenize)r   r=   r>   r?   r   r   r   r@   e   s   ÿz)ReasonerGrammarObject.jump_and_retokenize)Ú__name__Ú
__module__Ú__qualname__r   Úintr   Úboolr   r   r   r   r!   r#   ÚtorchÚTensorr+   r/   r0   Úpropertyr2   r4   r6   Úsetterr8   r;   r   r@   Ú__classcell__r   r   r   r   r	      sB    	ÿÿ
þ


ÿÿÿr	   c                       sD   e Zd Zdef‡ fdd„Zdeeef dedee	 fdd„Z
‡  ZS )	ÚReasonerGrammarBackendÚgrammar_backendc                    s   t ƒ  ¡  || _|| _d S r    )r   r   rL   r   )r   rL   r   r   r   r   r   n   s   

zReasonerGrammarBackend.__init__Úkeyr   r   c                 C   s<   | j  ||¡}|d u s|tu r|S t|| jƒ}| |¡ |S r    )rL   Ú_init_value_dispatchr   r	   r   r   )r   rM   r   ÚretÚobjr   r   r   rN   s   s   
z+ReasonerGrammarBackend._init_value_dispatch)rA   rB   rC   r   r   r   ÚstrrE   r   r   rN   rJ   r   r   r   r   rK   m   s    
ÿÿþrK   )Ú__doc__Útypingr   r   r   rF   Úbase_grammar_backendr   r   r   r	   rK   r   r   r   r   Ú<module>   s   R