
    )`iA                     x   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZmZmZmZ d dlZd dlmZ ddlmZ d	d
lmZ d	dlmZmZ d	dlmZ  ej        ej        d            ej        ej        d            G d de           Z! G d dej"                  Z# e#d          Z$d Z%d Z&ddgZ'ddgZ(ddge'z   Z)dge'z   Z*dge'z   Z+dge'z   Z,dge'z   Z-dge'z   Z.d ge'z   Z/ e            Z0e j1         G d! d"                      Z2 G d# d$          Z3 e3            Z4e j1         G d% d&                      Z5	 	 	 	 	 d6d(e6d)eee6ef                  d*eee6                  d+eee6                  d,eee6                  d-eeee6ef                           d.e7d/e5fd0Z8d/efd1Z9	 	 d7d2ee5         d3e7d4e7d/dfd5Z:dS )8    N)nullcontext)datetimePath)DictListOptionalSequenceUnionHashable)FileLock   )CompilationContext   )env)generate_ninja_build_for_op	run_ninja)write_if_differentT)exist_okc                   :     e Zd ZdZddeded         f fdZ xZS )MissingJITCacheErroraC  
    Exception raised when JIT compilation is disabled and the JIT cache
    does not contain the required precompiled module.

    This error indicates that a module needs to be added to the JIT cache
    build configuration.

    Attributes:
        spec: JitSpec of the missing module
        message: Error message
    NmessagespecJitSpecc                 X    || _         t                                          |           d S N)r   super__init__)selfr   r   	__class__s      g/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/flashinfer/jit/core.pyr   zMissingJITCacheError.__init__#   s(    	!!!!!    r   )__name__
__module____qualname____doc__strr	   r   __classcell__r    s   @r!   r   r      s_        
 
" " "8I+> " " " " " " " " " "r"   r   c                        e Zd Z fdZdededdfdZdededdfdZdededdfdZ e	j
        d	          dededdfd
            Z xZS )FlashInferJITLoggerc                    t                                          |           t          j        dd          }|                     |                                           |                     t          j                               t          j
        dz  }t          j                            |          s)t          |d          5 }	 d d d            n# 1 swxY w Y   |                     t          j        |                     | j        d                             t          j        d                     | j        d                             t          j        d                     d S )NFLASHINFER_LOGGING_LEVELinfozflashinfer_jit.logwr   zS%(asctime)s - %(levelname)s - %(filename)s:%(lineno)d - flashinfer.jit: %(message)sr   )r   r   osgetenvsetLevelupper
addHandlerloggingStreamHandlerjit_envFLASHINFER_WORKSPACE_DIRpathexistsopenFileHandlerhandlerssetFormatter	Formatter)r   namelogging_levellog_pathfr    s        r!   r   zFlashInferJITLogger.__init__)   s|   	"<fEEm))++,,,-//00036JJw~~h'' 	h$$               +H55666a%%e 	
 	
 	

 	a%%e 	
 	
 	
 	
 	
s   CCCmsgargsreturnNc                 .     | j         | j        |g|R   dS )z~
        As [`debug`][logging.Logger.debug], but subsequent calls with
        the same message are silently dropped.
        N)_print_oncedebugr   rD   rE   s      r!   
debug_oncezFlashInferJITLogger.debug_once@   s)    
 	S04000000r"   c                 .     | j         | j        |g|R   dS )z|
        As [`info`][logging.Logger.info], but subsequent calls with
        the same message are silently dropped.
        N)rH   r.   rJ   s      r!   	info_oncezFlashInferJITLogger.info_onceG   s)    
 	C/$//////r"   c                 .     | j         | j        |g|R   dS )z
        As [`warning`][logging.Logger.warning], but subsequent calls with
        the same message are silently dropped.
        N)rH   warningrJ   s      r!   warning_oncez FlashInferJITLogger.warning_onceN   s)    
 	s2T222222r"   )maxsizec                      ||g|R ddi dS )zKHelper method to log messages only once per unique (msg, args) combination.
stacklevel   N )r   
log_methodrD   rE   s       r!   rH   zFlashInferJITLogger._print_onceU   s*     	
3,,,,!,,,,,r"   )r#   r$   r%   r   r'   r   rK   rM   rP   	functools	lru_cacherH   r(   r)   s   @r!   r+   r+   (   s        
 
 
 
 
.1c 1( 1t 1 1 1 10S 0 0d 0 0 0 03 3H 3 3 3 3 3 Y&&&-3 -x -D - - - '&- - - - -r"   r+   zflashinfer.jitc                      d} t           j        D ]=\  }}|dk    rd} |dk    r)|                                rt          |          dk    rd} >| st	          d          d S )NF   T      z,FlashInfer requires GPUs with sm75 or higher)current_compilation_contextTARGET_CUDA_ARCHSisdigitintRuntimeError)eligiblemajorminors      r!   check_cuda_archre   _   s}    H3E    uA::HHaZZEMMOOZ5zzQ  KIJJJK Kr"   c                      t           j                            t          j                  r%dd l} |                     t          j                   d S d S )Nr   )r0   r9   r:   r7   FLASHINFER_JIT_DIRshutilrmtree)rh   s    r!   clear_cache_dirrj   n   sI    	w~~g011 2g0111112 2r"   z-DFLASHINFER_ENABLE_FP8_E8M0z-DFLASHINFER_ENABLE_FP4_E2M1z#-gencode=arch=compute_89,code=sm_89z%-gencode=arch=compute_90a,code=sm_90az'-DCUTE_SM90_EXTENDED_MMA_SHAPES_ENABLEDz'-gencode=arch=compute_100a,code=sm_100az'-gencode=arch=compute_103a,code=sm_103az'-gencode=arch=compute_100f,code=sm_100fz'-gencode=arch=compute_110a,code=sm_110az'-gencode=arch=compute_120a,code=sm_120az'-gencode=arch=compute_121a,code=sm_121ac                       e Zd ZU dZeed<   eed<   eed<   ee	         ed<   e
e	         ed<   eed<   edefd	            Zd
S )JitSpecStatusz Status information for a JitSpecr@   
created_atis_compiledlibrary_pathsourcesneeds_device_linkingrF   c                     | j         rdS dS )NCompiledzNot Compiledrn   r   s    r!   statuszJitSpecStatus.status   s     	":!>r"   N)r#   r$   r%   r&   r'   __annotations__r   boolr	   r   r   propertyrv   rU   r"   r!   rl   rl      s         **
III4.   $Z" " " " X" " "r"   rl   c                       e Zd ZdZd ZddZdeedf         fdZd	ede	e
         fd
Zdee
         fdZdeeef         fdZdS )JitSpecRegistryz%Global registry to track all JitSpecsc                 "    i | _         i | _        d S r   )_specs_creation_timesru   s    r!   r   zJitSpecRegistry.__init__   s    *,46r"   r   r   rF   Nc                     |j         | j        vr1|| j        |j         <   t          j                    | j        |j         <   dS dS )zRegister a new JitSpecN)r@   r}   r   nowr~   )r   r   s     r!   registerzJitSpecRegistry.register   sB    9DK''%)DK	".6lnnD +++ ('r"   c                 4    | j                                         S )zGet all registered JitSpecs)r}   copyru   s    r!   get_all_specszJitSpecRegistry.get_all_specs   s    {!!!r"   r@   c                     || j         vrdS | j         |         }|j        r|                                nd}t          |j        | j        |         |j        ||j        |j                  S )z!Get status for a specific JitSpecN)r@   rm   rn   ro   rp   rq   )r}   rn   get_library_pathrl   r@   r~   rp   rq   )r   r@   r   ro   s       r!   get_spec_statuszJitSpecRegistry.get_spec_status   sy    t{""4{4 262BLt,,...+D1(%L!%!:
 
 
 	
r"   c                 v    g }| j         D ].}|                     |          }|r|                    |           /|S )z&Get status for all registered JitSpecs)r}   r   append)r   statusesr@   rv   s       r!   get_all_statusesz JitSpecRegistry.get_all_statuses   sK    K 	( 	(D))$//F ('''r"   c                     |                                  }t          |          t          d |D                       t          d |D                       dS )zGet compilation statisticsc              3   (   K   | ]}|j         	d V  dS r   Nrt   .0ss     r!   	<genexpr>z,JitSpecRegistry.get_stats.<locals>.<genexpr>   s)      AA!1=AAAAAAAAr"   c              3   (   K   | ]}|j         	d V  dS r   rt   r   s     r!   r   z,JitSpecRegistry.get_stats.<locals>.<genexpr>   s)      IIa1=IIIIIIIr"   )totalcompilednot_compiled)r   lensum)r   r   s     r!   	get_statszJitSpecRegistry.get_stats   s_    ((**]]AAxAAAAAII8IIIII
 
 	
r"   )r   r   rF   N)r#   r$   r%   r&   r   r   r   r'   r   r	   rl   r   r   r   r`   r   rU   r"   r!   r{   r{      s        //7 7 7= = = ="tCN3 " " " "
C 
H],C 
 
 
 
