o
    ۾i
                     @   sn   d Z ddlmZmZmZ ddlZddlmZ 		ddejdejdee	 d	eeee	 ejf  d
df
ddZ
dS )z4CPU implementation for in-place applying token mask.    )ListOptionalUnionN   )_corelogitsbitmask
vocab_sizeindicesreturnc                 C   s  | j jdkr
td|j jdkrtd|jtjkrtd|  dkr3|  dkr3td|  | dkrH| dkrHtd| |  dkrUd| jd	 fn	| jd	 | jd f}| 	 }|  dkro|d	 dfn|d	 |d f}| dkrd|jd	 fn	|jd	 |jd f}|	 }| dkr|d	 dfn|d	 |d f}|d
u rt
| jd |jd d n|}| jtjkrtj|  ||| ||||d	 d
S | jtjkrtj|  ||| ||||d	 d
S | jtjkrtj|  ||| ||||d	 d
S td)z$Apply token bitmask in-place on CPU.cpuzlogits must be on CPUzbitmask must be on CPUzbitmask must be of type int32   r   z&logits should be 1D or 2D, but got {}Dz'bitmask should be 1D or 2D, but got {}Dr   N    float32bfloat16float16z2logits must be of type float32 or bfloat16/float16)devicetype
ValueErrordtypetorchint32dimformatshapestrideminr   r   kernelsapply_token_bitmask_inplace_cpudata_ptrr   r   )r   r   r	   r
   logits_shapelogits_stridebitmask_shapebitmask_stride r%   d/home/ubuntu/.local/lib/python3.10/site-packages/xgrammar/kernels/apply_token_bitmask_inplace_cpu.pyr   
   sr   .&,&&r   )NN)__doc__typingr   r   r   r   baser   Tensorintr   r%   r%   r%   r&   <module>   s"    