
    sg!!                     D   d dl Z d dlZd dlZ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
mZmZmZ d dlZd dlZd dlmc mZ d dlmZmZ d dlmZmZ d dlmZ ddlmZ dd	lmZmZ  G d
 d      Z  G d d      Z!de"ddfdZ#de"dee"   de"de"fdZ$de"de"fdZ%de"de"de
fdZ&y)    N)Path)CallableListOptionalUnion)configexc)BuildOptionsBase
CppBuilder)reorder_kwargs   )build_package_contents)AOTINDUCTOR_DIRARCHIVE_VERSIONc                   ^    e Zd ZdeddfdZddZddZdedeeef   ddfd	Z	ded
eddfdZ
y)PT2ArchiveWriterarchive_pathreturnNc                      || _         d | _        y Nr   archive_fileselfr   s     R/var/www/html/venv/lib/python3.12/site-packages/torch/_inductor/package/package.py__init__zPT2ArchiveWriter.__init__       !-7;    c                     | j                   J t        j                  | j                  dt        j                        | _         | j                  dt        t                     | j                  dd       | S )Nwcompressionversionarchive_formatpt2)r   zipfileZipFiler   
ZIP_STOREDwritestrstrr   r   s    r   	__enter__zPT2ArchiveWriter.__enter__   sa      (((#OOs0B0B
 	i_!56&.r   c                 b    | j                   J | j                   j                          d | _         y r   r   closer   argss     r   __exit__zPT2ArchiveWriter.__exit__$   s1      ,,,! r   namedatac                 X    | j                   J | j                   j                  ||       y r   )r   r)   )r   r3   r4   s      r   r)   zPT2ArchiveWriter.writestr*   s*      ,,,""4.r   	file_pathc                     t        |      j                         s
J | d       | j                  J | j                  j                  ||       y)z
        Copy a file into the archive.
        name: The destination file inside the archive.
        file_path: The source file on disk.
        z is not a valid file pathN)arcname)r   is_filer   write)r   r3   r6   s      r   
write_filezPT2ArchiveWriter.write_file.   sR     I&&(QYK7P*QQ(  ,,,	48r   )r   r   r   N)__name__
__module____qualname__r*   r   r,   r2   r   bytesr)   r;    r   r   r   r      s\    <S <T </S /eSj(9 /d /9s 9s 9t 9r   r   c                   r    e Zd ZdeddfdZddZddZdedefdZd	ed
edefdZ	d
eddfdZ
dee   fdZy)PT2ArchiveReaderr   r   Nc                      || _         d | _        y r   r   r   s     r   r   zPT2ArchiveReader.__init__:   r   r   c                 p    t        j                  | j                  dt         j                        | _        | S )Nrr!   )r&   r'   r   r(   r   r+   s    r   r,   zPT2ArchiveReader.__enter__>   s-    #OOs0B0B
 r   c                 P    | j                   | j                   j                          y r   r.   r0   s     r   r2   zPT2ArchiveReader.__exit__D   s#    (##%r   r3   c                 T    | j                   J | j                   j                  |      S r   )r   read)r   r3   s     r   rI   zPT2ArchiveReader.readI   s+      ,,,  %%d++r   memberpathc                 V    | j                   J | j                   j                  ||      S r   )r   extract)r   rJ   rK   s      r   extract_to_pathz PT2ArchiveReader.extract_to_pathM   s-      ,,,  ((66r   c                 V    | j                   J | j                   j                  |       y r   )r   
extractall)r   rK   s     r   rP   zPT2ArchiveReader.extractallQ   s(      ,,,$$T*r   c                 R    | j                   J | j                   j                         S r   )r   namelistr+   s    r   get_file_nameszPT2ArchiveReader.get_file_namesU   s)      ,,,  ))++r   )r   rC   r<   )r=   r>   r?   r*   r   r,   r2   r@   rI   rN   rP   r   rS   rA   r   r   rC   rC   9   so    <S <T <
, , ,7c 7 7 7+s +t +,S	 ,r   rC   cmdr   c                     t        j                  |       } 	 t        j                  | d       y # t        j                  $ r&}t        j                  | |j                        |d }~ww xY w)NT)check)shlexsplit
subprocessrunCalledProcessErrorr	   CppCompileErroroutput)rT   es     r   _run_command_and_checkr_   Z   sR    
++c
C8s$'(( 8!!#qxx0a78s   / A(!A##A(aoti_dir
aoti_filesso_pathc                 r   dt         dt         ffd}t        j                  j                  |  |d            }t        j                  j                  |  |d            }t        j                  j	                  |      d   }t        |dz         5 }t        j                  |      }d d d        t        di }	t        |||	      }
|
j                         }|
j                         }t        |       t        |d	z         5 }t        j                  |      }d d d        t        di }t        t        j                  j                  |      d
   ||g||      }|j                         }|j                         }t        |       |dz   }|v rwt        |d      5 }|j                         }d d d        t        |d      5 }|j                         }|j!                  dd|dz  z
  z         |j!                         d d d        |S |S # 1 sw Y   cxY w# 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   |S xY w)Nsuffixr   c                 X    D ]  }|j                  |       s|c S  t        d|        )Nz Unable to find file with suffix )endswithRuntimeError)rd   filera   s     r   get_aoti_file_with_suffixz-compile_so.<locals>.get_aoti_file_with_suffixc   s8     	D}}V$	 =fXFGGr   z.cppz.or   z_compile_flags.json)r3   sourcesBuildOptionz_linker_flags.json)r3   rj   rk   