"$}"5    
4S> 
 
 
 
 
 
r"   r{   c                       e Zd ZU eed<   ee         ed<   eee                  ed<   eee                  ed<   eee                  ed<   eee                  ed<   dZe	ed<   dZ
e	ed	<   ed
efd            Zed
efd            Zed
efd            Zd
efdZd
ee         fdZed
efd            Zed
e	fd            Zed
e	fd            Zed
efd            ZddZed
e	fd            Zd de	de	d
dfdZdefdZd Zd
ee         fdZdS )!r   r@   rp   extra_cflagsextra_cuda_cflagsextra_ldflagsextra_include_dirsFis_classrq   rF   c                 0    t           j        | j        z  dz  S )Nzbuild.ninjar7   rg   r@   ru   s    r!   
ninja_pathzJitSpec.ninja_path   s    )DI5EEr"   c                 *    t           j        | j        z  S r   r   ru   s    r!   	build_dirzJitSpec.build_dir   s    )DI55r"   c                 @    t           j        | j        z  | j         dz  S Nz.sor   ru   s    r!   jit_library_pathzJitSpec.jit_library_path   "    )DI5498I8I8IIIr"   c                 ,    | j         r| j        S | j        S r   )is_aotaot_pathr   ru   s    r!   r   zJitSpec.get_library_path   s    ; 	!= $$r"   c                     g }| j         }| j        D ]E}|j        dk    }|rdnd}|                    |          j        }|                    ||z             F|S )N.cu.cuda.o.o)r   rp   suffixwith_suffixr@   r   )r   object_pathsjit_dirsourceis_cudaobject_suffixobj_names          r!   get_object_pathszJitSpec.get_object_paths   sq    .l 	4 	4Fmu,G)0:IIdM))-88=H( 23333r"   c                 @    t           j        | j        z  | j         dz  S r   )r7   FLASHINFER_AOT_DIRr@   ru   s    r!   r   zJitSpec.aot_path   r   r"   c                 4    | j                                         S r   )r   r:   ru   s    r!   r   zJitSpec.is_aot  s    }##%%%r"   c                 N    |                                                                  S r   )r   r:   ru   s    r!   rn   zJitSpec.is_compiled  s     $$&&--///r"   c                 4    t                      | j         dz  S )Nz.lock)
get_tmpdirr@   ru   s    r!   	lock_pathzJitSpec.lock_path	  s    ||11111r"   Nc           	          | j         }| j                            dd           t          | j        | j        | j        | j        | j        | j	        | j
                  }t          ||           d S )NTparentsr   r@   rp   r   r   r   r   rq   )r   r   mkdirr   r@   rp   r   r   r   r   rq   r   )r   r   contents      r!   write_ninjazJitSpec.write_ninja  sx    _
