
    *`i              
          d dl Z d dlmZ d dlmZmZmZ d dlZd dlZddZ	ddZ
ddZ e	              e
              e              eed          o eej        d	          ZerCej                            d
          	 ddej        dej        deej                 ddfd            Z	 ddej        dej        deeee         ej        f                  ddfdZdS )    N)suppress)ListOptionalUnionreturnc                  V   ddl } ddl}ddl}ddlm} t
          j                                        st          d          |	                    d          }||j
                            d|j
                            dd                    }|A|j        dk    r4|                      d	          }t          |          dk    rd
}n|d         }nd}|t          d          t           ||          dz  dz            }|j                            |          st          d|           dS )z=check if nvcc is available and if pytorch will likely find itr   NPathz CUDA is not available in PyTorchnvcc	CUDA_HOME	CUDA_PATHntz7C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v*.* z/usr/local/cudazNo CUDA toolchain foundbinznvcc compiler not found at )globosshutilpathlibr
   torchcudais_availableImportErrorwhichenvirongetnamelenstrpathexists)r   r   r   r
   	nvcc_path	cuda_home
cuda_homess          /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/xgrammar/kernels/apply_token_bitmask_inplace_cuda.py_check_cuda_toolchainr%      sM   KKKIIIMMM :""$$ ><=== V$$IJNN;
{D0Q0QRR	w$!YY'`aa
z??a'' "II *1II-	7888Y%/&899	7>>)$$ EC	CCDDDE E    c                      g d} | D ]W}t          t                    5  t          j        j        j                            |           d d d            n# 1 swxY w Y   Xd S )N)z-D__CUDA_NO_HALF_OPERATORS__z-D__CUDA_NO_HALF_CONVERSIONS__z"-D__CUDA_NO_BFLOAT16_CONVERSIONS__z-D__CUDA_NO_HALF2_OPERATORS__)r   
ValueErrorr   utilscpp_extensionCOMMON_NVCC_FLAGSremove)REMOVE_NVCC_FLAGSflags     r$   _remove_torch_nvcc_flagsr/   <   s       " E Ej!! 	E 	EK%7>>tDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	EE Es   *AA	A	c            	         ddl m}   | t                                        d          }t	          |          5 }|                                }d d d            n# 1 swxY w Y   dg}t          j                    dk    r|                    d           g d}t          j
        j                            dg |g||d	d
           d S )Nr   r	   z.cu-O3Windowsz-Wno-switch-bool)r1   z
-std=c++17z	--threads4z-use_fast_mathxgrammarTF)r   cpp_sourcescuda_sourcesextra_cflagsextra_cuda_cflags	with_cudais_python_module)r   r
   __file__with_suffixopenreadplatformsystemappendr   r)   r*   load_inline)r
   torch_op_file_pathfsourcecflagscuda_cflagss         r$   _load_torch_opsrH   H   s   h33E::	 	!	! Q              WFI%%()))KKKK	K))X% *     s   AA!Alibraryregister_fakez*xgrammar::apply_token_bitmask_inplace_cudalogitsbitmaskindicesc                     d S N rK   rL   rM   s      r$   _rR   g   s	     	r&   c                     t          |t                    r&t          j        |t          j        | j                  }||                    | j                  }t          j        j        	                    | ||           d S )N)dtypedevice)

isinstancelistr   tensorint32rU   toopsr4    apply_token_bitmask_inplace_cudarQ   s      r$   r\   r\   n   sm    
 '4   Q,wek&-PPP**V]++	I77QQQQQr&   )r   NrO   )r?   
contextlibr   typingr   r   r   r   torch.utils.cpp_extensionr%   r/   rH   hasattrrI   _is_register_fake_availablerJ   TensorrR   intr\   rP   r&   r$   <module>rd      s           ( ( ( ( ( ( ( ( ( (         !E !E !E !EH	E 	E 	E 	E   ,               &geY77cGGEMSb<c<c  
]  !MNNW[ ',|>Fu|>T	   ON 9=	R 	RL	R\	R eDIu|345	R 
		R 	R 	R 	R 	R 	Rr&   