output_dirz_serialized_weights.binrbza+b    i @  rA   )r*   osrK   joinsplitextopenjsonloadr
   r   get_command_lineget_target_file_pathr_   rX   rI   tellr:   )r`   ra   rb   ri   cpp_fileconsts_o	file_namefcompile_flagscompile_optionsobject_buildercompile_cmdoutput_olinker_flagslinker_options
so_builderlink_cmd	output_soserialized_weights_filename	f_weightsserialized_weightsf_soso_sizes    `                     r   
compile_sor   b   s%   H# H# H ww||H&?&GHHww||H&?&EFH  *1-I 
i//	0 %A		!% '77O#N
 !113K224H;' 
i..	/ $1yy|$ &55NWW]]7#B'8$"	J **,H//1I8$ #,.G"G"j0-t4 	2	!*!1	2 )U# 	+tiikGJJtuw678JJ)*		+ 9U% %$ $$	2 	2	+ s0   H HH ?<H,HH H),H6aoti_output_dirc                 B   d}t        t        j                  j                  | |      d      5 }|j	                  t
               ddd       t        t        j                  j                  | d      d      5 }|j	                  d| d       ddd       t        j                  j                  j                  d      rt        d      t        j                  j                  j                  d	      rt        j                  j                  }t        |      5 }t        j                  |  d
      }|D ];  }t        j                  j                  |      }|j                  t         | |       = 	 ddd       |S | S # 1 sw Y   :xY w# 1 sw Y   xY w# 1 sw Y   |S xY w)zI
    Saves the AOTInductor generated files to the PT2Archive format.
    zbuild_package.pyr    NMakefilezall:
	python3 
.sozKUnable to save package as a .so. It should be a .pt2 format or a directory..pt2z/*)rs   rp   rK   rq   r:   r   r   aot_inductoroutput_pathrf   rg   r   globbasenamer;   r   )r   build_package_filenamer|   r   archive_writerpackage_filesrK   filenames           r   package_aotir      sw    0	bggll?,BCS	I (Q	&'( 
bggll?J7	= ?	"#9":"=>? &&//6Y
 	
 
			(	(	1	1&	9 **66l+ 	P~ II(9&<=M% P77++D1))_,=hZ*H$OP	P  5( (? ?	P s$   E;5FAF;FFFrK   devicec                 .   | j                  d      rt        d      | j                  d      rt        j                  j	                  |       d   }t        |       5 }|j                         }t        j                         5 }|j                  |       |j                         }|D cg c]  }|j                  t              s| }}t        |||      }d d d        d d d        nt        j                  j                  |       sJ d       t        j                  |       D 	
cg c]-  \  }}	}
|
D ]"  }t        j                  j                  ||      $ / }}
}	}}t        | ||       }|dk(  r+t         j"                  j$                  j'                  |d      nP|dk(  s|j                  d	      r,t         j"                  j$                  j)                  |d|      nt        d
|z         fd}|S c c}w # 1 sw Y   #xY w# 1 sw Y   xY wc c}}
}	}w )Nr   z>Unable to load .so. It should be a .pt2 format or a directory.r   r   z'Must specify a directory or a .pt2 filecpur   cudazcuda:zUnsupported device c                     j                         }t        j                  |d         }t        j                  |d         }t        j                  | t	        ||      f      d   }j                  |      }t        j                  ||      S )Nr   r   )get_call_specpytreetreespec_loadstree_flattenr   rZ   tree_unflatten)r1   kwargs	call_specin_specout_specflat_inputsflat_outputsrunners          r   	optimizedzload_package.<locals>.optimized   s|    ((*	''	!5((16))41P*QRSTUzz+.$$\8<<r   )rf   rg   rp   rK   rr   rC   rS   tempfileTemporaryDirectoryrP   
startswithr   r   isdirwalkrq   torch_C_aotiAOTIModelContainerRunnerCpuAOTIModelContainerRunnerCuda)rK   r   rb   archive_reader
file_namestmp_dirrh   ra   rootdirsfilesr   r   s               @r   load_packager      s   }}UL
 	
 
v	''""4(+d# 
	C~'668J,,. C'))'2+::<
%/!4???3SD
  %Wj'BC
	C 
	C ww}}T"M$MM" &(WWT]
 
!dE
  GGLLt$
$

 

 T:t4;;GQG	6	V..w7<<WaP069::= =C C
	C 
	C
sB   %H&G6'G1G1G6H&2H
1G66H 	;HH)'r   rt   rp   rW   rY   r   r&   pathlibr   typingr   r   r   r   r   torch._inductortorch.utils._pytreeutils_pytreer   r   r	   torch._inductor.cpp_builderr
   r   torch.export._tree_utilsr   build_packager   pt2_archive_constantsr   r   r   rC   r*   r_   r   r   r   rA   r   r   <module>r      s      	      2 2   $ $ ' D 3 1 C 9  9F, ,B8 8 88 8$s) 8c 8c 8v!# !# !H,s ,C ,H ,r   