TD999-L*"4,#6!%!:
 
 
 	:w/////r"   c                 4    | j                                         S r   )r   r:   ru   s    r!   is_ninja_generatedzJitSpec.is_ninja_generated  s    %%'''r"   Tverbose	need_lockc                 T   t           j                            d          rt          d|           |rt	          | j        d          nt                      }|5  | j        s|                                  t          | j
        | j        |           d d d            d S # 1 swxY w Y   d S )NFLASHINFER_DISABLE_JITzJIT compilation is disabled via FLASHINFER_DISABLE_JIT environment variable, but the required module is not found in the JIT cache. Please add the missing module to the JIT cache build configuration.)r   Fthread_local)r0   environgetr   r   r   r   r   r   r   r   r   )r   r   r   locks       r!   buildzJitSpec.build  s   :>>233 	&V 	    =FXHT^%8888;== 	  	@ 	@* #  """dndow???		@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   7BB!$B!so_pathc                 D    t          j        t          |                    S r   )tvm_ffiload_moduler'   )r   r   s     r!   loadzJitSpec.load0  s    "3w<<000r"   c                 R   | j         r|                     | j                  S t          | j        d          5  | j        }t          j                            dd          dk    }| 	                    |d           |                     |          }d d d            n# 1 swxY w Y   |S )NFr   FLASHINFER_JIT_VERBOSE01)r   )
r   r   r   r   r   r   r0   r   r   r   )r   r   r   results       r!   build_and_loadzJitSpec.build_and_load3  s    ; 	,99T]+++ dn5999 	( 	(+Gjnn%=sCCsJGJJw%J000YYw''F		( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( s   ABB #B c           	         ddl m}m}m}m}  |             || j                  } ||| j                  } ||| j                  }dt          t                   dt          t                   dt          t                   ffd}fd|D             }	 |||	          }
 |||	          }t          j                            dd	          }t          j                            d
 d          }t          | j                                                  }g }| j        D ]}|j        dk    }|r|}|}d}n|}|
}d}|                    |          j        }t          j                            ||          }|dt          |                                          g}||z  }|d|gz  }|                    |d                    |          t          |                                          d           |S )z
        Generate compile_commands.json entries for this JitSpec.

        Returns:
            A list of dictionaries, each representing a compile command entry
            for a source file in this JitSpec.
        r   )get_cuda_pathbuild_common_cflagsbuild_cflagsbuild_cuda_cflagsflagscommon_cflags_expandedrF   c                     g }| D ]a}|dk    r|                     |           d|v r*|                    |                    d                     L|                    |           b|S )Nz$common_cflags
$cuda_home)extendr   replace)r   r   expandedflag	cuda_homes       r!   expand_flagsz2JitSpec.get_compile_commands.<locals>.expand_flagsX  s     H * *+++OO$:;;;;!T))OODLLy$I$IJJJJOOD))))Or"   c                 <    g | ]}|                     d           S )r   )r   )r   r   r   s     r!   
<listcomp>z0JitSpec.get_compile_commands.<locals>.<listcomp>f  s4     "
 "
 "
6:DLLy11"
 "
 "
r"   CXXzc++FLASHINFER_NVCCz	/bin/nvccr   r   r   z-cz-o )	directorycommandfile)cpp_extr   r   r   r   r   r   r   r   r'   r0   r   r   r   resolverp   r   r   r@   r9   joinr   )r   r   r   r   r   common_cflagscflagscuda_cflagsr   r   cflags_expandedcuda_cflags_expandedcxxnvccr   compile_commandsr   r   compilerr   r   r   output_filecommand_partsr   s                           @r!   get_compile_commandszJitSpec.get_compile_commandsA  sx   	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 "MOO	 ,+It7NOOmT->??''t7MNN	9	6:3i	#Y	 	 	 	 	 	"
 "
 "
 "
>K"
 "
 "
 ',v/EFF+|K9OPP jnnUE**z~~/I1H1H1HII ..0011	 l 	 	Fmu,G %, )' $))-88=H',,y(;;K &tS1A1A-B-BCMU"MdK00M##!*"xx66 0 011      r"   )rF   N)T)r#   r$   r%   r'   rw   r   r   r	   r   rx   rq   ry   r   r   r   r   r   r   r   rn   r   r   r   r   r   r   dictr  rU   r"   r!   r   r      s        
III$Z49%%%%S	****DI&&&& d,,,,Hd!&$&&&FD F F F XF 64 6 6 6 X6 J$ J J J XJ%$ % % % %
$t*     J$ J J J XJ & & & & X& 0T 0 0 0 X0 24 2 2 2 X20 0 0 0 (D ( ( ( X(@ @T @d @d @ @ @ @"1D 1 1 1 1  P d4j P  P  P  P  P  P r"   r   Fr@   rp   r   r   r   extra_include_pathsrq   rF   c           	      L   t                       t          j                            d          }t          j                            dd          }||n|dk    }	ddg}
ddt          j                            dd           d	d
dddg}|	r|
ddgz  }
|g dz  }n|ddgz  }|
dgz  }
t          j                            dd          dk    r|dgz  }||
|z  }
|||z  }t	          | d |D             |
|||d |D             nd |          }t
                              |           |S )NFLASHINFER_JIT_DEBUGr   r   r   z
-std=c++17z-Wno-switch-boolz
--threads=FLASHINFER_NVCC_THREADSz-use_fast_mathz-DFLASHINFER_ENABLE_F16z-DFLASHINFER_ENABLE_BF16z-DFLASHINFER_ENABLE_FP8_E4M3z-DFLASHINFER_ENABLE_FP8_E5M2-O0-g)r
  r	  z-G	-lineinfoz--ptxas-options=-vz-DCUTLASS_DEBUG_TRACE_LEVEL=2z-DNDEBUGz-O3FLASHINFER_JIT_LINEINFOr  c                 ,    g | ]}t          |          S rU   r   r   xs     r!   r   z gen_jit_spec.<locals>.<listcomp>  s    ***Qa***r"   c                 ,    g | ]}t          |          S rU   r   r  s     r!   r   z gen_jit_spec.<locals>.<listcomp>  s    222T!WW222r"   r   )re   r0   r   r   r   jit_spec_registryr   )r@   rp   r   r   r   r  rq   	debug_envverbose_envrI   r   r   r   s                r!   gen_jit_specr    s    
566I*..!93??K#/YY[SHE./FERZ^^$=sCCEE!"&&K  5$- 
 
 
 	
 	
E**5' 
z~~/55<<}$,$((**'***%# #. 32122221  D t$$$Kr"   c                  z    t           j        dz  } |                                 s|                     dd           | S )NtmpTr   )r7   rg   r:   r   )tmpdirs    r!   r   r     s:    '%/F==?? 2TD111Mr"   specsr   skip_prebuiltc                 0   g }| D ]}|r|j                                         r|                    d|j                    |j        sBt          |j        d          5  |                                 d d d            n# 1 swxY w Y   |sd S dg|z   dgz   }t                      }t          |dz  d          5  |dz  }t          |d
                    |                     t          t          j        ||           d d d            d S # 1 swxY w Y   d S )	Nz	subninja Fr   zninja_required_version = 1.3 zflashinfer_jit.lockzflashinfer_jit.ninja
)r   r:   r   r   r   r   r   r   r   r   r   r   r7   rg   )r  r   r  linesr   r  r   s          r!   build_jit_specsr    s   
 E # # 	T]1133 	222333& 	#$.u=== # #  """# # # # # # # # # # # # # # # +,u4t;E\\F	&00u	E	E	E C C44
:tyy'7'7888',j'BBBC C C C C C C C C C C C C C C C C Cs%   A>>B	B	:ADDD)NNNNF)FT);dataclassesrW   r5   r0   
contextlibr   r   pathlibr   typingr   r   r	   r
   r   r   r   filelockr   compilation_contextr   r  r   r7   r   r   r   utilsr   makedirsr8   FLASHINFER_CSRC_DIRra   r   Loggerr+   loggerre   rj   common_nvcc_flagssm89_nvcc_flagssm90a_nvcc_flagssm100a_nvcc_flagssm103a_nvcc_flagssm100f_nvcc_flagssm110a_nvcc_flagssm120a_nvcc_flagssm121a_nvcc_flagsr]   	dataclassrl   r{   r  r   r'   rx   r  r   r  rU   r"   r!   <module>r4     sL            				 " " " " " "             B B B B B B B B B B B B B B B B        4 4 4 4 4 4       ; ; ; ; ; ; ; ; % % % % % % G,t < < < < G'$ 7 7 7 7" " " " "< " " "$1- 1- 1- 1- 1-'. 1- 1- 1-h 
	-	.	.K K K2 2 2 #" 
 *"
 ,-   ??BSS >?BSS >?BSS >?BSS >?BSS >?BSS 0022  " " " " " " " "$2
 2
 2
 2
 2
 2
 2
 2
l $O%%  y  y  y  y  y  y  y  y ~ )--1)-<@!&B B
BeCI&'B 49%B  S	*	B
 DI&B "$uS$Y'7"89B B B B B BJD     C C=CC C 
	C C C C C Cr"   