
    ȅi[x                       % S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKJrJr  S SKJrJrJrJr  S SKJr  S SKJrJr  S SKJr  S SKJrJrJrJ r J!r!J"r"  S SK#r#S SK$r$S SK%J&s  J'r(  S SK)J*r*  S S	K+J,r,  S S
K-J.r.J/r/  S SK0J1r1  S SK2J3r3  S SK4J5r5  S SK6J7r8  S SK9J:r:J;r;  S SK<J=r=  S SK>J?r?J@r@  S SKAJBrB  S SKCJDrD  S SKEJFrF  SSKGJHrH  SSKIJJrJ  SSKJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrSJTrTJUrUJVrVJWrWJXrXJYrYJZrZJ[r[J\r\J]r]J^r^J_r_J`r`JaraJbrbJcrcJdrdJereJfrfJgrgJhrhJiriJjrjJkrkJlrlJmrmJnrnJoroJprpJqrqJrrrJsrsJtrtJuruJvrvJwrwJxrxJyryJzrzJ{r{J|r|J}r}J~r~  SSKJr  / SQr\	GR                  " \5      r " S S\5      rS\\\4   4S jr\"\.\\$R                  \\$R                  \\$R                  \(R                  4   rSrS r0 \$GR                  \mGR                   _\$GR"                  \mGR$                  _\$GR&                  \mGR(                  _\$GR*                  \mGR,                  _\$GR.                  \mGR0                  _\$GR2                  \mGR4                  _\$GR6                  \mGR8                  _\$GR:                  \mGR<                  _\$GR>                  \mGR@                  _\$GRB                  \mGRD                  _\$GRF                  \mGRH                  _\$GRJ                  \mGRL                  _\$GR                  \mGRN                  _\$GRP                  \mGRR                  _\$GRT                  \mGRV                  _\$GRX                  \mGRZ                  _\$GR\                  \mGR^                  _\$GR`                  \mGRb                  0Er\" \5      r\$GRh                  \`GRj                  \$GRl                  \`GRn                  \$GRp                  \`GRr                  \$GRt                  \`GRv                  \$GRx                  \`GRz                  \$GR|                  \`GR|                  \$GR~                  \`GR                  0r\" \5      r\$GR                  \bGR                  \$GR                  \bGR                  \$GR                  \bGR                  \$GR                  \bGR                  0r\" \5      r\GR                  \GR                  \GR                  \GR                  \GR                  \GR                  \GR                  \GR                  \
GR                  \$GR                  \GR                  \GR                  \GR                  \GR                  \GR                  \GR                  \$GR                  \$GR                  \$GR                  \$GR                  \$GR                  \$GR                  \GR                  \GR                  \GR                  \GR                  \GR                  1r\" S! \ 5       5      (       a   e\ " S" S#5      5       r\ " S$ S%5      5       r " S& S'\5      rS\QS(\$GR                  4S) jrS*\\v   S(\\S+4   4S, jrS-\\v   S(\\S+4   4S. jrS/\mS(\$GR                  4S0 jrS1\vS(\4S2 jrS3\"\$R                  \$R                  \$R                  \#GR                  4   4S4 jrS3\"\\$R                  4   S(\v4S5 jrS3\"\\$R                  4   S(\t4S6 jrS3\"\\$R                  4   S(\p4S7 jrS8\$GR                  S(\y4S9 jrSq\!S:   \S;'   S<\.4S= jrS>\S?\S(\.4S@ jGr \4SA\!\   SB\S(\4SC jjGrSD\"\G\\4   \\S+4   \4   4SE jGrSF\#GR                  SGG\S(\!\   4SH jGrSF\!\   S(\#GR                  4SI jGrSJ\#GR                  SK\@4SL jGrSM\\#GR                  \B4   S(\G\\l4   4SN jGrSO Gr	\ " SP SQ5      5       Gr
 " SR SSG\5      GrST GrSU\$GR                  R                  4SV jGr\  " SW SXG\SY95       Gr\  " SZ S[G\SY95       Gr\  " S\ S:G\SY95       Gr\  " S] S^G\SY95       Gr " S_ S`\GR(                  5      GrSa GrSb\S(\4Sc jGrS\4Sd\(R                  Se\!\G\\4      SB\S(\4Sf jjGrSg GrSh GrSi\Sj\S(\4Sk jGr S|SlSm.SA\Sn\!\G\\4      S(\(R                  4So jjjGrS(\\U\G\G\4   4   4Sp jGr S|Sq\RSr\!G\G\      S(\R4Ss jjGr " St Su5      Gr SvG\\   SwG\G\    4Sx jGr!Sy Gr"0 Gr#\G\\   G\G\    4   \Sz'   0 Gr$\G\G\G\    4   \S{'   g)}    N)
namedtupleOrderedDict)CallableIterableIteratorSequence)contextmanager)	dataclassfield)Enum)	AnnotatedAnycastfinalOptionalUnion)&_enable_graph_inputs_of_type_nn_module)load_verifier)
FakeTensorFakeTensorMode)_ConstantAttributeType)symbolic_shapes)
NodeSource)_pytree)treespec_dumpstreespec_loads)int_oo)
prefix_strSymT)ValueRanges)CapturedTraceback)
has_triton   )remove_proxy_from_state_dict   )schema)4ArgumentArgumentKindBufferMutationSpecComplexValueConstantValueCustomObjArgumentDeviceExportedProgramGradientToParameterSpecGradientToUserInputSpecGraphGraphArgumentGraphModuleGraphSignature	InputSpecInputToBufferSpecInputToConstantInputSpecInputToCustomObjSpecInputTokenSpecInputToParameterSpecInputToTensorConstantSpecLayoutLossOutputSpecMemoryFormatModuleCallEntryModuleCallSignatureNamedArgumentNamedTupleDefNodeOptionalTensorArgument
OutputSpecOutputTokenSpecParameterMutationSpecRangeConstraint
ScalarTypeSCHEMA_VERSIONSchemaVersionSymBoolSymBoolArgumentSymExprSymExprHintSymFloatSymFloatArgumentSymIntSymIntArgumentTensorArgument
TensorMetaTokenArgumentTREESPEC_VERSIONUserInputMutationSpecUserInputSpecUserOutputSpec)_Union)	serializeGraphModuleSerializerExportedProgramSerializerGraphModuleDeserializerExportedProgramDeserializerc                       \ rS rSrSrg)SerializeErrorp    N)__name__
__module____qualname____firstlineno____static_attributes__rd       W/home/james-whalen/.local/lib/python3.13/site-packages/torch/_export/serde/serialize.pyrb   rb   p   s    rj   rb   dc                 n    U R                  5        VVs0 s H  u  pUR                  U_M     snn$ s  snnf N)itemsvalue)rl   kvs      rk   _reverse_maprs   t   s*    #$779-941AGGQJ9---s   1;c              #   j   #    U  H)  n[        U[        R                  R                  5      v   M+     g 7frn   )
isinstancetorch_ops
OpOverload).0ops     rk   	<genexpr>r|      s$     Hxz"ejj3344x   13c                   >    \ rS rSr% \\S'   \\S'   \\S'   \\S'   Srg)SerializedArtifact   exported_program
state_dict	constantsexample_inputsrd   N)re   rf   rg   rh   bytes__annotations__ri   rd   rj   rk   r   r      s    rj   r   c                   >    \ rS rSr% \\S'   \\S'   \\S'   \\S'   Srg)_SerializedProgram   r   r   r   r   rd   N)re   rf   rg   rh   r.   r   r   ri   rd   rj   rk   r   r      s    %%rj   r   c                   0    \ rS rSrSrS rS rS rS rSr	g)	LazyMap   z
Dictionary class for deferred instantiation of node metadata values.
Purpose is to avoid creation of symbolic-shape tensors before relevant shape guards are parsed.
c                 0    0 U l         [        5       U l        g rn   )mapset	evaluatedselfs    rk   __init__LazyMap.__init__   s    rj   c                      X R                   U'   g rn   )r   )r   rq   rr   s      rk   __setitem__LazyMap.__setitem__   s    rj   c                     U R                   U   nXR                  ;   a  U$ U R                  R                  U5        U" 5       U R                   U'   U R                   U   $ rn   )r   r   add)r   rq   outs      rk   __getitem__LazyMap.__getitem__   sM    hhqkJ1exx{rj   c                 6    U R                   R                  5       $ rn   )r   __repr__r   s    rk   r   LazyMap.__repr__   s    xx  ""rj   )r   r   N)
re   rf   rg   rh   __doc__r   r   r   r   ri   rd   rj   rk   r   r      s    
#rj   r   returnc                     U R                   c  [        R                  " U R                  S9$ [        R                  " U R                  U R                   S9$ )N)typer   index)r   rw   devicer   )rl   s    rk   deserialize_devicer     s7    ww||((<<QVV17733rj   sizes.c                     U  H'  nUR                   S:X  a  M   SUR                    35       e   [        S U  5       5      $ )Nas_intOnly as_int is supported, got c              3   8   #    U  H  oR                   v   M     g 7frn   r   )rz   sym_int_sizes     rk   r|   #deserialize_size.<locals>.<genexpr>  s     ?$$   r   tuple)r   r   s     rk   deserialize_sizer   	  sK      H, 	
,\->->,?@	
,  ????rj   stridesc                     U  H'  nUR                   S:X  a  M   SUR                    35       e   [        S U  5       5      $ )Nr   r   c              3   8   #    U  H  oR                   v   M     g 7frn   r   )rz   sym_int_strides     rk   r|   %deserialize_stride.<locals>.<genexpr>  s     EW>&&Wr   r   )r   r   s     rk   deserialize_strider     sK    !""h. 	
,^-@-@,AB	
. " EWEEErj   stc                     [         U    $ rn   )_SERIALIZE_TO_TORCH_DTYPE)r   s    rk   deserialize_scalar_typer     s    $R((rj   offsetc                 b    U R                   S:X  d   SU R                    35       eU R                  $ )Nr   r   )r   r   )r   s    rk   deserialize_storage_offsetr     s/    ;;("R&DV[[M$RR"==rj   sc                     [        U [        R                  [        R                  [        R                  45      (       a  U R
                  R                  n [        R                  R                  R                  U 5      $ rn   )rv   rw   rR   rL   rP   nodeexprsympyprintingreprsreprr   s    rk   _print_sympyr   "  sJ    !ellEMM5>>BCCFFKK>>$$Q''rj   c           	         [        U [        R                  [        R                  [
        45      (       a  [        R                  " U 5      (       a  [        R                  " [        U 5      S9$ [        U [        R                  [        R                  45      (       d   eU R                  R                  c&  [        R                  " [        [        U 5      5      S9$ [        R                  " [        [        U 5      [        R                  " U R                  R                  S9S9S9$ [        SU  S[        U 5       S35      e)Nr   as_exprhintz,SymInt should be either symbol or int, got `` of type ``)rv   rw   rR   r   Symbolintr   is_concrete_intcreater   r   rN   r   rO   rb   r   r   s    rk   serialize_sym_intr   (  s    !ellELL#677**1--==A//a%,,!=>>>>vv{{"}}W\!_-EFF}}#$Q(//qvv{{C  :1#[a	QRS
 	
rj   c           	         [        U [        R                  [        R                  [
        45      (       a  [        R                  " U 5      (       a  [        R                  " [        U 5      S9$ [        U [        R                  [        R                  45      (       d   eU R                  R                  c&  [        R                  " [        [        U 5      5      S9$ [        R                  " [        [        U 5      [        R                  " U R                  R                  S9S9S9$ [        SU  S[        U 5       S35      e)Nas_floatr   r   z0SymFloat should be either symbol or float, got `r   r   )rv   rw   rP   r   r   floatr   is_concrete_floatr   r   r   rN   r   rO   rb   r   r   s    rk   serialize_sym_floatr   =  s    !ennellE:;;,,Q//??E!H55a%..%,,!?@@@@vv{{"w|A/GHH#$Q(//E  >qcTRSWIUVW
 	
rj   c                 :   [        U [        R                  [        45      (       a\  [        R
                  " U 5      (       a  [        R                  " [        U 5      S9$ [        R                  " [        [        U 5      S9S9$ [        SU  S[        U 5       S35      e)Nas_bool)expr_strr   z.SymBool should be either symbol or bool, got `r   r   )rv   rw   rL   boolr   is_concrete_boolr   rN   r   rb   r   r   s    rk   serialize_sym_boolr   R  sy    !emmT*++++A..>>$q'22>>'<?*KLL<QC{4PQ7)STU
 	
rj   tc                    [        [        U R                     U R                   Vs/ s H  n[	        U5      PM     snU R
                  [        U R                  R                  U R                  R                  S9U R                  5        Vs/ s H  n[	        U5      PM     sn[	        U R                  5       5      [        U R                     S9$ s  snf s  snf )z&
Extract a TensorMeta describing `t`.
r   )dtyper   requires_gradr   r   storage_offsetlayout)rU   _TORCH_TO_SERIALIZE_DTYPEr   shaper   r   r-   r   r   r   strider   _TORCH_TO_SERIALIZE_LAYOUTr   )r   r   s     rk   serialize_tensor_metar   ^  s     '0-.WW5W #W5oo188==?/0xxz:z!"1%z:()9)9);<)!((3 5 ;s   C
Cr_   _CURRENT_DESERIALIZERfake_tensorc                     [        U [        R                  R                  5      n[	        U 5      n[
        R                  " [        U5      [        S9R                  S5      n[        X144$ )Nclsutf-8)rv   rw   nn	Parameterr   jsondumps_dataclass_to_dictEnumEncoderencode_reconstruct_fake_tensor)r   is_parametertensor_metatensor_meta_bytess       rk   _reduce_fake_tensorr   p  sW    k588+=+=>L'4K

;'[fWo  $&7%FFFrj   serialized_tensor_metar   c                    [         R                  " U R                  S5      5      n[        [        U5      n[
        c   S5       e[
        R                  U5      nU(       a  [        R                  R                  U5      nU$ )Nr   z)Need access to current deserializer state)
r   loadsdecode_dict_to_dataclassrU   r   deserialize_tensor_metarw   r   r   )r  r   json_tensor_metar   r   s        rk   r   r   y  sq     zz"8"?"?"HI$Z1ABK , 3, (??LKhh((5rj   artifactpickle_protocolc                 Z   U c  g[         [        R                  ;  d   S5       e [        R                  " [         [        5        [
        R                  " 5       n[        R                  " XUS9  UR                  5       [        R                  [         	 $ ! [        R                  [         	 f = f)Nrj   z0Refusing to stomp on existing FakeTensor reducer)r	  )
r   copyregdispatch_tablepickler   ioBytesIOrw   savegetvalue)r  r	  buffers      rk   serialize_torch_artifactr    s     W333 :3/z#67 	

8_E "":.G"":.s   AB B*
serializedc                    [        U [        [        45      (       a  U $ [        U 5      S:X  a  0 $ [        R
                  " U 5      nUR                  S5         [        R                  " USS9n[        U[        [        45      (       d   eU$ ! [         aN  nUR                  S5        [        R                  " USS9n[        R                  S[        U5      US9   S nANrS nAff = f)Nr   T)weights_onlyFz\Fallback to weights_only=False succeeded. Loaded object of type %s after initial failure: %s)exc_info)rv   dictr   lenr  r  seekrw   load	Exceptionlogwarningr   )r  r  r  es       rk   deserialize_torch_artifactr     s     *tUm,,
:!	ZZ
#F
KKN

::f48 h....O  
A::f59AN	 	 	

s   B 
C#ACC#valadjustc                    U [         R                  [        4;   a  g U [         R                  * [        * 4;   a  g [        U [         R                  5      (       a  [        U 5      $ [        R                  S[        U 5      U U5        US:X  a  [        R                  " U 5      $ US:X  a  [        R                  " U 5      $ [        SU 35      e)NztExport constraints cannot be non-integer expressions. Found type %s, and value %s. We will attempt to %s this value.floorceilzGot invalid adjustment )r   oor   rv   Integerr   r  r  r   mathr$  r%  RuntimeError)r!  r"  s     rk   _sympy_int_to_intr*    s    
uxx  
y6'""#u}}%%3x KK	 	S	 zz#	6	yy~4VH=>>rj   c                     U c  U$ U [         * [         4;   a  U $ U [        R                  :X  a  [         $ U [        R                  * :X  a  [         * $ [        R                  " U 5      $ rn   )r   r(  infr   r'  )r!  defaults     rk   _int_to_sympy_intr.    sT    
{
w

dhh
txxiw==rj   symsym_typec                 P    [        [        U 5      [        [        U   5      S  5      $ rn   )r   strr  r   )r/  r0  s     rk   _symbol_indexr3    s#    s3xJx013455rj   range_constraintsc                     U R                  5        VVs0 s HC  u  p[        U5      [        [        UR                  S5      [        UR
                  S5      5      _ME     snn$ s  snnf )Nr%  r$  )ro   r2  rH   r*  lowerupper)r4  rq   rr   s      rk   serialize_range_constraintsr8    sd     &++-
 .DA	 	Aaggv.aggw/
 	
 .  s   A
A"c                    [        U [        R                  R                  5      (       a  U R                  $ [        U 5      [        ;   a!  [        [        U 5         R                  U 5      $ [        S[        U 5       35      e)NzCannot find schema for )	rv   rw   rx   ry   _schemar   _serialization_registry	op_schemar)  )targets    rk   _get_schema_from_targetr>    sa    &%**//00~~	f0	0&tF|4>>vFF
0f?
@@rj   c                      \ rS rSr% \" \S9r\\   \S'   \" \S9r	\\   \S'   \" \S9r
\\   \S'   \" \S9r\\\4   \S'   \" \S9r\\\4   \S'   \" \S9r\\\4   \S'   \" \S9r\\\4   \S	'   S
r\\S'   \" \S9r\\\4   \S'   Srg)
GraphStatei  )default_factoryinputsoutputsnodestensor_valuessym_int_valuessym_bool_valuessym_float_valuesFis_single_tensor_returncustom_obj_valuesrd   N)re   rf   rg   rh   r   listrB  r'   r   rC  rD  rC   r  rE  r2  rU   rF  rR   rG  rL   rH  rP   rI  r   rJ  r,   ri   rd   rj   rk   r@  r@    s    "48FDN8#D9GT(^9d3E4:3+0+FM4Z(F(-d(CNDf%C*/*EOT#w,'E,1$,Gd3=)G$)T)6;D6QtC!223Qrj   r@  c                       \ rS rSrS rSrg)Finali  c                     U H1  n[        U[        5      (       d  M  [        SUR                   S35      e   [        R                  XU[        U5      5      $ )Nztype 'z ' is not an acceptable base type)rv   rM  	TypeErrorre   r   __new__r  )metaclsnamebases	classdictbs        rk   rP  Final.__new__	  sK    A!U##&4T UVV  ||G5$y/BBrj   rd   N)re   rf   rg   rh   rP  ri   rd   rj   rk   rM  rM    s    Crj   rM  c                     / SQnU HA  n[        X5      (       d  M  [        X5      (       d  M'  [        X5      [        X5      :w  d  MA    g   g)N)num_cpu_threads	num_warps
num_stagesnum_ctasFT)hasattrgetattr)configentry_metadatametadata_attrsattrs       rk   is_metadata_matchedrb    s@    ON6  W^%B%Bv$(EE  rj   r   c                 	   U R                   [        R                  R                  R                  L d   e[        5       (       d   S5       eSSKJn  SSKJ	n  [        U R                  S   [        5      (       d   e[        R                  R                  R                  R                  U R                  S   5      n[        X15      nU(       a  UR                  OUn[!        US5      (       aQ  UR"                  n[%        UR'                  5       5      S:X  d   e[)        [+        UR-                  5       5      5      S   nOw[!        US5      (       aN  UR.                  n[%        UR'                  5       5      S:X  d   e[)        [+        UR-                  5       5      5      nO[1        S	UR2                   35      e[%        UR'                  5       5      S:X  a$  U[)        [+        UR-                  5       5      5      4$ [        XR5      =(       a+    [!        US
5      =(       a    [%        UR4                  5      S:  nU(       Ga  0 n	UR4                   Hm  n
U
[%        UR6                  5      :  d  M  UR6                  U
   nU R                  R9                  S0 5      n[        U[:        5      (       d  M`  X;   d  Mg  X   X'   Mo     UR4                   Vs/ s H)  nUR6                  U   U	;   d  M  XR6                  U      PM+     nn/ nUR=                  5        H  u  nn[>        R@                  " SU5      nU(       d  M&  / nU Hg  nUS;   a  URC                  US:H  5        M  SU;   d  SU;   d  SU;   a  URC                  [E        U5      5        MM  URC                  [        U5      5        Mi     UU:X  d  M  URC                  UU45        M     O[G        UR=                  5       5      n[%        U5      S:X  a2  [1        SUR2                   S[G        UR'                  5       5       35      e[%        U5      S:X  a	  X_S   S   4$ U(       ai  U H>  u  nnURH                  nURJ                   H  n[M        UU5      (       d  M  UU4s  s  $    M@     [1        SUR2                   SU(       a  SOS S35      e[1        SUR2                   SU(       a  SOS SU VVs/ s H  u  nnUPM
     snn 35      es  snf s  snnf )Nz+triton required to serialize triton kernelsr   )	Autotuner)JITFunction
kernel_idxdevice_cachesr%   cachez#kernel caches not found for kernel 
constexprskwargsz\('constexpr',\s*([^)]+)\))TrueFalserk  .r  Ez[couldn't find a kernel cache entry with metadata matching the autotuner configs for kernel z. Available cache keys: z2Multiple cache entries found for autotuned kernel  zwith same constexpr valueszwith no constexprz* and couldn't disambiguate using configs. z6Multiple cache entries found for non-autotuned kernel z0. This should not happen. Available cache keys: )'r=  rw   _higher_order_opstriton_kernel_wrap triton_kernel_wrapper_functionalr"   triton.runtime.autotunerrd  triton.runtime.jitre  rv   rj  r   kernel_side_table
get_kernelfnr\  rg  r  keysnextitervaluesrh  AssertionErrorre   ri  	arg_namesgetr  ro   refindallappendr   rK  metadataconfigsrb  )r   rd  re  kernelis_autotuneractual_kernelcachesrh  has_constexprsconstexpr_valsconstexpr_idx
param_namekwargs_dictidxexpected_valuesmatching_entriessig_keycache_entryconstexpr_matchesconstexpr_valuesmatch_sig_keyr_  r^  key_s                             rk   !get_triton_kernel_and_cache_entryr    s   ""55VV	W	W <<FFF<2.dkk,/5555$$77IITTL!F f0L!-FII6M}o..,,6;;=!Q&&&T&--/*+A.		(	($$6;;=!Q&&&T&--/*+1-2H2H1IJ
 	

 5::<Ad4#7888 	=. 	.M<0	.(()A-  *55Ms=#:#:;;*44]C
"kkooh;k400!05@5L2 6 %//	
 0&&s+~=	 9N22378/	 	 
 $)KKM G[ "

+H' R  #% .E 11(//@(//e=(//E
; / $6$++Wk,BC %2  .
!ijw  kA  kA  jB B%%)%**,%7$8:
 	
 !q1!444%5!Hk(11N ..&v~>>(+55 ) &6 @AWAW@XXY/=+CVW X89
 	
 
@AWAW@XXY+9'?R
S T9L\9]L\&#q#L\9]8^	` i
p :^s   S!SS#c                   L   \ rS rSrS\R
                  S\\R                     4S jr\	S 5       r
S\R                  R                  4S jrS\R                  R                  4S jrS	\4S
 jrS\R                  R                  4S jrS rS	\\R                  R                     4S jrS	\4S jrS\R                  R                  S	\\\4   4S jrS\\\      S	\\\\\4         4S jrS\R8                  S	\4S jrS	\\   4S jr S;S\S	\\   4S jjr S	\\   4S jr!S	\"4S jr#S	\"4S jr$S	\"4S jr%S	\"4S jr&S;S\\   S	\'4S jjr(S	\)4S jr*S	\+4S  jr,S	\-4S! jr.S	\+4S" jr/S#\R`                  S	\04S$ jr1S#\Rd                  S	\24S% jr3S&\R
                  S	\44S' jr5S(\Rl                  S	\'4S) jr7S*\8Rr                  S	\4S+ jr:S,\Rv                  S	\;4S- jr<S\\R                     S	\\   4S. jr=S\R                  R                  S	\\'   4S/ jr>S\R                  R                  S	\\'   4S0 jr?S1\S2\S	\'4S3 jr@S\R                  R                  S	\\)   4S4 jrAS5\R                  R                  S	\C4S6 jrDS7\\\4   4S8 jrES5\R                  R                  S	\B4S9 jrFS:rGg)<r]   i  graph_signaturemodule_call_graphc                 d    [        5       U l        Xl        X l        0 U l        0 U l        0 U l        g rn   )r@  graph_stater  r  custom_objsduplicate_getitem_nodestreespec_namedtuple_fields)r   r  r  s      rk   r   GraphModuleSerializer.__init__  s2    
 &<.!2=?79$DF'rj   c              #   n   #    U R                   n[        5       U l          S v   Xl         g ! Xl         f = f7frn   )r  r@  r   saveds     rk   save_graph_state&GraphModuleSerializer.save_graph_state  s.       %<	%$us   5* 525r   c           
      "   UR                   S:X  d   eUR                  S   n[        R                  SUR                  U5        [        U[        R                  5      (       a0  [        R                  " U R                  UR                  U5      S9nGOY[        U[        R                  5      (       a0  [        R                  " U R                  UR                  U5      S9nGO
[        U[        R                  5      (       a  [        S5      e[        U[        [         ["        [$        ['        S 5      45      (       a  U R)                  U5      nO[        U[*        R,                  5      (       ae  UR.                  n[        R                  " [-        UR                  US9S9nU R1                  U5      U R2                  R4                  UR                  '   O[        S	UR                  S    35      eU R2                  R6                  R9                  U5        g )
Nplaceholderr!  z[handle_placeholder] %s: %s	as_tensor
as_sym_intz,SymFloat graph input is not implemented yet.rR  	class_fqnas_custom_objz Unimplemented graph input type: )r{   metar  debugrR  rv   rw   Tensorr'   r   serialize_tensor_outputrR   serialize_sym_int_outputrP   r|  r   r   r2  r   r   serialize_inputepr,   r  serialize_script_obj_metar  rJ  rB  r  )r   r   r!  graph_inputr  s        rk   handle_placeholder(GraphModuleSerializer.handle_placeholder  s   ww-'''ii		/C@c5<<(("//66tyy#FK U\\**"//88CHK U^^,, !OPPc4eT$Z@AA..s3KR1122I"///TYY)TK ..s3 ..tyy9 !#CDIIeDTCU!VWW&&{3rj   c                 $   UR                   S:X  d   e[        UR                  5      S:X  d   S5       eUR                  S   n[        R	                  SUR
                  U5        [        U[        R                  R                  5      (       a3  SU R                  l        U R                  U5      /U R                  l        g [        U[        [        45      (       d   eU Vs/ s H  o0R                  U5      PM     snU R                  l        g s  snf )Noutputr%   z"FX.Node's args should have one argr   z[handle_output] %s: %sT)r{   r  argsr  r  rR  rv   rw   fxrC   r  rI  r  rC  r   rK  )r   r   	node_argsargs       rk   handle_output#GraphModuleSerializer.handle_output  s    ww("""499~"H$HH"IIaL			*DIIyAi//7;D4(,(<(<Y(G'HD$i%7777MV'WYc(<(<S(AY'WD$'Ws    Dr   c                     [        U[        5      (       a  U$ UR                  R                  S5      (       a-  UR                  R	                  SS5      nU SUR
                   3$ UR                   SUR
                   3$ )Nz
torch._opsz	torch.opsrm  )rv   r2  rf   
startswithreplacere   )r   r=  modules      rk   serialize_operator(GraphModuleSerializer.serialize_operator  sx    fc""M)),77 &&..|[IFXQv/00''(&//):;;rj   c           
        ^  UR                   S:X  d   eUR                  R                  S5      n[        R	                  SUR
                  UR                  UR                  UR                  U5        UR                  [        R                  L a  g UR                  [        ;   dA  Ub  [        U[        R                  [        R                  [        R                   45      (       a  [#        UR                  5      S:X  d   e[%        UR
                  T R'                  UR                  5      T R)                  UR                  UR                  5      T R+                  UR
                  U5      /T R-                  U5      S9nGO[        UR                  [        R.                  R0                  5      (       a  [%        UR
                  T R'                  UR                  5      T R3                  UR                  UR                  UR                  5      T R5                  U5      T R-                  U5      S9nGO,[        UR                  [        R.                  R6                  5      (       Ga  S[8        4S jnUR                  [        R:                  R<                  L Ga  [?        UR                  5      nUR                  S   R
                  n[A        URB                  RD                  U5      (       d   e[G        URB                  RD                  U5      nURH                  US'   S US'   / nUS	   b  [        US	   [J        5      (       a  US	    Hx  n	[        U	[        RL                  R$                  5      (       a;  [        U	R                  R                  SS 5      [N        RP                  5      (       a  Mg  URS                  U	5        Mz     XS	'   U 4S
 jn
[%        UR
                  T R'                  UR                  5      T RU                  XQR                  5      U
" U5      T R-                  U5      SS9nGO0UR                  [        R:                  RV                  RX                  L Ga&  [[        U5      u  pUR\                  nUR                  S   n[        U[^        5      (       d   eURa                  5       n/ nURb                   Vs1 s H"  nURd                  (       d  M  UR
                  iM$     nnSnSnSn[        UR                  S   [^        5      (       d   eUR                  S   Rg                  5        H@  u  nnUU;   a  SnM  U(       a   S5       eUU;   a  URS                  U5        UU4-  nUS-  nMB     [        UR                  S   [>        5      (       d   eURh                  Rj                   SURl                   3nUUR                  S   S   UURn                  S.n[A        US5      (       a  URp                  US'   [A        US5      (       a  URr                  US'   [%        UR
                  T R'                  UR                  5      T RU                  UU5      T Ru                  U5      T R-                  U5      U" U5      S9nGO[%        UR
                  T R'                  UR                  5      T RU                  UR                  UR                  5      T Ru                  U5      T R-                  U5      U" U5      S9nGO][w        UR                  5      [x        ;   Ga&  [w        UR                  5      [x        ;   d   [w        UR                  5       S35       e[x        [w        UR                  5         nUR{                  5       nUR}                  UR                  5      n[        U[~        5      (       a  [        U[~        5      (       d   eSU;  a  SU;  d   e[%        UR
                  SU SU 3T R3                  UR                  UR                  UR                  5      T R5                  U5      T R-                  U5      S9nO[        SUR                   S35      eT R                  R                  RS                  U5        g s  snf )Ncall_functionr!  z-[handle_call_function] %s: %s(%s, {%s}) -> %sr   )rR  r=  rB  rC  r  r   c                     [        U R                  [        R                  R                  5      (       d   eU R
                  R                  SS 5      nUS L=(       a    [        U[        R                  5      $ )Nr!  )rv   r=  rw   rx   HigherOrderOperatorr  r~  r  )r   meta_vals     rk   _is_hop_single_tensor_returnPGraphModuleSerializer.handle_call_function.<locals>._is_hop_single_tensor_return  sR    !$++uzz/M/MNNNN99==5t+R
8U\\0RRrj   r%   r#   c                    > U R                   R                  SS 5      n/ n[        U5       H6  u  p4TR                  X5      nUR	                  TR                  XT5      5        M8     [        R                  " US9/$ )Nr!  
as_tensors)r  r~  	enumerate_output_node_name_at_indexr  r  r'   r   )r   r  tensor_argsr  r  rR  r   s         rk   serialize_tensor_list_outputPGraphModuleSerializer.handle_call_function.<locals>.serialize_tensor_list_output$  sj    #yy}}UD9H"$K%.x%8	#>>tI#**4+G+G+ST &9 %OO{CDDrj   F)rR  r=  rB  rC  r  is_hop_single_tensor_returnrd   rj  Tz/non-constexpr args found after constexpr arg(s)gridr  )rR  r  output_indicesrY  rX  sharedshared_memory_bytesz* is not supported in export serialization.:#zSerializing z is not supported)Cr{   r  r~  r  r  rR  r=  r  rj  operatorgetitem_SYM_OPSrv   rw   rR   rL   rP   r  rC   r  serialize_sym_op_inputsserialize_outputserialize_metadatarx   ry   serialize_inputsserialize_outputsr  r   rp  aoti_call_delegaterK  r\  graphowning_moduler]  	aoti_pathr   r  r  r,   r  serialize_hoo_inputsrq  rr  r  r  r  rx  paramsis_constexprro   rw  re   hashrY  rX  r  serialize_hoo_outputsr   r;  	namespace
to_op_namer2  rb   r  rD  )r   r   r  ex_noder  serializable_argslowered_module_namelowered_moduleserializable_weight_nodesweight_noder  r  kernel_cache_entrykernel_cache_metadataoutput_keysr  pconstexpr_keysfound_constexprargs_newirq   rr   kernel_name_with_hash
kwargs_newhandlerr  op_names   `                           rk   handle_call_function*GraphModuleSerializer.handle_call_function  s$   ww/)))99=='		;IIKKIIKK	
 ;;(***;;(" 8ellEMM5>>%RSSt{{#q(((YY..t{{;33DKKK..tyy(CD006G UZZ%:%:;;YY..t{{;,,T[[$))T[[Q..t4006G UZZ%C%CDDSd S {{e55HHH$(O! ,099Q<+<+<#tzz779LMMMM!()A)ACV!W'5'?'?!!$ (,!!$,.)$Q'3
%a((9 9 (9'; &k588==AAj',,00=r?S?SG G %188E (< ,Ea(E 224;;?445FT8>!44T:05 **==^^_ .Ot-T*(:(C(C%99U+!(D1111&mmo!#28--!R-Q1>>&!&&-!R"'!$++h"7>>>> KK1779DAq N**. . I. K'&--a0$HFA :" "$++f"5t<<<< yy))*!,A,F,F+GH & 2 KK/2&4!6!@!@	
 02CDD-== 01 0(;;8M8T8TJ45224;;?44XzJ 66t<!44T:0LT0R 224;;?44TYYL 66t<!44T:0LT0R $++"99$(?? $%%OP? .d4;;.?@G))+I((5Gi--*Wc2J2JJJi'Cw,>>>YY9+Qwi0,,T[[$))T[[Q..t4006G !<}<M!NOO%%g.a "Ss   >bbc                 D    [         R                  SUR                  5        g )Nz[handle_get_attr] %s)r  r  rR  )r   r   s     rk   handle_get_attr%GraphModuleSerializer.handle_get_attr  s    		($))4rj   c                     S nUR                    Hh  nUR                  [        R                  L d
   U S35       eX$R                  S   :X  d  M>  Uc  UnME  UR
                  U R                  UR
                  '   Mj     U$ )Nz is not a getitem noder%   )usersr=  r  r  r  rR  r  )r   r   r   	user_nodeusers        rk   _output_node_at_index+GraphModuleSerializer._output_node_at_index  sv    	JJD;;("2"22Stf<R4SS2		!$$ $I ?HnnD00;  rj   c                 d    U R                  X5      nUc  UR                   SU 3$ UR                  $ )N_unused_)r  rR  )r   r   r   r  s       rk   r  0GraphModuleSerializer._output_node_name_at_index  s7    ..t;	ii[00>>!rj   c           	         0 nUR                   R                  S5      =n(       a  X2S'   UR                   R                  S5      =n(       aJ  S nUR                  5        VVs/ s H  u  pgU SU" U5       3PM     nnn[        R	                  U5      US'   UR                   R                  S5      =n	(       aD  U	 V
s/ s H  n
U
S    SU R                  U
S   5       3PM!     nn
[        R	                  U5      US'   UR                   R                  S5      =n(       a!  [        R	                  [        U5      5      US'   UR                   R                  S	5      =n(       a   [        R                  " U5      US	'   SUR                   ;   a7  UR                   S   n[        R                  " U R                  U5      5      US'   U$ s  snnf s  sn
f ! [         a!  n[        S
UR                   SU 35      UeS nAff = f)Nstack_tracenn_module_stackc                     [        U [        5      (       a  [        U 5      S:X  d   eU u  p[        U[        5      (       d   e[        U[        5      (       d   eUS-   U-   $ )Nr#   ,)rv   r   r  r2  )r!  pathtys      rk   export_nn_module_stackHGraphModuleSerializer.serialize_metadata.<locals>.export_nn_module_stack  sZ    !#u--#c(a-??!$,,,,!"c****czB&rj   r  source_fn_stackr   r%   torch_fncustomz-Failed to serialize custom metadata for node z with error 	from_node)r  r~  ro   ST_DELIMITERjoinr  rK  r   r   r  rb   rR  _serialize_from_node)r   r   retr  r  r  rq   rr   nn_module_listsource_fn_st	source_fnsource_fn_listr  r  r  r  s                   rk   r  (GraphModuleSerializer.serialize_metadata  s   ))--66;6!,"iimm,=>>?>' @O?T?T?V?Vtq1#Q-a012?V   &2%6%6~%FC!"99==):;;<; ".!-I Q<.$"9"9)A,"G!HI!-   &2%6%6~%FC!"yy}}Z0080*//X?C
OYY]]8,,6, $

6 2H $))#		+.I#zz$*C*CI*NOC
9  $CDII;l[\Z]^s$   !G;&G	!G 
G9G44G9r  c                     Uc  gU Vs/ s H*  n[        U[        5      (       d  M  UR                  5       PM,     sn$ s  snf )z[
Serialize from_node metadata from a list of NodeSource objects to a list of dictionaries.
N)rv   r   to_dict)r   r  node_sources      rk   r"  *GraphModuleSerializer._serialize_from_node  sI       )
(+z2 "K!(
 	
 
s   ==script_obj_metac                 j    [         R                  SU5        [        UR                  UR                  S9$ )Nz[serialize_script_obj_meta] %sr  )r  r  r,   rR  r  r   r-  s     rk   r  /GraphModuleSerializer.serialize_script_obj_meta  s2     			2OD  %%%//
 	
rj   c           	         [        U[        R                  R                  5      (       a0  UR                  R
                   Vs/ s H  o3R                  PM     nnOCU[        ;   d   e[        [        R                  " U5      R                  R                  5       5      n/ n[        XB5       H<  u  pcUR                  [        UU R!                  U5      ["        R$                  S95        M>     U$ s  snf )NrR  r  kind)rv   rw   rx   ry   r:  	argumentsrR  r  rK  inspect	signature
parametersrx  zipr  rA   r  r(   
POSITIONAL)r   r{   r  r  
args_namesserialized_args	args_names          rk   r  -GraphModuleSerializer.serialize_sym_op_inputs  s    b%**//00.0jj.B.BC.Bs((.BJCJ>!>g//3>>CCEFJ!*3NI""",,S1%00 4  Ds   C,Nr=  c           
      @   S n/ n[        U[        R                  R                  R                  5      (       a  US   nUS   nUR                  Xg5      nOB[        U[        R                  R                  /[        5       Q75      (       d   e[        U5      nUc   eU=(       d    0 n[        UR                  5       H  u  pU	R                  U;   aZ  UR                  [        U	R                  U R                  X9R                     U	R                   5      ["        R$                  S95        Mo  U	R&                  (       d_  U[)        U5      :  aP  UR                  [        U	R                  U R                  X(   U	R                   5      ["        R*                  S95        M  M     U$ )Nr   r%   r2  )rv   rw   rp  	torchbindCallTorchBindr&   rx   ry   _registered_extension_typesr>  r  r4  rR  r  rA   r  r   r(   KEYWORD
kwarg_onlyr  r9  )
r   r=  r  rj  r&   r;  objmethodr   
schema_args
             rk   r  &GraphModuleSerializer.serialize_inputs  sg    fe55??MMNNq'C!WF]]3/F..O1L1NO    -V4F!!!2&v'7'78MA&(&&!'__ 00"??3Z__ *11  **q3t9}&&!'__ 00*//J)44 - 90 rj   c                 @   U Vs/ s H+  n[        SU R                  U5      [        R                  S9PM-     nnUR	                  UR                  5        VVs/ s H-  u  pS[        UU R                  U5      [        R                  S9PM/     snn5        U$ s  snf s  snnf )z=
For serializing HOO inputs since HOOs do not have a schema.
 r2  )rA   r  r(   r9  extendro   rB  )r   r  rj  arB  rR  s         rk   r  *GraphModuleSerializer.serialize_hoo_inputs2  s     	
  T11!4<;R;R 	 	 
 	  &||~  .GD ,,Q/%--
  .		
 !
s   2B4B
c                 f    [        U5      [        L =(       d    [        U[        R                  5      $ rn   )r   r   rv   rw   rR   r   r  s     rk   is_inductor_sym_int_arg-GraphModuleSerializer.is_inductor_sym_int_argH  s#    
 CyC@:c5<<#@@rj   c                     [        U5      [        L =(       dN    [        U[        R                  R
                  5      =(       a#    UR                  U R                  R                  ;   $ rn   )	r   r   rv   rw   r  rC   rR  r  rF  rN  s     rk   is_sym_int_arg$GraphModuleSerializer.is_sym_int_argO  sG    CyC 
sEHHMM* <D,,;;;	
rj   c                     [        U[        5      =(       dN    [        U[        R                  R                  5      =(       a#    UR
                  U R                  R                  ;   $ rn   )rv   r   rw   r  rC   rR  r  rH  rN  s     rk   is_sym_float_arg&GraphModuleSerializer.is_sym_float_argU  sE    #u% 
sEHHMM* >D,,===	
rj   c                     [        U[        5      =(       dN    [        U[        R                  R                  5      =(       a#    UR
                  U R                  R                  ;   $ rn   )rv   r   rw   r  rC   rR  r  rG  rN  s     rk   is_sym_bool_arg%GraphModuleSerializer.is_sym_bool_arg[  sE    #t$ 
sEHHMM* =D,,<<<	
rj   arg_typec           
      !  ^ ^ SS K Js  Jn  UR                  UR                  4m[        U[        R                  R                  5      (       Ga1  UR                  S:X  Gar  [        UR                  [        5      (       d   e[        UR                  R                  UR                  5      n[        U[        R                  5      (       a  [!        S5      e[        U[        R                  R"                  5      (       aP  T R%                  5          T R'                  U5      nS S S 5        [(        R*                  " [-        UR                  WS9S9$ [/        U5      R0                  S:X  aG  [        USS 5      n[        USS 5      nUc   S	5       eUc   S
5       e[(        R*                  " U SU 3S9$ [!        SUR                   S[/        U5       35      eT R3                  U5      (       a0  [(        R*                  " [4        R*                  " UR6                  S9S9$ T R9                  U5      (       a0  [(        R*                  " [:        R*                  " UR6                  S9S9$ T R=                  U5      (       a0  [(        R*                  " [>        R*                  " UR6                  S9S9$ [        UR@                  S   [B        RD                  5      (       a=  [(        R*                  " [E        UR6                  UR@                  S   RF                  S9S9$ UR6                  T RH                  ;   a4  T RH                  UR6                     n[(        R*                  " [K        US9S9$ [(        R*                  " [K        UR6                  S9S9$ [        UT5      (       a5  URM                  5       n	U	c   S5       e[(        R*                  " [K        U	S9S9$ [        XRN                  5      (       at  URM                  5       n	U	c   S5       eURQ                  5       n
U
RS                  5       RU                  5       nU
T RV                  U	'   [(        R*                  " [E        X5      S9$ [        U[        RX                  5      (       a/  [(        R*                  " [4        R*                  " [        U5      S9S9$ [        U[        RZ                  5      (       a/  [(        R*                  " [:        R*                  " [        U5      S9S9$ [/        U5      [\        L a  [(        R*                  " US9$ [/        U5      [        L a  [(        R*                  " US9$ [/        U5      [^        L a  [(        R*                  " US9$ [/        U5      [`        L a  [(        R*                  " US9$ [/        U5      [b        L a0  [(        R*                  " [e        URf                  URh                  S9S9$ Uc  [(        R*                  " SS9$ [        U[j        5      (       an  0 nURm                  5        HD  u  p[        U[        5      (       d  [!        S [/        U5       35      eT Ro                  U5      X'   MF     [(        R*                  " US!9$ [        U[p        [r        45      (       Ga  [u        U5      S:X  Ga  UGb  [        U[        Rv                  5      (       a  URy                  5       n[        U[        Rz                  5      (       d   eURy                  5       n[        U[        Rv                  5      (       a  URy                  5       n[        U[        R|                  5      (       a  [(        R*                  " / S"9$ [        U[        R~                  5      (       a  [(        R*                  " / S#9$ [        U[        R                  5      (       a  [(        R*                  " / S$9$ [        U[        R                  5      (       a  [(        R*                  " / S%9$ [        U[        R                  5      (       a  [(        R*                  " / S&9$ [!        S'U S(35      e[        R                  S)5        [(        R*                  " / S&9$ [        S* U 5       5      (       a  [(        R*                  " [q        U5      S"9$ [        S+ U 5       5      (       a  [(        R*                  " [q        U5      S#9$ [        S, U 5       5      (       a  [(        R*                  " [q        U5      S$9$ [        S- U 5       5      (       a  [(        R*                  " [q        U5      S%9$ [        U 4S. jU 5       5      (       a  / nU H  n[        U[        RX                  5      (       a.  UR                  [4        R*                  " [        U5      S95        MP  [/        U5      [^        L d  Md  UR                  [4        R*                  " US95        M     [(        R*                  " US/9$ [        S0 U 5       5      (       a@  [(        R*                  " U Vs/ s H   n[:        R*                  " [        U5      S9PM"     snS19$ [        U 4S2 jU 5       5      (       a  / nU H  n[        U[        R                  R                  5      (       a/  UR                  [4        R*                  " UR6                  S95        M[  [/        U5      [^        L d  Mo  UR                  [4        R*                  " US95        M     [(        R*                  " US/9$ [        U 4S3 jU 5       5      (       a  / nU H  n[        U[        R                  R                  5      (       a/  UR                  [:        R*                  " UR6                  S95        M[  [        U[`        5      (       d  Mr  UR                  [:        R*                  " US95        M     [(        R*                  " US19$ [        U 4S4 jU 5       5      (       a  / nU H  n[        U[        R                  R                  5      (       a/  UR                  [>        R*                  " UR6                  S95        M[  [        U[\        5      (       d  Mr  UR                  [>        R*                  " US95        M     [(        R*                  " US59$ [        S6 U 5       5      (       a\  / nU H@  nUR                  S:X  a  [!        S5      eUR                  [K        UR6                  S95        MB     [(        R*                  " US&9$ [        S7 U 5       5      (       a*  S8 n[(        R*                  " [q        [        UU5      5      S99$ [        U4S: jU 5       5      (       a:  [(        R*                  " U Vs/ s H  n[K        URM                  5       S9PM     snS&9$ [        U4S; jU 5       5      (       a-  U4S< jn[(        R*                  " [q        [        UU5      5      S99$ [        S= U 5       5      (       a.  [(        R*                  " U Vs/ s H  n[q        U5      PM     snS>9$ [!        S?U Vs/ s H  n[/        U5      PM     sn 35      e[        U[        R                  5      (       a  [(        R*                  " [        U   S@9$ [        U[        R                  5      (       a0  [(        R*                  " [        UR.                  UR                  SA9SB9$ [        U[        R                  5      (       a  [(        R*                  " [        U   SC9$ [        U[        R                  5      (       a  [(        R*                  " [        U   SD9$ [        U[        R                  R                  5      (       a  UR                  SE5      (       a  UR                  SF5      (       d  [!        SGU SH35      eSI[u        T RV                  5       3nUT RV                  U'   URS                  5       RU                  5       n[(        R*                  " [E        UU5      S9$ [        U[        R                  R                  [        R                  R                  45      (       a#  [(        R*                  " T R                  U5      SJ9$ [!        SK[/        U5       SLU 35      e! , (       d  f       GN= fs  snf s  snf s  snf s  snf )MNr   get_attrz?getattr nodes containing tensors should not appear in the graph)rR  r  )as_graphLoweredBackendModulemodule_name
backend_idzmodule_name should not be Nonezbackend_id should not be None-	as_stringzUnsupported getattr attribute z with type: as_namer  as_sym_floatas_sym_boolr!  r  r  rR  r  zBuffer must have valid namer   r   r   )realimag)
as_complexTas_nonezDict keys must be strings, got )as_string_to_argument)as_bools)as_ints)	as_floats)
as_stringsr  zEmpty list with type z nyi.zUnsure how to serialize the given empty list, as we don't know what is the type of this argument. Serializing it as a tensor list by default.c              3   D   #    U  H  n[        U5      [        L v   M     g 7frn   )r   r   rz   rK  s     rk   r|   8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     0Cq47d?C    c              3   D   #    U  H  n[        U5      [        L v   M     g 7frn   r   r   rv  s     rk   r|   rw         1ST!W^Srx  c              3   D   #    U  H  n[        U5      [        L v   M     g 7frn   )r   r   rv  s     rk   r|   rw    s     3s!T!W%srx  c              3   D   #    U  H  n[        U5      [        L v   M     g 7frn   )r   r2  rv  s     rk   r|   rw    r{  rx  c              3   F   >#    U  H  nTR                  U5      v   M     g 7frn   )rO  rz   rK  r   s     rk   r|   rw    s     BcT11!44c   !)as_sym_intsc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frn   )rv   rw   rP   rv  s     rk   r|   rw    s     @CqZ5>>22Cs   '))as_sym_floatsc              3   F   >#    U  H  nTR                  U5      v   M     g 7frn   )rR  r  s     rk   r|   rw    s     9ST((++Sr  c              3   F   >#    U  H  nTR                  U5      v   M     g 7frn   )rU  r  s     rk   r|   rw    s     ;s!T**1--sr  c              3   F   >#    U  H  nTR                  U5      v   M     g 7frn   )rX  r  s     rk   r|   rw    s     :cT))!,,cr  )as_sym_boolsc              3   j   #    U  H)  n[        U[        R                  R                  5      v   M+     g 7frn   )rv   rw   r  rC   rv  s     rk   r|   rw  &  s"     ?3aZ588==113r}   c              3      #    U  H4  n[        U[        R                  R                  [	        S 5      45      v   M6     g 7frn   )rv   rw   r  rC   r   rv  s     rk   r|   rw  0  s+     MAZEHHMM4:#>??s   <>c                     U c  [         R                  " SS9$ [        U [        R                  R
                  5      (       a%  [         R                  " [        U R                  S9S9$ [        SU  35      eNTrn  rj  r  z!Unsupported list/tuple argument: )	rD   r   rv   rw   r  rC   rT   rR  rb   rK  s    rk   serialize_optional_tensor_argsMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_args2  sc    y5<<TJJ#Auxx}}555<<&4!&&&A   -/PQRPS-TUUrj   )as_optional_tensorsc              3   <   >#    U  H  n[        UT5      v   M     g 7frn   )rv   rz   rK  inductor_tensor_bufferss     rk   r|   rw  ?  s     ISZ#:;;Ss   c              3   X   >#    U  H  n[        U/ TQ[        S 5      P75      v   M!     g 7frn   )rv   r   r  s     rk   r|   rw  D  s.      OR!
1D 7DdDEEss   '*c                    > U c  [         R                  " SS9$ [        U T5      (       a)  [         R                  " [        U R	                  5       S9S9$ [        SU  35      er  )rD   r   rv   rT   get_namerb   )rK  r  s    rk   r  r  H  s_    y5<<TJJ#A'>??5<<&4!**,&G   -/PQRPS-TUUrj   c              3   t   #    U  H.  n[        U[        5      =(       a    [        S  U 5       5      v   M0     g7f)c              3   D   #    U  H  n[        U5      [        L v   M     g 7frn   rz  rz   xs     rk   r|   BGraphModuleSerializer.serialize_input.<locals>.<genexpr>.<genexpr>V  s     ,GQT!W^Qrx  N)rv   r   allrv  s     rk   r|   rw  U  s.      QTA
1e$G,GQ,G)GGQTs   68)as_int_listsz&Unsupported list/tuple argument type: )as_scalar_typer   )	as_device)as_memory_format)	as_layout__getstate____setstate__z!Unable to serialize custom class z7. Please define serialization methods via def_pickle()._custom_obj_)as_operatorzUnsupported argument type: z with schema arg_type )Xtorch._inductor.ir	_inductorirBufferReinterpretViewrv   rw   r  rC   r{   r=  r2  r]  r  r  r  rb   r3   r  serialize_graphr'   r   r2   r   re   rR  rS   rR  rU  rQ   rX  rM   r  r  r,   r  r  rT   r  TorchBindObjectget_real_obj_typequalified_namer  rR   rP   r   r   r   complexr*   rk  rl  r  ro   r  rK  r   r  OptionalTypegetElementTypeListTypeBoolTypeIntType	FloatType
StringType
TensorTyper  r  r  r  r   r   r   r   r-   r   memory_format!_TORCH_TO_SERIALIZE_MEMORY_FORMATr   r   _CScriptObject_has_methodrx   ry   r  r  )r   r  rZ  inductor_irra  r  r_  r`  
dedup_namearg_namearg_valr  serialized_dictr  rp   	elem_typer{  rK  r4  r  r   custom_obj_namer  s   `                     @rk   r  %GraphModuleSerializer.serialize_inputb  s   00 ''#

 c588==))vv#!#**c2222syy66

CdELL11(Y   ehh&:&:;;..0 $ 4 4T : 1#??!.CJJe!L  $Z((,BB #*$t"DK!(|T!BJ&2T4TT2%1R3RR1#??}Aj\5RSS(8LQUVZQ[P\]  $$S))-44SXXF  &&s++!1!8!8!J  %%c** / 6 6sxx H  CHHUOR-A-ABB"3 XX%1J1J# 
 T999!99#((C
Z1PQQSXX1NOO455
 ||~H'F)FF'??^-JKK8899 ||~H'F)FF'&&(G668I)0DX&??1B81WXXU\\**
 ??n.C.CCPSH.UVVU^^,,
 ??-44SXF  #Y$??3//#Y#??S11#Y#??#..#Y%??C00#Y'!??'SXXCHHE  [??400T"" O!iik
!#s++(+J4PS9+)VWW'+';';E'B$ * ??IIdE]++3x1}'!(E,>,>??#+#:#:#<%h???? ( 7 7 9I!)U-?-?@@$-$<$<$>	!)U^^<<';;#Iu}}=='r::#Iu??'<<#Iu/?/?@@'"==#Iu/?/?@@'"== -/DYKu-UVV KKF
 $??b990C000S	::1S111tCy993s333c;;1S111$s)<<BcBBB A!!U\\22n&;&;CF&KLaCn&;&;1&EF	 
  6::@C@@@TW"XTWq#3#:#:3q6#JTW"X  9S999A!!UXX]]33n&;&;AFF&KLaCn&;&;1&EF	 
  6::;s;;;A!!UXX]]33&6&=&=aff&MN#Au--&6&=&=q&IJ	 
  V<<:c:::A!!UXX]]33o&<&<QVV&LM#At,,o&<&<Q&GH	 
  F;;?3???	Attz),]  $$^%@A   )<<MMMMV  (,S1OQT-U(V  ISIIIKNO3aAJJL A3O   OR  V  (,S1OQT-U(V   QT    c4JcT!Wc4JKK$<s=Ss!d1gs=S<TU  U[[))??2KC2PQQU\\**??V-STTU0011??!B3!G  U\\**??-G-LMMUXX2233//OON33$7u => >  !-S1A1A-B,CDO03D_-		224I??/K  ejj33UZZ5S5STUU??t/F/Fs/KLL -d3i[8NxjY U 10j #Yr  P. 5K >Ts+   AB'AB-=!AB2AB79AB<
B
AB*c                     XR                   R                  ;  d   e[        U5      U R                   R                  U'   [        US9$ )Nrj  )r  rE  r   rT   r   rR  r  s      rk   r  -GraphModuleSerializer.serialize_tensor_output  s@    ++99999/DX/N&&t,4((rj   c                     XR                   R                  ;  d   e[        U5      U R                   R                  U'   [        R                  " US9$ Nrd  )r  rF  r   rS   r   r  s      rk   r  .GraphModuleSerializer.serialize_sym_int_output  sF    ++:::::0A(0K''-$$T22rj   c                     XR                   R                  ;  d   e[        U5      U R                   R                  U'   [        R                  " US9$ r  )r  rH  r   rQ   r   r  s      rk   serialize_sym_float_output0GraphModuleSerializer.serialize_sym_float_output  sF    ++<<<<<2Eh2O))$/&&t44rj   c                     XR                   R                  ;  d   e[        U5      U R                   R                  U'   [        R                  " US9$ r  )r  rG  r   rM   r   r  s      rk   serialize_sym_bool_output/GraphModuleSerializer.serialize_sym_bool_output  sF    ++;;;;;1CH1M((.%%d33rj   specc           	      X   [         R                  SU5        UR                  [        R                  R
                  :X  Ga  [        UR                  [        R                  5      (       Ga  [        UR                  R                  5      [        L a*  [        R                  " UR                  R                  S9nGO<[        UR                  R                  5      [        L a)  [        R                  " UR                  R                  S9nO[        UR                  R                  5      [        L a)  [        R                  " UR                  R                  S9nO[        UR                  R                  5      [         L a)  [        R                  " UR                  R                  S9nOOUR                  R                  c  [        R                  " SS9nO#[#        SUR                  R                   S	35      e[$        R                  " ['        UR                  R(                  US
9S9$ [$        R                  " [+        U R-                  UR                  5      S9S9$ UR                  [        R                  R.                  :X  a{  UR0                  c   e[        UR                  [        R2                  5      (       d   e[$        R                  " [5        [3        UR                  R(                  S9UR0                  S9S9$ UR                  [        R                  R6                  :X  a  UR0                  c   e[        UR                  [        R2                  5      (       d   eUR8                  c   e[$        R                  " [;        [3        UR                  R(                  S9UR0                  UR8                  S9S9$ UR                  [        R                  R<                  :X  a{  UR0                  c   e[        UR                  [        R2                  5      (       d   e[$        R                  " [?        [3        UR                  R(                  S9UR0                  S9S9$ UR                  [        R                  R@                  :X  a  UR0                  c   e[        UR                  [        RB                  5      (       d   e[$        R                  " [E        [C        UR                  R(                  UR                  RF                  S9UR0                  S9S9$ UR                  [        R                  RH                  :X  aa  [        UR                  [        RJ                  5      (       d   e[$        R                  " [M        [K        UR                  R(                  S9S9S9$ [O        SU 35      e)Nz[serialize_input_spec] %sr   r   rb  r   Trn  zUnhandled constant input z to serializerR  rp   )constant_inputr  )
user_inputrj  r  parameter_name)	parameter)r  buffer_name
persistent)r  )r  tensor_constant_name)tensor_constantr  )r  r  )
custom_objtokenUnknown argument kind: )(r  r  r3  r  	InputKind
USER_INPUTrv   r  ConstantArgumentr   rp   r   r+   r   r   r2  r   rb   r5   r7   rR  rY   serialize_argument_spec	PARAMETERr=  rT   r:   BUFFERr  r6   CONSTANT_TENSORr;   
CUSTOM_OBJr,   r8   r  TOKENrV   r9   r|  )r   r  constant_specs      rk   serialize_input_spec*GraphModuleSerializer.serialize_input_spec  s   		-t499///$((B$7$788'3.$1$8$8$OM$((..)T1$1$8$8$PM$((..)S0$1$8$8488>>$RM$((..)U2$1$8$8$((..$QMXX^^+$1$8$8$FM(3DHHNN3C=Q  !''#;!XX]]-$  !'',1M1Mdhh1WX  YY",,000;;***dhh(9(9::::##.&DHHMM:#';;  YY",,---;;***dhh(9(9::::??...##(&DHHMM: $#  YY",,666;;***dhh(9(9::::## 9&DHHMM:)-!  YY",,111;;***dhh(<(<====##/)!XX]]dhh6H6H %)KK	  YY",,,,,dhh(8(89999##$%488==9  !#:4&!ABBrj   c                 	   [         R                  SU5        UR                  [        R                  R
                  :X  a4  [        R                  " [        U R                  UR                  5      S9S9$ UR                  [        R                  R                  :X  aa  [        UR                  [        R                  5      (       d   e[        R                  " [        [        UR                  R                  S9S9S9$ UR                  [        R                  R                   :X  a{  UR"                  c   e[        UR                  [        R                  5      (       d   e[        R                  " [%        [        UR                  R                  S9UR"                  S9S9$ UR                  [        R                  R&                  :X  a{  UR"                  c   e[        UR                  [        R                  5      (       d   e[        R                  " [)        [        UR                  R                  S9UR"                  S9S	9$ UR                  [        R                  R*                  :X  a{  UR"                  c   e[        UR                  [        R                  5      (       d   e[        R                  " [-        [        UR                  R                  S9UR"                  S9S
9$ UR                  [        R                  R.                  :X  a{  UR"                  c   e[        UR                  [        R                  5      (       d   e[        R                  " [1        [        UR                  R                  S9UR"                  S9S9$ UR                  [        R                  R2                  :X  a{  UR"                  c   e[        UR                  [        R                  5      (       d   e[        R                  " [5        [        UR                  R                  S9UR"                  S9S9$ UR                  [        R                  R6                  :X  aa  [        UR                  [        R8                  5      (       d   e[        R                  " [;        [9        UR                  R                  S9S9S9$ [=        SU 35      e)Nz[serialize_output_spec] %sr  )user_outputrj  )loss_output)r  r  )buffer_mutationr  )parameter_mutation)gradient_to_parameter)r  user_input_name)gradient_to_user_input)user_input_mutationr  r  )r  r  r3  r  
OutputKindUSER_OUTPUTrE   r   rZ   r  r  LOSS_OUTPUTrv   rT   r=   rR  BUFFER_MUTATIONr=  r)   PARAMETER_MUTATIONrG   GRADIENT_TO_PARAMETERr/   GRADIENT_TO_USER_INPUTr0   USER_INPUT_MUTATIONrX   r  rV   rF   r|  )r   r  s     rk   serialize_output_spec+GraphModuleSerializer.serialize_output_spec  sv   		.599111$$*t/K/KDHH/UV  YY"--333dhh(9(9::::$$*~488==/QR  YY"--777;;***dhh(9(9::::$$ 2&DHHMM: $!  YY"--:::;;***dhh(9(9::::$$#8&DHHMM:#';;$  YY"--===;;***dhh(9(9::::$$&=&DHHMM:#';;'  YY"-->>>;;***dhh(9(9::::$$'>&DHHMM:$(KK(  YY"--;;;;;***dhh(9(9::::$$$9&DHHMM:$(KK%  YY"-----dhh(8(89999$$%%488==9  !#:4&!ABBrj   sigc           	          [         R                  S5        [        UR                   Vs/ s H  o R	                  U5      PM     snUR
                   Vs/ s H  o R                  U5      PM     snS9$ s  snf s  snf )Nz
[serialize_signature]input_specsoutput_specs)r  r  r4   r  r  r  r  )r   r  r   s      rk   serialize_signature)GraphModuleSerializer.serialize_signature%  sd    		+,?BO!2215OADAQAQRAQA44Q7AQR
 	
ORs   A2A7
r  c                    [        U[        R                  5      (       a%  [        R                  " [        UR
                  S9S9$ [        U[        R                  5      (       a0  [        R                  " [        R                  " UR
                  S9S9$ [        U[        R                  5      (       a0  [        R                  " [        R                  " UR
                  S9S9$ [        U[        R                  5      (       a  U R                  UR                  5      $ [        U[        R                  5      (       a0  [        R                  " [        UR
                  UR                  S9S9$ [        S5      e)	Nrj  r  rd  r  rf  r  r  TODO)rv   r  rT   r'   r   rR  rS   rQ   r  r  rp   r,   r  r|  r   r  s     rk   r  -GraphModuleSerializer.serialize_argument_spec,  s    a**++??^-HII2,,--??n.C.CAFF.STT2..//??0@0G0GPQPVPV0WXX2..//''002//00??/QVVq{{S  !((rj   treespecc                 p   ^ ^ S[         R                  SS 4U U4S jjm[        U[        5      nT" U5        U$ )Ntsr   c           	      ^  > U R                   c  g U R                   [        L d%  [        R                  " U R                   5      (       a  [        R                  U R
                     R                  nUTR                  ;   af  TR                  U   R                  nX R
                  R                  :w  a3  [        SU R
                   SU R
                  R                   SU S35      eO*[        U R
                  R                  S9TR                  U'   U R                  5        H  nT" U5        M     g )Nz%The given TreeSpec's namedtuple type z was found to have field names z6 but somehow previously was found to have field names rm  )field_names)r   r   pytreeis_namedtuple_classSUPPORTED_SERIALIZED_TYPEScontextserialized_type_namer  r  _fieldsrb   rB   children)r  r  r  childr   store_namedtuple_fieldss       rk   r  IGraphModuleSerializer.serialize_treespec.<locals>.store_namedtuple_fields?  s   wwww*$(B(B277(K(K'-'H'HJJ(&& % (4+J+JJ"&"A"A,#!k   #jj&8&88,CBJJ< P==?ZZ=O=O<P QTT_S``ac  9 &"**2D2DE 334HI '. 'rj   )r  TreeSpecr   rW   )r   r  serialized_treespecr  s   `  @rk   serialize_treespec(GraphModuleSerializer.serialize_treespec<  s=    	/ 	/D 	/ 	/2 -X7GH)""rj   module_call_signaturec           	         [         R                  SU5        [        UR                   Vs/ s H  o R	                  U5      PM     snUR
                   Vs/ s H  o R	                  U5      PM     snU R                  UR                  5      U R                  UR                  5      UR                  =n(       a  US9$ S S9$ s  snf s  snf )Nz$[serialize_module_call_signature] %srB  rC  in_specout_specforward_arg_names)
r  r  r@   rB  r  rC  r  r"  r#  r$  r   r  r  namess       rk   serialize_module_call_signature5GraphModuleSerializer.serialize_module_call_signature\  s     			8:OP"9N9U9U9UA,,Q/9U :O9V9V9VA,,Q/9V ++,A,I,IJ,,-B-K-KL.@@@@ $
 	
 
 	
s   B?C
c           	          [         R                  S5        U Vs/ s HC  n[        UR                  UR                  (       a  U R                  UR                  5      OS S9PME     sn$ s  snf )Nz
[serialize_module_call_graph]fqnr6  )r  r  r?   r+  r6  r'  r   r  entrys      rk   serialize_module_call_graph1GraphModuleSerializer.serialize_module_call_graphn  sh     			34 +

 + II  88I +

 
	
 

s   A
A'c                    S[         S[        4S jnUR                  S:X  a?  [        UR                  [
        R                  R                  /[        5       Q75      (       d   e[        UR                  5      nUR                  n[        U5      S:X  a  / $ UR                  S   nU" UR                  5      (       a\  / n[        U5       H6  u  pxU R                  X5      n	UR                  U R!                  X5      5        M8     ["        R$                  " US9/$ [        U5      S:X  a  U R'                  UR(                  U5      /$ / n
[        [+        XT5      5       GHn  u  nu  pUc`  [        UR,                  [
        R.                  [
        R0                  45      (       d   eU
R                  ["        R$                  " S	S
95        Ml  [        U[2        5      (       an  [        UR,                  [
        R.                  [
        R0                  45      (       d   eU R                  X5      n	U
R                  U R'                  X5      5        M  [        U[4        5      (       a  [        UR,                  [
        R6                  5      (       a7  [        UR,                  R9                  5       [
        R0                  5      (       d   eU R;                  X5      nUc   e/ n[        U5       H<  u  pUc  M
  U R                  X5      nUR                  U R!                  UU5      5        M>     U
R                  ["        R$                  " US95        GM  [        U[<        [>        [@        [B        45      (       a5  U R                  X5      nU
R                  U R'                  UU5      5        GMI  [E        S[G        U5       SURI                  5        35      e   U
$ )a  For a given node, return the dataclass representing its output values.

[NOTE: Multiple outputs] We handle aggregates differently than FX. For
FX, it looks like:

    x = call_function("multiple_return", ...)
    element0 = call_function(getitem, x, 0)
    foo = call_function("use_output", element0)

We do not want the intermediate `getitem` call, so our serialized thing looks like:

    element0, element1, element2 = call_function("multiple_return", ...)
    foo = call_function("use_output", element0)

We want names to be consistent across these two schemes, so that we can
mostly reuse the names coming from FX. This function computes a mapping from
the FX representation to our representation, preserving the names.
r=  r   c                     [        U 5      nUR                  n[        U5      S:w  a  gUS   R                  n[	        U[
        R                  5      =(       a(    [	        UR                  5       [
        R                  5      $ )Nr%   Fr   )	r>  returnsr  	real_typerv   rw   r  r  r  )r=  r&   r2  return_types       rk   _is_single_tensor_list_returnNGraphModuleSerializer.serialize_outputs.<locals>._is_single_tensor_list_return  sg    ,V4FnnG7|q !!*..Kk5>>: z**,e.>.>@ rj   r  r   r!  r  r%   Trn  zUnhandled output type z from node )%r   r   r{   rv   r=  rw   rx   ry   rA  r>  r2  r  r  r  r  r  r  r'   r   r  rR  r8  r3  r  r  r   rK  r  r  r  r   rR   r   rP   
ValueErrorr   format_node)r   r   r5  r&   r2  r  r  r  r  rR  output_argumentsreturn_schemar  r  r   msub_user_node_nameuser_node_names                     rk   r  'GraphModuleSerializer.serialize_outputs~  sK   (		# 		$ 		 ww/)jKK%**//P2M2OP/
 /
 	
 
 )5..w<1I99U# )55K&x0	66tA""4#?#?#KL 1 OO{;<<\Q))$))X>?? *3C4J*K&C&$|!!++e.@.@%BRBR-S   
 !''(EFD*--!!++e.@.@%BRBR-S    66tA ''(=(=d(IJD$''!!++U^^  !++::<e>N>N  
 !66tA	 ,,,%dODAy )-)H)H)V&KK < <=OQR ST	 ,
 !''4(HID3x"@AA!%!@!@!K ''(=(=nd(ST ,T$ZLDDTDTDVCWX G +LN  rj   c                 0   UR                   S   n[        U[        5      (       Ga(  / n[        U5       GH  u  pEU R	                  X5      n[        U[
        5      (       a  Uc   e/ n[        U5       Hm  u  p[        U	[        R                  5      (       d  [        S[        U	5       S35      eU R                  Xh5      n
UR                  U R                  X5      5        Mo     UR                  [        R                  " US95        M  Ub  UR                  OUR                   SU 3n
UR                  U R!                  X5      5        GM     U$ [        U["        5      (       a  / nUR%                  5        Hm  u  p[        U[        R                  5      (       d  [        S[        U5       S35      eU R                  X5      n
UR                  U R                  X5      5        Mo     [        R                  " US9/$ U R!                  UR                  U5      /$ )z>
For serializing HOO outputs since HOOs do not have a schema.
r!  z Serialize list output with type z nyir  r  )r  rv   r   r  r  rK  rw   r  rb   r   r  r  r  r'   r   rR  r  r  ro   )r   r   r  rC  r   element_meta_valr  tensorsjr;  rR  r  r  r  s                 rk   r  +GraphModuleSerializer.serialize_hoo_outputs  s    99U#h&&G'0':# 66t?	.55$000 G )*: ;)!U\\::"0"B47)4 P#   $>>yLt'C'CD'LM !< NN8??g#FG
 %0 " $		{(1#6  NN4#8#8#PQ1 (;4 N$''K%^^-	!$55(:4:,dK  66tA""4#?#?#KL . OO{;<<))$))X>??rj   rR  r  c                    Uc  [         R                  " SS9$ [        U[        R                  5      (       a#  [         R                  " U R                  X5      S9$ [        U[        [        R                  45      (       a#  [         R                  " U R                  X5      S9$ [        U[        [        R                  45      (       a:  [        U[        5      (       a   e[         R                  " U R                  X5      S9$ [        U[        [        R                  45      (       a#  [         R                  " U R                  X5      S9$ [        SU 35      e)NTrn  r  rh  r  rf  zUnable to serialize output )r'   r   rv   rw   r  r  r   rL   r  r   rR   r  r   rP   r  rb   r  s      rk   r  &GraphModuleSerializer.serialize_output  s   ??400h--??66tF  4"788?? ::4J  3"566!(D1111??88H  5%.."9::??!<<TL 
 :8*EFFrj   c                    UR                   S   n0 nUR                   HI  nUR                  [        R                  L d   SU SU S35       eUR
                  X4R                  S   '   MK     [        U5       H  u  pVXS;  d  M  UR
                   SU 3X5'   M!     / n[        U5       H(  u  pUR                  U R                  X8   U	5      5        M*     U$ )Nr!  z
User node z of z is incorrectr%   r  )
r  r  r=  r  r  rR  r  r  r  r  )
r   r   r  idx_to_namer  r  r  arg_listr   r@  s
             rk   _handle_getitem_users+GraphModuleSerializer._handle_getitem_users4  s    99U#JJD;;("2"22 TF$tfM:2 )-		K		!%	   )FC %&*ii[#>  * #,X#6AOO,,[^=MN $7
 rj   graph_modulec                 2   [        U[        R                  R                  5      (       d   e[        R                  SUR                  SS95        UR                  R                   H#  n [        U SUR                   35      " U5        M%     [!        U R"                  R$                  U R"                  R                  U R"                  R&                  U R"                  R(                  U R"                  R*                  U R"                  R,                  U R"                  R.                  U R"                  R0                  U R"                  R2                  S9	$ ! [         a;  n[        SU SUR                  5        S[        R                  " 5        35      UeS nAff = f)	Nz[serialize_graph]

%sF)print_outputhandle_zFailed serializing node z in graph: 
 Original exception )	rB  rD  rE  rF  rH  rG  rJ  rC  rI  )rv   rw   r  r3   r  r  print_readabler  rD  r]  r{   r  rb   r8  	traceback
format_excr1   r  rB  rE  rF  rH  rG  rJ  rC  rI  )r   rK  r   r  s       rk   r  %GraphModuleSerializer.serialize_graphM  se   ,(<(<====		%|'B'BPU'B'V	
 !&&,,Dy1248 - ##**""((**88++::!-->> ,,<<"..@@$$,,$($4$4$L$L

 
	
  $.tfK@P@P@R?SSijsj~j~  kA  jB  Cs   )E
F6FFr  c                     0 nUR                  S5      =n(       a2  [        R                  SU5         [        R                  " U5      US'   U$ U$ ! [
         a  n[        SU 35      UeS nAff = f)Nr  z%
[serialize_graph_module_metadata] %sz9Failed to serialize custom metadata for graph with error )r~  r  r  r   r   r  rb   )r   r  r#  r  r  s        rk   serialize_graph_module_metadata5GraphModuleSerializer.serialize_graph_module_metadatag  sy    XXh''6'II>G $

6 2H 
s
  $OPQsSs   A 
A-A((A-c                    [         R                  S5        U R                  U5      n[        UU R	                  U R
                  5      U R                  U R                  5      U R                  UR                  5      U R                  S9$ )Nz
[serialize])r  r6  r  r  r  )r  r  r  r3   r  r  r.  r  rU  r  r  )r   rK  r  s      rk   r\   GraphModuleSerializer.serializet  ss    		/"$$\2..t/C/CD">>t?U?UV99,:K:KL'+'F'F
 	
rj   )r  r  r  r  r  r  rn   )Hre   rf   rg   rh   r  ExportGraphSignaturerK  r?   r   r	   r  rw   r  rC   r  r  r2  r  r  r  r   r  r  r  r  r   r   r"  r,   r  rA   r  r  r  r   rO  rR  rU  rX  r'   r  rT   r  rS   r  rQ   r  r  r5   r  rE   r  r4   r  ArgumentSpecr  r  r  r  r@   r'  r.  r  r  r  rI  r3   r1   r  rU  r\   ri   rd   rj   rk   r]   r]     s   
G00
G   2 23
G % %4uxx}} 48X%((-- X	<C 	<w/ w/r5HUXX]]4K " ".uxx}} .c3h .`
!$z"23
	$tCH~&	'

!33
	
43F * 	--
 
m	-^D4G ,Ad A
T 

t 

d 
^Xc] ^h ^@	) )
3. 3
5<L 5
4> 4
KC KC) KCZ@C"-- @CJ @CD
r'>'> 
> 
) )X ) #6?? #s #@
%'%;%;
	
$
!%b&8&8!9
	o	
 f ehhmm f X f P/@%((-- /@DN /@bGS GC GH G:%((-- D<P 2
EHH,@,@ 
U 
4DcN 

ehh&:&: 

{ 

rj   r]   )	metaclassc                   d    \ rS rSrS\4S\\\\4      S\4S jjr	S\
R                  S\4S jrS	rg)
r^   i  Nopset_versionr	  c                     0 U l         U(       a  U R                   R                  U5        SU R                   ;  a+  [        R                  R	                  5       U R                   S'   X l        g Naten)r]  updaterw   r  _get_max_operator_versionr	  )r   r]  r	  s      rk   r   "ExportedProgramSerializer.__init__  sT    
 .0%%m4+++).)K)K)MDv&.rj   r   r   c           
      D   UR                  5         [        UR                  UR                  5      nUR	                  UR
                  5      n[        UR                  5      nUR                  R                  5       nUR                  R                  5        H  u  pgXe;  d   eXuU'   M     [        UU R                  U[        [        S   [        S   S9UR                    Vs/ s H  oR"                  PM     sn[$        R&                  UR(                  S9n	[+        U	[-        UR/                  5       5      5        [1        UR2                  SS9n
[5        U	[7        XR8                  5      [7        XPR8                  5      [7        UR:                  U R8                  5      5      $ s  snf )z;
Args:
    exported_program: Exported Program to serialize
r   r%   )majorminorrK  r]  r4  schema_version	verifierstorch_versionguards_codeF)in_place)validater]   r  r  r\   rK  r8  r4  r  copyr   ro   r.   r]  rK   rJ   ri  dialectrw   __version___guards_codecanonicalizer   rx  r$   r   r   r  r	  r   )r   r   gm_serializerserialized_graph_moduleserialized_range_constraintsr   nr   rr   serialized_epnew_state_dicts              rk   r\   #ExportedProgramSerializer.serialize  s}   
 	!!#-,,.>.P.P
 #0"9"9:J:W:W"X'B..(
$ %2$=$=$B$B$D	$..446DA%%%aL 7 (0,,:($Q'$Q' +;*D*DE*DQyy*DE++(55
 	]C	(8$9: 6''%
 "$^5I5IJ$Y0D0DE$ //1E1E	
 	
 Fs    F)r]  r	  )re   rf   rg   rh   DEFAULT_PICKLE_PROTOCOLr   r  r2  r   r   r  r.   r   r\   ri   rd   rj   rk   r^   r^     sH     376/S#X// /2
"*<*< 2
AS 2
rj   r^   c                      \ rS rSr\R
                   " S S5      5       rSGS jr\S\	S   4S j5       r
S\4S	 jrS\4S
 jr SHS\S\\\\\4      S\R(                  4S jjrS\S\\\R,                  4   4S jrS\S\\\R2                  4   4S jrS\S\\\R6                  4   4S jrS\S\4S jrS\ S\!R@                  4S jr"S\\\RF                  RH                  \4      4S jr%S\&S\RF                  RL                  4S jr'S\$S\(SS4S jr)S\*S\!RT                  4S jr+S\,S\!RX                  4S jr-S \.S\!R^                  4S! jr0  SIS"\1S#\\2\\Rf                  4   \44   S$\\2\\54   \44   S%\\\6\6\Rf                  S&4   \2\\54   4   \44      S'\\2\\7Rp                  4      S\4S( jjr9S)\S*\RF                  RH                  4S+ jr:S, r;S\$4S- jr<S.\=\>   4S/ jr?S0\@S\54S1 jrAS0\BS\54S2 jrCS3 rDS\$S*\RF                  RH                  4S4 jrES\$S*\RF                  RH                  4S5 jrFS*\RF                  RH                  S6\\G\H\I4   S7\S8\2\\54   4S9 jrJS*\RF                  RH                  S8\2\\54   4S: jrKS\$S*\RF                  RH                  SS4S; jrLS<\2\\4   S\2\\54   4S= jrMS>\\=\2\\54         S\\=\N      4S? jrOS@\@S\!R                  4SA jrQSB\RS\!R                  4SC jrSSD\=\T   S\=\!R                     4SE jrUSFrVg)Jr_   i  c                   b   \ rS rSr% \R
                  R                  \S'   \R                  \S'   \
\R                     \S'   \\\R                  4   \S'   \\\\R"                  \R$                  R&                  4   4   \S'   \\\4   \S'   \\\\R"                  S4   \\\4   4      \S	'   S
rg)GraphModuleDeserializer.Resulti  rK  r6  r  names_to_symbolsr   r   .r   rd   N)re   rf   rg   rh   rw   r  r3   r   r  rY  rK  r?   r  r2  r   r   r   r  r   r   r   r   r   r   ri   rd   rj   rk   Resultr}    s    hh****** 2 233sELL011eELL%((2D2D$DEEFF3344 uU\\3->'?c3h'O!PQQrj   r  r   Nc                     0 U l         [        5       U l        [        R                  R                  5       U l        [        R                  R                  5       U l	        g rn   )
serialized_name_to_noder   serialized_name_to_metarw   r  r1   r  r   Moduler  r   s    rk   r    GraphModuleDeserializer.__init__  s8    AC$07	$XX^^%
hhoo'rj   c              #     #    U R                   U R                  U R                  U R                  U R                  4n[
        R                  R                  5       U l         [
        R                  R                  5       U l        0 U l        [        5       U l        [        5       U l         S v   Uu  U l         U l        U l        U l        U l        g ! Uu  U l         U l        U l        U l        U l        f = f7frn   )r  r  r  r  unbacked_symbolsrw   r  r1   r   r  r   r   r  s     rk   save_graph_module)GraphModuleDeserializer.save_graph_module  s      JJKK((((!!
 XX^^%
hhoo'')$'.y$365		 
,,%
,,%s   B%C4(C ,"C4#C11C4serialized_targetc                 f    UR                  S5      u  p#USS  n[        U   nUR                  U5      $ )Nr  r%   )split_deserialization_registryfrom_op_name)r   r  r  r  r  s        rk   deserialize_extension_operator6GraphModuleDeserializer.deserialize_extension_operator  s;    .44S9	abM	+I6##G,,rj   c                    UR                  S5      (       a  [        nUR                  S5      SS  nOUR                  S5      (       a  [        nUR                  S5      SS  nOZUR                  S5      (       a  [        nUR                  S5      SS  nO)UR                  S5      (       a  U R                  U5      $ U$ UnU H"  n[        XE5      (       d  Us  $ [        XE5      nM$     U$ )N	_operatorrm  r%   rw   r(  r  )r  r  r  rw   r(  r  r\  r]  )r   r  r  serialized_target_namesr=  rR  s         rk   deserialize_operator,GraphModuleDeserializer.deserialize_operator  s    ''
 
 F&7&=&=c&B12&F#))'22F&7&=&=c&B12&F#))&11F&7&=&=c&B12&F#))#..667HII$$+D6(((( .	 ,
 rj   r   r   c           	        ^   SS[         R                  S[        [        [        [
        [        4      S[         R                  4U 4S jjjn[         R                  " U0 T R                  ET R                  ES9nU" XB5      $ )zl
Parses and does bottom-up processing of sympy.Expr nodes,
populating ShapeEnv & caching symbols as needed.
r/  r   r   c                   > U R                   (       d"  U R                  (       d  U R                  (       a  U $ [        U 5      nU R                   H  nTR                  U5        M     UTR                  ;   a  TR                  U   n OU TR                  U'   [        U [        R                  5      (       aU  [        R                  " U [        R                  [        R                  45      (       a  TR                  R!                  U 5        Ub5  U TR"                  R$                  ;  a  TR"                  R'                  X5        TR(                  R+                  U5      =n(       a/  TR"                  R-                  U UR.                  UR0                  S9  [        U [        R                  5      (       a+  [2        R4                  " SS9TR"                  R6                  U '   U $ )N)compiler_mincompiler_maxr%   )skip)
is_Integeris_Float
is_Booleanr2  r  _parse_sym_exprsymbol_name_to_symbolrv   r   r   r   symbol_is_typer   UNBACKED_INTUNBACKED_FLOATr  r   	shape_env
var_to_valadd_var_to_valsymbol_name_to_ranger~  constrain_symbol_ranger6  r7  r!   extractvar_to_stack)r/  r   r   r  vrr   s        rk   _process_sym_exprBGraphModuleDeserializer._parse_sym_expr.<locals>._process_sym_expr  sh    ~~
 s888C((- $ t99944X>C;>D..x8!#u||449W9Wd//1D1DE: : --11#6#4>>3L3L(LNN11#<2266x@@2@NN99%'XX%'XX :  c5<<007H7P7PVW7XDNN//4Jrj   )localsrn   )
r   Exprr   r   r   r   r   sympifysympy_functionsr  )r   r   r   r  r   s   `    rk   r  'GraphModuleDeserializer._parse_sym_expr  s     HL!	!	#+E#tU2B,C#D!	ZZ!	 !	F }}Id**Id.H.HI
 !,,rj   r   c                    UR                   nUR                  S:X  aw  UR                  c  S nO2UR                  R                  S:X  d   eUR                  R                   nU R                  UR                  U5      nU R
                  R                  XCS9$ UR                  S:X  a  [        U5      [        L d   eU$ [        SUR                   SUR                    35      e)Nr   r   r   zSymInt has invalid field type  with value )	rp   r   r   r  r   r  create_symintnoder   rb   r   r   r!  r   r/  s        rk   deserialize_sym_int+GraphModuleDeserializer.deserialize_sym_int@  s    gg66Yxxxx}}000xx~~&&s||T:C>>33C3CCVVx9###J 0QWWIN rj   c                    UR                   nUR                  S:X  a^  UR                  (       a  UR                  R                  OS nU R	                  UR
                  U5      nU R                  R                  XCS9$ UR                  S:X  a  [        U[        5      (       d   eU$ [        SUR                   SUR                    35      e)Nr   r   r   z SymFloat has invalid field type r  )rp   r   r   r   r  r   r  create_symfloatnoderv   r   rb   r  s        rk   deserialize_sym_float-GraphModuleDeserializer.deserialize_sym_floatS  s    gg66Y(+388$$dD&&s||T:C>>55c5EEVVz!c5))))J 2166(,qwwiP rj   c                 B   UR                   nUR                  S:X  a6  U R                  UR                  5      nU R                  R                  U5      $ UR                  S:X  a  [        U[        5      (       d   eU$ [        SUR                   SUR                    35      e)Nr   r   zSymBool has invalid field type r  )	rp   r   r  r   r  create_symboolnoderv   r   rb   )r   r   r!  r   s       rk   deserialize_sym_bool,GraphModuleDeserializer.deserialize_sym_boola  s    gg66Y''5D>>44T::VVy c4((((J 1!&&aggYO rj   r   c                 n  ^  T R                      [        [        [        R                  " [        U 4S jUR                   5       5      [        U 4S jUR                   5       5      [        UR                  5      [        UR                     UR                  S95      sS S S 5        $ ! , (       d  f       g = f)Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7frn   r  rz   r!  r   s     rk   r|   BGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>v  s!     UCTC$22377CTr  c              3   F   >#    U  H  nTR                  U5      v   M     g 7frn   r  r  s     rk   r|   r  w  s!     WCVC$22377CVr  )r   r   r   )fake_tensor_moder   r   rw   empty_stridedr   r   r   r   r   r   r   r   )r   r   s   ` rk   r  /GraphModuleDeserializer.deserialize_tensor_metan  s     ""##U;CTCTUUW;CVCVWW-k.@.@A3K4E4EF"-";";	 #""s   BB&&
B4r-  c                 T    [         R                  " UR                  UR                  S9$ )Nr  )r  r,   rR  r  r/  s     rk   deserialize_script_obj_meta3GraphModuleDeserializer.deserialize_script_obj_meta~  s)     ## %%%//
 	
rj   c                    UR                   S:X  a#  U R                  UR                  R                     $ UR                   S:X  a#  U R                  UR                  R
                     $ UR                   S:X  a#  U R                  UR                  R
                     $ UR                   S:X  a#  U R                  UR                  R
                     $ UR                   S:X  a  UR                  $ UR                   S:X  a  UR                  $ UR                   S:X  a  UR                  $ UR                   S:X  a  g [        S	U 35      e)
Nr  r  ri  rg  r   r   r   ro  z"Unable to deserialize output node )r   r  r  rR  r  re  ri  rg  r   r   r   rb   )r   r  s     rk   deserialize_graph_output0GraphModuleDeserializer.deserialize_graph_output  s
   ;;+%//0@0@0E0EFF[[L(//0A0A0I0IJJ[[M)//0B0B0J0JKK[[N*//0C0C0K0KLL[[H$== [[J&??"[[I%>>![[I% #EfX!NOOrj   serialized_graphc           	        ^  [         R                  S5        UR                  R                  5        H1  u  p#[         R                  SX#5        U4U 4S jjT R                  U'   M3     UR
                  R                  5        H1  u  p$[         R                  SX$5        U4U 4S jjT R                  U'   M3     UR                  R                  5        H1  u  p%[         R                  SX%5        U4U 4S jjT R                  U'   M3     UR                  R                  5        H1  u  p&[         R                  SX&5        U4U 4S	 jjT R                  U'   M3     UR                  R                  5        H1  u  p'[         R                  S
U5        U4U 4S jjT R                  U'   M3     [         R                  S5        [        UR                  5       GH  u  p[         R                  SU	5        U	R                  S;   aJ  U	R                  R                  n
T R                  R                  U
5      nXl        T R!                  X5        Mv  U	R                  S:X  a}  U	R                  R                  S:X  aJ  U	R                  R"                  n
T R                  R                  U
5      nXl        T R!                  X5        M  [%        SU	R                   S35      eU	R                  S;   au  T R&                  R(                  U   R*                  R                  =(       d    SU 3n
T R                  R                  U
5      nT R-                  U	5      UR.                  S'   GM  [%        SU	 35      e   UR0                   H0  n T R3                  UR4                  5      nT R7                  X5        M2     / nUR>                   H9  n[         R                  SU5        URA                  T RC                  U5      5        M;     URD                  (       a  [G        U5      S:X  d   eUS   nO[I        U5      nT R                  RK                  U5      nURD                  (       a*  URL                  S   R.                  S   UR.                  S'   O,[I        S URL                  S    5       5      UR.                  S'   T R                  R0                   Hg  nUR.                  RO                  S5      =nc  M#  [P        RR                  " UST RT                  T RV                  SS9=n(       d  MX  UUR.                  S '   Mi     [G        T RV                  5      S:X  d   eT R                  $ ! [8         a*  n[%        SU S[:        R<                  " 5        35      UeS nAff = f)!Nz
[deserialize_graph]z([deserialize_tensor_meta] %s (input): %sc                 &   > TR                  U 5      $ rn   )r  rr   r   s    rk   <lambda>;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>  s    t'C'CA'Frj   z$[deserialize_sym_int] %s (input): %sc                 &   > TR                  U 5      $ rn   r  r  s    rk   r  r    s    (@(@(Crj   z&[deserialize_sym_float] %s (input): %sc                 &   > TR                  U 5      $ rn   )r  r  s    rk   r  r    s    $*D*DQ*Grj   z%[deserialize_sym_bool] %s (input): %sc                 &   > TR                  U 5      $ rn   )r  r  s    rk   r  r    s    )B)B1)Erj   z [deserialize_script_obj_meta] %sc                 &   > TR                  U 5      $ rn   )r  r  s    rk   r  r    s    $*J*J1*Mrj   z
[deserialize graph nodes]z[deserialize input] %s)r  r  r  re  z Deserializing a constant symint z as an input)r   r   r   ro  rc  r  r!  zInvalid input type zFailed deserializing node rO  z[deserialize output] %sr%   r   c              3      #    U  H?  n[        U[        R                  R                  5      (       a  UR                  S    OUv   MA     g7f)r!  N)rv   rw   r  rC   r  )rz   r  s     rk   r|   <GraphModuleDeserializer.deserialize_graph.<locals>.<genexpr>  s8      ,.C $.c588==#A#AsJ.s   AA	rd   T)r  pendingsimplifyunbacked_bindings),r  r  rE  ro   r  rF  rH  rG  rJ  r  rB  r   rp   rR  r  r  sync_fx_nodere  rb   r6  r  r  deserialize_inputr  rD  r  r=  deserialize_noder  rQ  rR  rC  r  r  rI  r  r   r  r  r~  r    _free_unbacked_symbols_with_pathr  r  )r   r  rR  tensor_valuesym_int_valuesym_float_valuesym_bool_valuer-  r   input_	node_nameplaceholder_nodeserialized_noder=  r  rC  r  output_noder   r!  r  s   `                    rk   deserialize_graph)GraphModuleDeserializer.deserialize_graph  s   		)* #3"@"@"F"F"HDII@$U%F ((. #I $4#B#B#H#H#JDII<dR&C ((. $K &6%F%F%L%L%N!DII>V(G ((. &O %5$D$D$J$J$L DII=tT'E ((. %M &6%G%G%M%M%O!DII8/J(M ((. &P 			/0"#3#:#:;IAII.7{{<<"LL--	#'::#9#9)#D  )2%!!)>,<<$$	1 & 4 4I'+zz'='=i'H$ -6)%%iB(:6<<.U   !  !NN66q9==BBOA3i	#'::#9#9)#D /3/E/Ef/M %%e,$':6(%CDDA <F  055O22?3I3IJ%%o>  6 &..FII/8NN488@A / 33w<1$$$ajGGnGjj''033&1&6&6q&9&>&>u&EKU#&+ ,&++A., 'KU# JJ$$Dyy}}U++8%4%U%U"nn 11!& !  2C		-. % 4(()Q...zzS  $00AAWXaXlXlXnWops   4,U
V %U;;V r  r=  c           
         S[         4S jnU[        ;   d2  U[        R                  R                  R
                  R                  :X  a  UR                  (       a  UR                  O"UR                  S   R                  R                  nU R                  UR                  5      nU R                  R                  SX%0 U5      nU R                  X5        GOU[        R                   R"                  R$                  L a  ['        S5      e[)        U[        R*                  R,                  5      (       Ga  U R/                  UR                  5      u  pWU R1                  UR2                  5      n/ UQUR5                  5       Q7 H[  n	[)        U	[        R6                  R8                  5      (       d  M.  U	R:                  S:X  d  M@  U	R<                  R?                  U5        M]     UR                  (       a  UR                  nOn[A        UR                  5      S:X  aS  [C        UR                  S   S5      (       a5  [E        US	S
5      (       a#  UR                  S   RF                  R                  OS nU R                  R                  SX%Xt5      nU RI                  X5        UR<                  R?                  U5        GO[)        U[        R*                  RJ                  /[M        5       Q75      (       a  UR                  (       a  UR                  nO2U" U5      (       a#  UR                  S   RF                  R                  OS nU RO                  X!5      u  pWU R                  R                  SX%Xt5      nU RI                  X5        OD[)        U[P        5      (       a  SU S3S-   S-   S-   OSn
['        U
SU S[S        U5       S3-   5      eUR<                  R?                  U R1                  UR2                  5      5        [T        RW                  SUR                  URX                  URZ                  UR\                  UR<                  R_                  S5      5        U[        R                  R                  R`                  R                  L a  [)        URZ                  S   =n[         5      (       d_  UR<                  S   n[)        U[        Rb                  5      (       a1  U Rd                  Rg                  URh                  Rj                  SU5        OU[        R                  R                  Rl                  R                  L aj  URZ                  S   R<                  S   n[)        U[        Rn                  5      (       a/  U Rd                  Rq                  URh                  Rj                  5        UR:                  S;  a!  SUR<                  ;  a  0 UR<                  S'   g g g )Nr   c                     [        U 5      nUR                  n[        U5      S:H  =(       a'    [        US   R                  [
        R                  5      $ )Nr%   r   )r>  r2  r  rv   r3  rw   r  )r=  r&   r2  s      rk   _is_single_tensor_returnJGraphModuleDeserializer.deserialize_node.<locals>._is_single_tensor_return	  sG    ,V4FnnGw<1$ 
$$e&6&6* rj   r   r  z_deserialize nyi for torch._higher_order_ops.triton_kernel_wrap.triton_kernel_wrapper_functionalr\  r%   r  r  TzWe failed to resolve z to an operator. z]If it's a custom op/custom triton op, this is usually because the custom op is not registeredzU when deserializing. Please import the custom op to register it before deserializing.z+ Otherwise, please file an issue on github.rI  z" Unsupported target type for node z: rm  z)[deserialize_node] %s: %s(%s, {%s}) -> %sr!  )r  r  r  )9r   r  rw   opsr`  itemr-  rR  rC  rp   re  deserialize_sym_op_inputsrB  r  create_nodedeserialize_sym_op_outputsrp  rq  rr  rb   rv   rx   r  deserialize_hoo_inputsdeserialize_metadatar  r{  r  rC   r{   r  ra  r  r\  r]  r  deserialize_outputsry   rA  deserialize_inputsr2  r   r  r  r=  r  rj  r~  _assert_scalarrL   r  guard_or_defer_runtime_assertr   r   sym_constrain_range_for_sizerR   _constrain_range_for_size)r   r  r=  r  rR  r  fx_noderj  r  r  _additional_msgr  r   r/  s                 rk   r  (GraphModuleDeserializer.deserialize_node	  s   	 	 hyy~~""**+ #''  $$$,,Q/55== 
 11/2H2HIDjj,,_fBPTUG++OE&&99ZZ[ !q  

 > >??667M7MNLD001I1IJH.t.fmmo.a//ADDJ4F FFMM(+ /  ##&++ ?223q8 7 7 :KHH1NPTUU $++A.88==   jj,,vG $$_>LL)UZZ**K-H-JK
 
 ##&++ 077 $++A.88==   226KLDjj,,vG $$_> fc** ,F83DEuvmn DD   !66Gr$v,WXYZ 
 	D55o6N6NOP		7LLNNLLNNLLU#	
 UYY^^22:::gll1o5s==xxdEMM22NN@@		G uyy~~BBJJJ,,q/&&u-C#u||,,88G JJ77!5.0GLL*+ 6 8rj   r   c           	      p   [         R                  SU5        UR                  S:X  aQ  [        R                  " [        R
                  R                  U R                  UR                  R                  5      S S9$ UR                  S:X  ar  [        R                  " [        R
                  R                  [        R                  " UR                  R                  R                  S9UR                  R                  S9$ UR                  S:X  a  [        R                  " [        R
                  R                  [        R                  " UR                   R                  R                  S9UR                   R"                  UR                   R$                  S9$ UR                  S:X  ar  [        R                  " [        R
                  R&                  [        R                  " UR(                  R                  R                  S9UR(                  R*                  S9$ UR                  S	:X  a  [        R                  " [        R
                  R,                  [        R.                  " UR0                  R                  R                  UR0                  R                  R2                  S
9UR0                  R4                  S9$ UR                  S:X  a^  [        R                  " [        R
                  R6                  [        R8                  " UR:                  R                  R                  S9S S9$ UR                  S:X  ax  [        R                  " [        R
                  R                  [        R<                  " UR>                  R                  U RA                  UR>                  RB                  5      S9S S9$ [E        SU 35      e)Nz[deserialize_input_spec] %sr  r3  r  r=  r  rj  r  )r3  r  r=  r  r  r  r  r  r  r  zUnknown input spec )#r  r  r   r  r5   r  r  deserialize_argument_specr  r  r  rT   r  rR  r  r  r  r  r  r  r  r  r  r,   r  r  r  r  rV   r  r  r  deserialize_constant_inputrp   r|  )r   r   s     rk   deserialize_input_spec.GraphModuleDeserializer.deserialize_input_spec	  s   		/366\!<<\\,,221<<3C3CD 
 VV{"<<\\++%%1;;??+?+?@{{11 
 VVx<<\\((%%188<<+<+<=xx++88..	  VV((<<\\11%%1+<+<+@+@+E+EF((== 
 VV|#<<\\,,(())..!,,:J:J:T:T ||33  VVw<<\\''$$!''++*:*:; 
 VV''<<\\,,''))..99!:J:J:P:PQ   !#6qc!:;;rj   oc                    [         R                  SU5        UR                  S:X  aQ  [        R                  " [        R
                  R                  U R                  UR                  R                  5      S S9$ UR                  S:X  a^  [        R                  " [        R
                  R                  [        R                  " UR                  R                  R                  S9S S9$ UR                  S:X  ar  [        R                  " [        R
                  R                  [        R                  " UR                  R                  R                  S9UR                  R                   S9$ UR                  S:X  ar  [        R                  " [        R
                  R"                  [        R                  " UR$                  R                  R                  S9UR$                  R&                  S9$ UR                  S:X  ar  [        R                  " [        R
                  R(                  [        R                  " UR*                  R                  R                  S9UR*                  R&                  S9$ UR                  S	:X  ar  [        R                  " [        R
                  R,                  [        R                  " UR.                  R                  R                  S9UR.                  R0                  S9$ UR                  S
:X  ar  [        R                  " [        R
                  R2                  [        R                  " UR4                  R                  R                  S9UR4                  R0                  S9$ UR                  S:X  a^  [        R                  " [        R
                  R6                  [        R8                  " UR:                  R                  R                  S9S S9$ [=        SU 35      e)Nz[deserialize_output_spec] %sr  r  r  rj  r  r  r  r  r  r  zUnknown output spec )r  r  r   r  rE   r  r  r  r  r  r  rT   r  rR  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rV   r  r|  )r   r  s     rk   deserialize_output_spec/GraphModuleDeserializer.deserialize_output_spec	  s   		0!466]"==]]..221==3D3DE 
 VV}$==]]..%%1==+<+<+A+AB 
 VV((==]]22%%1+<+<+@+@+E+EF((44 
 VV++==]]55%%1+?+?+C+C+H+HI++:: 
 VV..==]]88%%1+B+B+F+F+K+KL..== 
 VV//==]]99%%1+C+C+G+G+L+LM//?? 
 VV,,==]]66%%1+@+@+D+D+I+IJ,,<< 
 VVw==]](($$!''++*:*:;  !#7s!;<<rj   r  c           	         [         R                  S5        [        R                  " UR                   Vs/ s H  o R                  U5      PM     snUR                   Vs/ s H  o0R                  U5      PM     snS9$ s  snf s  snf )Nz
[deserialize_signature]r  )r  r  r  rY  r  r  r  r  )r   r  r   r  s       rk   deserialize_signature-GraphModuleDeserializer.deserialize_signature	  sj    		-.&&ADQA44Q7QCFCSCSTCSa66q9CST
 	
QTs   A=B
rt  serialized_state_dictr   r   .r  c           
      x   [         b   eU q  [        R                  S5        [        R                  " SS9U l        [        SSU R
                  S9U l        0 S[        R                  R                  R                  R                  _S[        R                  R                  R                  R                  _S[        R                  R                  R                  R                  _S	[        R                  R                  R                  R                  _S
[        R                  R                  R                  R                   _S[        R                  R                  R                  R"                  _S[        R                  R                  R                  R$                  _S[        R                  R                  R                  R&                  _S[        R                  R                  R                  R(                  _S[        R                  R                  R                  R*                  _S[        R                  R                  R                  R,                  _S[        R                  R                  R                  R.                  _S[        R                  R                  R                  R0                  _S[        R                  R                  R                  R2                  _S[        R                  R                  R                  R4                  _S[        R                  R                  R                  R6                  _S[        R                  R                  R                  R8                  _[        R                  R                  R                  R:                  [        R                  R                  R                  R<                  [        R                  R                  R                  R>                  [        R                  R                  R                  R@                  [        R                  R                  R                  RB                  S.EU l"        0 U l#        [I        U5      U l%        U RM                  URN                  5      U l'        0 U l(        [S        5       U l*        Su  pgS [V        RX                  [V        RZ                  4 5       u  pU(       a  UR]                  5        H  u  pUR^                  n[        R`                  " [c        U[d        * 5      URf                  5      U RP                  U
'   U
Ri                  U5      (       a$  [k        U
[m        U5      S  5      n[o        Xm5      nM  U
Ri                  U	5      (       d  M  [k        U
[m        U	5      S  5      n[o        X}5      nM     [q        US-   5       H"  nU R
                  =Rr                  S-  sl9        M$     [q        US-   5       H"  nU R
                  =Rt                  S-  sl:        M$     Ub   [m        U5      S:  a  [I        U5      U l;        OS U l;        U Ry                  URz                  5        [}        U Rv                  5         U R                  UR                  5      nS S S 5        [        R                  " U R                  U Rz                  5      n0 nUR                  R                  S5      =n(       a  [        R                  " U5      US'   [        US5      (       a;  0 US'   UR                  R]                  5        H  u  nnUR                  US   U'   M     UUlK        [        R                  UU RN                  WU RF                  [I        U5      U RJ                  U Rv                  S9S q $ ! , (       d  f       GN= f! S q f = f)Nz
[deserialize]T)assume_static_by_defaultF)allow_fallback_kernelsallow_non_fake_inputsr  FloorDivModularIndexingWhere	PythonModModCleanDiv	CeilToInt
FloorToIntCeilDivLShiftRShiftPowByNaturalFloatPowFloatTrueDiv
IntTrueDiv!IsNonOverlappingAndDenseIndicatorTruncToFloat)
TruncToInt
RoundToIntRoundDecimalToFloatIdentity)r(  c              3   4   #    U  H  n[         U   v   M     g 7frn   )r   )rz   r   s     rk   r|   6GraphModuleDeserializer.deserialize.<locals>.<genexpr>D
  s      @'O!
1'Os   r%   r   r  r  )rK  r6  r  r~  r   r   r   )Nr   r  r  r   ShapeEnvr  r   r  rw   utils_sympy	functionsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r  r  r   r   r  r6  r  r   r  r   r  r  ro   r6  r    r.  r   r7  r  r   r  maxrangeunbacked_symfloat_counterunbacked_symint_counterr   r  r  r   deserialize_module_call_graphr  r  _create_graph_module_for_exportr  r  r~  r   r  r\  r  r  r  r_   r  )r   rt  r  r   r   r  count_unbacked_symfloatcount_unbacked_symintunbacked_symfloat_prefixunbacked_symint_prefixrq   r  r6  r   r  r  rK  r  r  type_fieldss                        rk   deserialize#GraphModuleDeserializer.deserialize
  s"    %,,, $h	)II'(,55tTDN$2',&*..%D!
$
 EKK..88AA$ "5;;#5#5#?#?#O#O$ ++55;;$ U[[//99CC$ u{{))3377$ EKK..88AA$ U[[//99CC$ ekk00::EE$ 5;;--77??$ %++,,66==$ %++,,66==$   2 2 < < I I!$" EKK..88AA#$$  2 2 < < I I%$& ekk00::EE'$( 4U[[5G5G5Q5Q5s5s)$*  2 2 < < I I+$, $kk00::EE#kk00::EE % 2 2 < < I I ;;--77??!KK..88AA5$D 8 CED&7	BDN!77'11DN )+D% %(ED!=C:#@(,(;(;T=N=N'O@<$ $1779EAHHE3B3N3N)%&92884D--a0 ||$<==#&>"?"A BC256M2Q/&<==#&<"="? @A034I0M- : 2Q6788A=8 8014566!;6 6 )c..AA.E&@&P#&*#""#:#@#@A78K8KL$($F$F+==%! M ==dkk4::VLD099==hGGvG!%F!3X.0LMM5712 -GGMMO@F@R@RD56u= P $L*11).."3!%!;!;56KL..#22 2  %)!5 ML4 %)!s,   U?^5 C(^5 8^#D^5 #
^2-^5 5^9rR  r  c                     XR                   ;   a  [        SU S35      eXl        X R                   U'   SUR                  ;  d   eU R                  U   UR                  S'   g )NzNode z& has already been deserialized before.r!  )r  rb   rR  r  r  )r   rR  r  s      rk   r  $GraphModuleDeserializer.sync_fx_node}
  sa    /// 5.T!UVV-4$$T*GLL((("::4@Urj   c                 .   ^  [        U 4S jU 5       5      $ )Nc              3   Z   >#    U  H   nTR                  UR                  5      v   M"     g 7frn   )r  r  )rz   inputr   s     rk   r|   DGraphModuleDeserializer.deserialize_sym_op_inputs.<locals>.<genexpr>
  s#     KF5T++EII66Fs   (+)r   )r   rB  s   ` rk   r  1GraphModuleDeserializer.deserialize_sym_op_inputs
  s    KFKKKrj   c                    [        U5      R                  nUR                   Vs0 s H  oDR                  UR                  _M     nnUR                   Vs0 s H)  nUR                  U R                  UR                  5      _M+     nn/ n[        5       nU GH  n	U	R                  U;   a  XiR                     n
XYR                     nU[        R                  :X  a  UR                  U
5        MW  U[        R                  :X  a5  [        R                  " U	R                  5      (       d  XU	R                  '   M  U	R                  5       (       + =(       a    U	R                  (       + nU(       a  UR                  XiR                     5        M  [        R                  " U	R                  5      (       at  U	R                  (       a   e[!        U5      S:  a2  [        5       nUR#                  [%        UR'                  5       5      5        UR                  XiR                     5        GM  U	R                  U;   d  GM  XiR                     XR                  '   GM     [)        U5      U4$ s  snf s  snf Nr   )r>  r4  rB  rR  r3  r  r  r   r(   r9  r  rB  keyword	iskeywordhas_default_valuerC  r  rJ  rK  r{  r   )r   r=  r  schema_argsrA  argument_kindsactual_argsr  rj  rF  r  r3  is_positionals                rk   r  *GraphModuleDeserializer.deserialize_inputs
  s   -f5??>M>T>TU>TU**ejj0>TU )//
/ JJ..uyy99/ 	 
 (3%J+-!//2%oo6<222KK$\111':K:KOO; ; /2:??+ 0022P:;P;P7P  K89"":??33%0000v;?(]FKKV]]_ 56K89??k1.9//.JF??+7 &8 T{F""G V
s    I0I$rB  c                     / n0 nU Hf  nUR                   S:w  a)  U R                  UR                  5      X4R                   '   M<  UR                  U R                  UR                  5      5        Mh     [	        U5      U4$ )z?
For deserializing HOO inputs since HOOs do not have a schema.
rI  )rR  r  r  r  r   )r   rB  r  rj  r  s        rk   r  .GraphModuleDeserializer.deserialize_hoo_inputs
  sk     F{{b &*&<&<VZZ&H{{#D226::>?	 
 dV$$rj   inpc                   ^ ^ TR                   nTR                  nUS:X  a  g US:X  a#  T R                  TR                  R                     $ US:X  a  [
        TR                     $ US:X  a  [        TR                     $ US:X  a  [        TR                     $ US:X  a  [        U[        5      (       d   eT R                  5          T R                  UR                  5        [         R"                  " T R$                  T R                  5      nS S S 5        T R$                  R'                  UR                  W5        T R                  R)                  SUR                  UR                  S9$ US	:X  a  [+        TR,                  5      $ US
:X  a  TR.                  $ US:X  a  TR0                  $ US:X  a  TR2                  $ US:X  a  TR4                  $ US:X  a4  [7        TR8                  R:                  TR8                  R<                  5      $ US:X  a  T R?                  TR@                  5      $ US:X  a  T R?                  TRB                  5      $ US:X  a  T R?                  TRD                  5      $ [        U[F        5      (       aI  US:X  a5  URI                  5        VVs0 s H  u  pVUT RK                  U5      _M     snn$ [M        SU 35      e[        U[N        5      (       a  [Q        U5      S:X  a  / $ US:X  a+  U Vs/ s H  nT R                  UR                     PM     nnU$ US;   a  [O        U5      $ US:X  a  U V	s/ s H  n	[S        U	5      PM     sn	$ US;   a"  U Vs/ s H  nT R?                  U5      PM     sn$ US:X  a  UU 4S jn
[O        [U        X5      5      $ [M        ST 35      eUS:X  aj  TRV                  R                  T R                  ;   a#  T R                  TRV                  R                     $ T RX                  TRV                  R                     $ US:X  a  T R[                  TR\                  5      $ [M        ST 35      e! , (       d  f       GNB= fs  snnf s  snf s  sn	f s  snf )Nro  r  r  r  r  r]  r\  rj  r  r   r   r   rc  rm  r  rg  ri  rp  zUnknown dict type: r   r  )rr  rs  rq  rt  r  )r  r  r  r  c                    > U R                   S:X  a  g U R                   S:X  a#  TR                  U R                  R                     $ [	        ST 35      e)Nro  r  Unhandled argument )r   r  rp   rR  rb   )rK  rP  r   s    rk    deserialize_optional_tensor_argsSGraphModuleDeserializer.deserialize_input.<locals>.deserialize_optional_tensor_args
  sJ    vv*#;.#;;AGGLLII,/B3%-HIIrj   rS  r  r  )/rp   r   r  r  rR  r   r  !_SERIALIZE_TO_TORCH_MEMORY_FORMATr  _SERIALIZE_TO_TORCH_LAYOUTr  rv   r2   r  r  r  r  r4  r  register_moduler  r   r  r   r   r   rc  r  rm  rk  rl  deserialize_sym_argumentr  rg  ri  r  ro   r  rb   rK  r  r   r   r  r   r  r  )r   rP  rp   typ_	submodulerq   rr   r  resultdimsrT  s   ``         rk   r  )GraphModuleDeserializer.deserialize_input
  s   		xx9 [ //0B0BCC%%,S-?-?@@''4S5I5IJJ[ -cmm<<Ze]3333'')&&u{{3>>t{{DJJW	 * KK''

I>::))

ZZ *  
 [ %cmm44X::Z<<Y;;[ == \!3>>..0C0CDD\!00@@^#001A1ABB]"00AAt$$..AFO411!44OO$':4&%ABBt$$5zQ	%LQRES$66sxx@ERKKE{"'056d66IIFKLes55c:eLL..J C @HII$':3%%@AA_$  %%)E)EE33C4E4E4J4JKK>>#"3"3"8"899]",,S__== #6se!<==I *)< P S 7Ls%   AQQ5#Q7Q"Q'
Qc                 j   UR                   S:X  a  [        UR                  5      $ UR                   S:X  a  [        UR                  5      $ UR                   S:X  a  [        UR                  5      $ UR                   S:X  a  [        UR                  5      $ UR                   S:X  a  g [        SU S35      e)Nr   r   rc  r   ro  zUnhandled constant argument z to deserialize)
r   r   r   r   r   r2  rc  r   r   rb   )r   rP  s     rk   r  2GraphModuleDeserializer.deserialize_constant_input  s    88xszz?"XX#&&XX$s}}%%XX"$$XX" #?uO!TUUrj   c                 >   [        U[        5      (       aF  UR                  S:X  a  UR                  $ UR                  S:X  a  U R                  UR
                     $ O[        U[        5      (       aF  UR                  S:X  a  UR                  $ UR                  S:X  a  U R                  UR
                     $ OZ[        U[        5      (       aE  UR                  S:X  a  UR                  $ UR                  S:X  a  U R                  UR
                     $ [        SU 35      e)Nr   re  r   r   z Unknown symbolic argument type: )rv   rS   r   r   r  re  rQ   r   rM   r   rb   )r   sym_args     rk   rY  0GraphModuleDeserializer.deserialize_sym_argument"  s    g~..||x'~~%*33GOODD +!122||z)'''*33GOODD +11||y(&*33GOODD?yIJJrj   c                 j    U R                  UR                  S   R                  R                  U5        g rE  )r  rC  rp   re  )r   r  r  s      rk   r  2GraphModuleDeserializer.deserialize_sym_op_outputs4  s)    /11!4::BBGLrj   c                   ^  [        UR                  5      S:X  a  g [        UR                  5      S:X  aM  SUR                  ;   a=  [        USS5      (       d+  UR                  S   R                  S:w  a  U 4S jnU" X5      $ [        UR                  5      S:X  aQ  UR                  S   R                  S:X  a4  T R                  UR                  S   R                  R                  U5        g [        UR                  5      S:X  ak  [        UR                  S   R                  [        [        [        45      (       a4  T R                  UR                  S   R                  R                  U5        g [        UR                  5      S:X  ad  UR                  S   R                  S:X  aG  S UR                  S	'   UR                  T R                   R#                  UR                  5       S
35        g T R%                  X5        g )Nr   r%   ztorch.ops.higher_orderr  Tro  c                   > / nS nU R                   S   R                  S:X  a  U R                   S   R                  nOP[        U R                   S   R                  [
        [        [        45      (       a  U R                   S   R                  nTR                  U R                  5      nUc   eTR                  X!USU5        [        U5      UR                  S'   UTR                  UR                  '   g )Nr   r  r!  )rC  r   r  rv   rp   rS   rM   rQ   r  r  generate_getitemr   r  r  rR  )r  r  r  r  deserialized_metadatar   s        rk   #_deserialize_hop_with_single_returnXGraphModuleDeserializer.deserialize_outputs.<locals>._deserialize_hop_with_single_returnC  s    &("**1-22kA)11!4>>C#++A.44#_6FG  *11!4::C(,(A(A#,,)% &%%haAVW&+HoU#=D,,W\\:rj   r  r!  _unused)r  rC  r=  r]  r   r  r  rR  rv   rp   rS   rM   rQ   re  r  _renamer  _target_to_strdeserialize_multiple_outputs)r   r  r  rj  s   `   rk   r  +GraphModuleDeserializer.deserialize_outputs7  s   &&'1, ''(A-(O,B,BBO-JDQQ''*//9<( 7PP ''(A-''*//;>o55a8BBGGQ(()Q.:##A&,,_.>?4
 4
 o55a8>>FFP''(A-''*//9< #'GLLOOtzz88HIQR))/Crj   r  r  ri  c                    [        U[        5      (       a  UR                  nO[[        U[        5      (       a  UR                  nO9[        U[
        5      (       a  UR                  nO[        S[        U5       35      eU R                  R                  S[        R                  X$4US9nU R                  Xg5        UR                  U R                  U   5        UR                  R!                  U5        g )Nz+generate_getitem got unknown argument type r  rj  )rv   rT   rR  rS   re  rQ   r|  r   r  r  r  r  r  r  r  r  ra  )r   r  r  r  r  ri  rR  individual_outputs           rk   rh  (GraphModuleDeserializer.generate_getitemp  s     c>**88D^,,;;D-..;;D =d3i[I  !JJ22N	 3 
 	$244T:; 	%%&;<rj   c                 h   [        U5       GH  u  pV[        U[        [        [        45      (       a  U R                  XXeU5        M;  [        U[        5      (       d   eUR                  S;   a  U R                  XUR                  XT5        M  UR                  S;   a  U R                  R                  S[        R                  X%45      nUR                  / 5        U R                  US   XvR                  U5        UR                  R!                  U5        US   UR                  S'   GM  UR                  S:X  ai  U R                  R                  S[        R                  X%4SS9nUR                  S 5        S UR                  S'   UR                  R!                  U5        GM  [#        SU 35      e   g )	N)r  r  rg  )r  r  r  rr  rs  rt  rq  r  r  r(  r!  ro  rj  z Unimplemented node output type: )r  rv   rT   rS   rQ   rh  r'   r   rp   r  r  r  r  r  generate_getitemsr  ra  NotImplementedError)	r   r  r  r  ri  r  r  list_outputrr  s	            rk   ru  )GraphModuleDeserializer.generate_getitems  s    "$HC#@PQRR%%s1F c8,,,,xxFF%%syy#  	 	 #jj44#$$N
 #&&RL+yy:O   ''(=>*22,  'Y&$(JJ$:$:#$$N"	 %; %! %04!&&u-!&&--.CD),LSE*RSSY (rj   c                     U R                  UR                  5      n/ n[        UR                  5      S:X  a  [	        UR                  S   R
                  [        5      (       d   e[	        UR                  S   R
                  S   [        5      (       d   eU R                  UUUR                  S   R                  U5        OU R                  XBUR                  U5        [        U5      UR                  S'   X R                  UR                  '   g )Nr%   r   r!  )r  r  r  rC  rv   rp   rK  rT   ru  r  r   r  r  rR  )r   r  r  ri  r  s        rk   ro  4GraphModuleDeserializer.deserialize_multiple_outputs  s     !% 9 9/:R:R S !&&'1,o55a8>>EEEEo55a8>>qA>RRRR""''*55%	 ""?#:#:<Q
 $HoU5<$$W\\2rj   r  c                   ^ ^^ 0 nUR                  S5      =n(       a  X2S'   S[        4U 4S jjnUR                  S5      =n(       a3  S mS m[        UU4S jUR                  [        5       5       5      nXbS'   UR                  S5      =n(       aM  / nUR                  [        5       H.  n	U	R                  S	5      u  pUR                  X" U5      45        M0     XS'   UR                  S
5      =n(       a!  [        UR                  [        5      5      US
'   UR                  S5      =n(       a  [        R                  " U5      US'   UR                  S5      =n(       a(  T R                  [        R                  " U5      5      US'   U$ )Nr  r  c                 Z  > S nU R                  S5      (       a%  [        R                  nU R                  S5      SS  nOBU R                  S5      (       a  [        nU R                  S5      SS  nOTR	                  U 5      $ UnU H"  n[        X45      (       d  U s  $ [        X45      nM$     U$ )Nztorch.nnrm  r#   rw   r%   )r  rw   r   r  r  r\  r]  )r  r  r  r=  rR  r   s        rk   deserialize_meta_funcKGraphModuleDeserializer.deserialize_metadata.<locals>.deserialize_meta_func  s    F ++J77*;*A*A#*Fqr*J'"--g66*;*A*A#*Fqr*J'001BCCF/v,,,,$V2F	 0
 Mrj   r  c                     XU44$ rn   rd   )r  r  r  s      rk   import_nn_module_stackLGraphModuleDeserializer.deserialize_metadata.<locals>.import_nn_module_stack  s    2J&rj   c                 
   / nSu  p#Su  pE[        U 5       HE  u  pgXt;   a  US-  nM  Xu;   a  US-  nM  US:X  d  M%  US:X  d  M-  UR                  XU 5        US-   nMG     UR                  XS  5        [        U5      S:X  d   eU$ )N)r   r   )z[(z)]r%   r  r      )r  r  r  )r  r   startrv  rK  rU  endcs           rk   metadata_splitDGraphModuleDeserializer.deserialize_metadata.<locals>.metadata_split  s    !'1FCvQQca1f

8##67 #a 2 

8F+,3x1}$}
rj   c              3   :   >#    U  H  nT" T" U5      6 v   M     g 7frn   rd   )rz   r  r  r  s     rk   r|   ?GraphModuleDeserializer.deserialize_metadata.<locals>.<genexpr>  s"      #CD 't(<=Cs   r  r  r  r  r  )
r~  r2  r  r  r   r  r   r   r  _deserialize_from_node)r   r  r#  r  r}  nn_module_stack_strr  source_fn_st_strr%  source_fn_strrR  
target_strtorch_fn_str
custom_strfrom_node_strr  r  s   `              @@rk   r  ,GraphModuleDeserializer.deserialize_metadata  ss    ",,}55;5!,	S 	& #+,,/@"AAA'  # #/55lC# O &5!"'||,=>>>L!1!7!7!E#0#6#6s#; ##T+@+L$MN "F &2!"#<<
33<3#L$6$6|$DEC
O!h//:/ JJz2CM$LL55=5#::4::m;TUC
rj   from_node_datac                     Uc  g[        U[        5      (       d   eU Vs/ s H   n[        R                  " U5      =nc  M  UPM"     sn$ s  snf )z0
Deserialize from_node metadata from JSON data.
N)rv   rK  r   
_from_dict)r   r  fn_dictr+  s       rk   r  .GraphModuleDeserializer._deserialize_from_node(  sZ     !.$//// *
))44W== )
 	
 
s   A
A
r  c                 V   [         R                  SU5        UR                  S:X  a(  [        R                  " UR
                  R                  S9$ UR                  S:X  a(  [        R                  " UR                  R                  S9$ UR                  S:X  a(  [        R                  " UR                  R                  S9$ UR                  S:X  a8  [        R                  " UR                  R                  U R                  U5      S9$ [        R                  " SU R                  U5      S9$ )	Nz[deserialize_argument_spec] %sr  rj  r  rg  r  r  rI  )r  r  r   r  rT   r  rR  rS   r  re  rQ   rg  r  r  r  r
  s     rk   r  1GraphModuleDeserializer.deserialize_argument_spec9  s    		2A666[ $$!++*:*:;;VV|#$$!,,*>*>??VV~%&&ANN,B,BCCVV&&&__))1G1G1J  &&Bd6L6LQ6OPPrj   r  c           	      d   [         R                  " UR                   Vs/ s H  o R                  U5      PM     snUR                   Vs/ s H  o R                  U5      PM     sn[        UR                  5      [        UR                  5      UR                  =n(       a  US9$ S S9$ s  snf s  snf )Nr!  )	r  r@   rB  r  rC  r   r"  r#  r$  r%  s       rk   !deserialize_module_call_signature9GraphModuleDeserializer.deserialize_module_call_signatureH  s     %%;P;W;W;Wa..q1;W <Q;X;X;Xa..q1;X ##8#@#@A#$9$B$BC.@@@@ $
 	
 
 	
s   B(	B-
r  c           	          [         R                  S5        U Vs/ s HN  n[        R                  " UR                  UR
                  (       a  U R                  UR
                  5      OS S9PMP     sn$ s  snf )Nz 
[deserialize_module_call_graph]r*  )r  r  r  r?   r+  r6  r  r,  s      rk   r3  5GraphModuleDeserializer.deserialize_module_call_graphY  sn     			56 +

 + II  ::5??K +

 
	
 

s   AA2)r   r   r  r  r  r  r  r  r6  r  r  r  r  )r   Nrn   )NN)Wre   rf   rg   rh   dataclassesr
   r  r   r	   r   r  r2  r  r  r   r   r   r   r   r   r  r  rR   rw   r  rP   r  rL   r  rU   r   r  r,   r  r  r  rC   r  r1   r  r   r  r5   r  rE   r  r4   rY  r  r3   r  r  r   r   r   r   r    r;  r  r  r  rK  rA   r  r'   r  r+   r  rY  r  r  rT   rS   rQ   rh  ru  ro  r  r   r  rZ  r  r@   r  r?   r3  ri   rd   rj   rk   r_   r_     s   R R R( 8D>  0- -c 4 HL/-/-#+E#tU2B,C#D/-	/-bV c5<<6G0H &x E%:O4P g %emm8K2L  
 
0
			
P(5PSAS;T2U P(u% uEHHNN unB1 B1h B14 B1H3<	 3<bll 3<j3= 3= 3=j
 
B<S<S 
 QUu)!,u)  %T#u||*;%<e%CDu) c3h./	u)
 !%ellC/0$sCx.@A5HI
u) 'tC1L1L,L'MNu) 
u)nA Auxx}} AL%#$ %#N%T--@ %U>X U># U>nVm V VK$M$ M M7D4 7D%((-- 7Dr= = >>3CCD	=
 =  $CH~=<3T 3T
  $CH~3Tj=#=.3hhmm=	=<ET#s(^ ES#X EN
&tDcN';<
	$z"	#
"Q8 Q Q
%8
			
"
!%o!6
	b  	!
rj   c                   x   \ rS rSrSS\\\\4      4S jjrS\\\	R                  4   S\\\R                  4   S\\R                  \
4   4S jr SS	S
.S\S\\\\R"                  4   \4   S\\\\R"                  4   \4   S\\\\\R"                  S4   \\\4   4   \4      S\R                  4
S jjjrSrg)r`   ij  Nexpected_opset_versionc                     0 U l         U(       a  U R                   R                  U5        SU R                   ;  a,  [        R                  R	                  5       U R                   S'   g g r_  )r  ra  rw   r  rb  )r   r  s     rk   r   $ExportedProgramDeserializer.__init__l  sR    68#!''../EF44427((2T2T2VD''/ 5rj   r  r  r   c                     [         R                  S5        0 nUR                  5        HO  u  pEUR                  U5      =n(       a  [         R                  SXE5        XSU'   M9  [         R	                  SU5        MQ     U$ )Nz 
[deserialize_range_constraints]z([deserialize_range_constraints] %s -> %sz;Symbol %s did not appear in the graph that was deserialized)r  r  ro   r~  r  )r   r  r  r4  rq   rr   symbols          rk   deserialize_range_constraints9ExportedProgramDeserializer.deserialize_range_constraintss  ss    
 			56(..0DA.22155v5		DaK,-&)QST 1 ! rj   F_unsafe_skip_version_checkr   r   r   r   .c                   [        U[        5      (       d   eUR                  nUR                  [        S   :w  aG  UR                  S:X  a  UR
                  S:X  d'  U(       d   [        SUR                   S[         S35      eUR                  R                  5        VVs0 s HN  u  pxU[        R                  " [        UR                  [        * 5      [        UR                  [        5      5      _MP     n	nn[        5       R!                  UR"                  UUUU	5      n
U R%                  U	U
R&                  5      n[(        R                  " U
R"                  U
R"                  R*                  U
R,                  U
R.                  UU
R0                  U
R2                  U
R4                  UR6                   Vs/ s H  n[9        U5      PM     snS9	nUR:                  Ul        [>        RA                  SU5        U$ s  snnf s  snf )Nr   zSerialized schema version z+ does not match our current schema version rm  )	rootr  r  r   r4  r  r   r   ri  z
[deserialize]: %s)!rv   r.   rh  re  rJ   rf  rb   r4  ro   r   r    r.  min_valr   max_valr_   r;  rK  r  r~  r  r  r6  r   r  r   r   ri  r   rk  rq  r  r  )r   r   r   r   r   r  versionrq   rr   r  resr4  r\  s                rk   r;  'ExportedProgramDeserializer.deserialize  s    *O<<<<"11 ==N1--MMQ7==A#5-$01A1P1P0Q RAAO@PPQS  )::@@B 

 C	 **!!))fW5!!))V4  C 	  
 &'33)) 
 !>>   

 ##!!""((MM~~/!33--mm1A1K1KL1KA}Q'1KL

 /::		'0A 
8 Ms   AG30G9)r  rn   )re   rf   rg   rh   r   r  r2  r   r   r   r    r   r   r  r.   r   rw   r  r   r   r   r  r;  ri   rd   rj   rk   r`   r`   j  s   WxS#X/G W!"3(C(C#CD!  $C$56! 
ellK'	(	!0 8 $)8)8 $sELL015898 c5<</0%78	8
 !%ellC/0$sCx.@A5HI
8 
		8 8rj   r`   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   i  c                    > [        U[        5      (       a  UR                  $ [        U[        5      (       a%  [        R
                  " U5      R                  S5      $ [        TU ]!  U5      $ Nr   )	rv   r   rp   r   base64	b64encoder  superr-  )r   rD  	__class__s     rk   r-  EnumEncoder.default  sR    c4  99c5!!##C(//88ws##rj   rd   )re   rf   rg   rh   r-  ri   __classcell__)r  s   @rk   r   r     s    $ $rj   r   c           
      X   [        U [        5      (       a!  U R                  [        U R                  5      0$ [
        R                  " U 5      (       aN  [
        R                  " U 5       Vs0 s H,  nUR                  [        [        XR                  5      5      _M.     sn$ [        U [        5      (       a  U  Vs/ s H  n[        U5      PM     sn$ [        U [        5      (       a  [        S U  5       5      $ [        U [        5      (       a/  U R                  5        VVs0 s H  u  p4U[        U5      _M     snn$ [        U [        5      (       aI  U [        R                   :X  a  gU [        R                   * :X  a  g[        R"                  " U 5      (       a  gU $ U $ s  snf s  snf s  snnf )Nc              3   8   #    U  H  n[        U5      v   M     g 7frn   )r   r  s     rk   r|   %_dataclass_to_dict.<locals>.<genexpr>  s     8Cq'**Cr   Infinityz	-InfinityNaN)rv   r[   r   r   rp   r  is_dataclassr:  rR  r]  rK  r   r  ro   r   r(  r,  isnan)rD  fr  rq   rr   s        rk   r   r     sQ   #v,SYY788		!	!#	&	& !'',
, FF&wsFF';<<,
 	
 
C		/23s!"1%s33	C		8C888	C		58YY[A[TQ%a(([AA	C		$((?TXXIZZ__J
)

 4 Bs   *3F9F! F&rD  c                 f    [         R                  " [        U 5      [        SS9R	                  S5      $ )NF)r   	allow_nanr   )r   r   r   r   r   )rD  s    rk   _to_json_bytesr    s+    ::(-;%PWW rj   r   r]  c                 \   [        U R                  5         [        X5      R                  U 5      nS S S 5        [	        WR
                  [        5      (       d   e[        UR
                  5      n[        UUR                  UR                  UR                  5      nU$ ! , (       d  f       Nr= frn   )r   r   r^   r\   rv   r   r.   r  r   r   r   )r   r]  r	  serialized_program
json_bytesr  s         rk   r\   r\     s    
 
00@0O0O	P6

)$
% 	 
Q (99?KKKK 2 C CDJ!%%$$))	H O 
Q	Ps   B
B+c                     [        U [        5      (       a  [        [        U S 5      nUb  U$ [        U [        R
                  5      (       a  [        U R                  5      $ U $ rn   )rv   r2  r]  r&   typing
ForwardRef_resolve_schema_cls__forward_arg__)r   resolveds     rk   r  r    sQ    #s63-O#v(())"3#6#677Jrj   c           	      p   [        U 5      n [        U [        5      (       a   SU  S35       e[        R                  " U 5      [
        L a  [        U R                  U5      $ [        R                  " U 5      [        R                  :X  a]  [        S 5      [        R                  " U 5      ;   a:  Uc  g [        R                  " U 5      n[        U5      S:X  d   e[        US   U5      $ [        U [        5      (       a  [        U [        5      (       a  [        U[        5      (       d   e[        U5      S:X  d   e[        [!        UR#                  5       5      5      n[        [!        UR%                  5       5      5      n[        U[        5      (       d   e[        R&                  " U [)        [*        5      S9nXS   nU R,                  " S0 U[        Xd5      0D6$ [.        R0                  " U 5      (       ap  0 n[        R&                  " U [)        [*        5      S9n[.        R2                  " U 5       H*  nUR4                  n	X;  a  M  [        XY   X   5      n
XU	'   M,     U " S0 UD6$ [        U[6        5      (       aF  [        U5      S:X  a  U$ [        R                  " U 5      S   nU Vs/ s H  n[        X5      PM     sn$ [        U[        5      (       aH  [        R                  " U 5      S   nUR9                  5        VVs0 s H  u  pU[        X5      _M     snn$ U [:        L a  [;        U5      $ U$ s  snf s  snnf )NzUnresolved class type: 'z'.r#   r   r%   )globalnsrd   )r  rv   r2  r  
get_originr   r  
__origin__r   r   get_argsr  
issubclassr[   r  ry  rz  rx  r{  get_type_hintsvarsr&   r   r  r  r:  rR  rK  ro   r   )r   dataty_argsr  _value
type_hints
field_typer:  r  rR  new_field_objd_typerl   v_typerq   rr   s                   rk   r  r    s   
c
"C#s##G'?uB%GG#*!#..$77-$t*PS@T2T<//#&7|q   !'!*d33	C		:c6#:#:$%%%%4yA~~T$))+&'d4;;=)*%%%%%**3fF
&
zzLU$6z$JKLL		!	!#	&	&**3fF
 ##C(A66D.z/?LM(4L ) }V}	D$		t9>K%a(7;<t!"6-t<<	D$		%a(=AZZ\J\TQ%f00\JJ	T{K = Ks   "L-;L2r   artifact_bytesc                 j    UR                  S5      n[        R                  " U5      n[        X5      nU$ r  )r  r   r  r  )r   r  artifact_strartifact_dictartifact_dataclasss        rk   _bytes_to_dataclassr  6  s1    !((1LJJ|,M+C?rj   Fr  r  c                    [        U R                  [        5      (       d   e[        [        U R                  5      n[        U5      R                  UU R                  U R                  U R                  US9$ )Nr  )
rv   r   r   r  r.   r`   r;  r   r   r   )r  r  r  serialized_exported_programs       rk   r;  r;  =  su     h//7777"522# ''=>JJ##= K  rj   c                 6  ^ ^^^^^ S[         4S jmU4S jmUUU 4S jnU" TR                  5      n[        U5      [        TR                  5      :X  d   e0 mUU4S jnU4S jnT  H  nT" Xh5        M     U H  n	U	R                   H  n
T" Xj5        M     M      U H(  n	U	R                   H  nT" XxR
                  5        M     M*     U H  n
T" Xz5        M     U H  n	U	R                  R                  5         M     [        [        TR                  R                  5       [        R                  " S5      S95      n[        [        TR                  R                  5       [        R                  " S5      S95      n[        [        TR                  R                  5       [        R                  " S5      S95      n[        [        TR                   R                  5       [        R                  " S5      S95      n[        [        TR"                  R                  5       [        R                  " S5      S95      nSnU H  nUR                   H  nUR
                  nUR$                  S	:X  d  M!  ['        UR(                  R*                  R                  UR(                  R*                  R                  UR(                  R*                  T5      u  UR(                  l        nS
U 3UR(                  l        US-  nM     M     [/        T UUUUUUTR0                  US9	mTT4$ )NrK  c                    U R                   S:X  a  g U R                   S:X  a  U R                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S	:X  a  g U R                   S
:X  a  g U R                   S:X  a  U R                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  U R
                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  U R                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  g U R                   S:X  a  U R                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g [        SU  35      e)Nro  r  r  r   rr  r   rs  rc  rt  rm  r  r  rg  r  r  r  r  r  r   rq  ri  r  r]  r  r  r  r  rp  z+Unknown input type to the ExportedProgram: )r   r  r  r  r  rg  r  ri  r  r  r  r|  r  s    rk   _get_argument*_canonicalize_graph.<locals>._get_argumentS  s   66YVV{";;VV|#<<VVxVVy VVz!VV{"VV{"VV|#VV|#VV|#<<VV}$== VV~%>>!VV&??"VV''VV))VV{"VV{"VVy VVz!VV}$== VV~%>>!VVz!VV,,(((VV&??"VV}$VV~%VV.. #Nqc!RSSrj   c                 n   > [        U[        5      (       d   e[        R                  " U T" U5      5        g rn   )rv   r'   r  tree_map)r  rK  r  s     rk   for_args%_canonicalize_graph.<locals>.for_args  s)    !X&&&&=+,rj   c                 p  >^ ^^^^^^^^ [          " S S5      5       n[        5       m0 m0 m/ m0 m/ nS[        [           4S jmT H  nUU4S jnT" XC5        M     [	        T 5       H5  u  mnUUU4S jnUR
                   H  nT" Xg5        M     U" / S5      TT'   M7     [	        T 5       H6  u  mnUUUUUU4S jn	UR                   H  nT" XR                  5        M     M8     UU4S	 jn
UUU4S
 jmT H  nT" X5        M     S[        4UUUU 4S jjnTR                  5        H   u  mnUR                  S:X  d  M  U" T5        M"     [        T5      S:  a  [        R                  " T5      u    nmT T   nUR
                   H  nT" X5        M     UR                  U5        TT;   d   eTT   R                   HI  nTU   nUR                  S:  d   eU=R                  S-  sl
        UR                  S:X  d  MA  U" U5        MK     TT   R                  R!                  5         [        T5      S:  a  M  U$ )Nc                   0    \ rS rSr% \\   \S'   \\S'   Srg)6_canonicalize_graph.<locals>.sort_nodes.<locals>.Edgesi  outsinsrd   N)re   rf   rg   rh   rK  r   r   ri   rd   rj   rk   Edgesr    s    s)OHrj   r  r   c                    U c  g [        U [        5      (       a  U R                  $ [        U [        [        [
        45      (       a;  U R                  S:X  a  U R                  $ U R                  S;   a  g [        SU  35      e[        U [        5      (       aE  U R                  S:X  a  U R                  R                  $ U R                  S:X  a  g [        SU  35      e[        U [        5      (       a  U R                  $ [        SU  35      e)Nre  )r   r   r   Unknown argument type: r  ro  zUnknown optional tensor type: )rv   rT   rR  rS   rM   rQ   r   re  r|  rD   r  r,   r  s    rk   r  9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_name  s    y!^,,vvAAQRSS66Y&99$VV@@(+B1#)FGGA56666[(;;+++VVy((+I!)MNNA011vv$'>qc%BCCrj   c                 H   > T" U 5      =n(       a  TR                  U5        g g rn   )r   )rK  r   r  graph_inputss     rk   	add_input:_canonicalize_graph.<locals>.sort_nodes.<locals>.add_input  s%     #1# $$Q' $rj   c                 @   > T" U 5      =n(       a  UT;  d   eTTU'   g g rn   rd   )rK  r   	def_tabler  r  s     rk   add_def8_canonicalize_graph.<locals>.sort_nodes.<locals>.add_def  s.     #1#I---#&IaL $rj   r   c                    > T" U 5      =n(       aR  UT;   a  g UT;  a	  UT;   d   eg TU   nTU   R                   R                  T5        TT   =R                  S-  sl        g g )Nr%   )r  r  r  )	rK  r   srcr   r  edgesr  r  r  s	      rk   add_edge9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_edge  sk     #1#I~	) L000#A,C#JOO**3/#JNNa'N $rj   c                 R   > T" U 5      =n(       a  UT;  d   e[        T5      TU'   g g rn   )r  )rK  r   r  ranks     rk   add_rank9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_rank  s0    QKq}$}d)Q  rj   c                 :   > T" U 5      nU(       a  UT;  a  TU   $ g)Nr(  rd   )rK  r   r   r  r  s     rk   get_rank9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_rank  s"    AQi'Awrj   r  c                    > UU4S jnTU    nUR                    Vs/ s H   o3R                  U" UR                  5      4PM"     nn[        R                  " TUR
                  X@45        g s  snf )Nc                 *   >^ / mT" UU4S jU 5        T$ )Nc                 2   > TR                  T" U 5      5      $ rn   )r  )r  r
  rankss    rk   r  c_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks.<locals>.<lambda>  s    5<<#<rj   rd   )r   r  r  r
  s    @rk   	get_ranksQ_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks  s    <a@rj   )rB  rR  r  heapqheappushr=  )	r  r  r   rK  	args_rank
candidatesr  r
  rD  s	        rk   add_candidate>_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate  sX    
 :D=A[[I[&&)AEE"23[IINN:Y'DE Js   'A)r%   )r
   r   r   r2  r  rC  rB  r  r   ro   r  r  r  heappopr  r  clear)rD  r  r#  r   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r   r  sorted_inputss   `             @@@@@@@@rk   
sort_nodes'_canonicalize_graph.<locals>.sort_nodes  s   		 	 
	 "%$&	"$IK
!	D8C= 	D0 A( Y"  #5)IC'
 \\$ " r1E#J * #5)IC	( 	( [[55) ! * 	$
	 AX! 	Fs 	F 	F kkmFCuuzc" $ *o!j1IAq#:D\\% "JJt%<<c
$Kuuqy y
55A:!$' ( #JOO!!# *o! 
rj   c                   > U4S jnU c  g [        U [        5      (       a#  U" U R                  TR                  5      U l        g [        U [        5      (       a4  U R
                  S:X  a#  U" U R                  TR                  5      U l        g g [        U [        5      (       a4  U R
                  S:X  a#  U" U R                  TR                  5      U l        g g [        U [        5      (       a4  U R
                  S:X  a#  U" U R                  TR                  5      U l        g g [        U [        5      (       a#  U" U R                  TR                  5      U l        g [        SU  35      e)Nc                 r   > S[        T5       3nU T;  d   eUTU '   X;   d   eUR                  U 5      X'   U$ )Nr  )r  pop)r  r{  new_name
name_tables      rk   rm  8_canonicalize_graph.<locals>.rename_def.<locals>._rename  sN    3z?+,H:---#+Jx %%%%zz(3FOrj   re  r  )rv   rT   rR  rE  rS   r   re  rF  rQ   rH  rM   rG  r,   rJ  r|  )rK  rm  r  r"  s     rk   
rename_def'_canonicalize_graph.<locals>.rename_def  s   	 9a((QVVU%8%89AF>**vv"#AIIu/C/CD	 #+,,vv"#AIIu/E/EF	 #?++vv"#AIIu/D/DE	 #,--QVVU%<%<=AF #:1#!>??rj   c                 `  > U c  g [        U [        5      (       a,  TR                  U R                  U R                  5      U l        g [        U [        [
        45      (       a=  U R                  S:X  a,  TR                  U R                  U R                  5      U l        g g [        U [        5      (       a=  U R                  S:X  a,  TR                  U R                  U R                  5      U l        g g [        U [        5      (       a[  U R                  S:X  aJ  TR                  U R                  R                  U R                  R                  5      U R                  l        g g [        U [        5      (       a,  TR                  U R                  U R                  5      U l        g [        SU  35      e)Nre  r  r  )rv   rT   r~  rR  rS   rQ   r   re  rM   rD   r  r,   r|  )rK  r"  s    rk   replace_use(_canonicalize_graph.<locals>.replace_use,  s-   9a((^^AFFAFF3AFN,<=>>vv"&NN199aii@	 #?++vv"&NN199aii@	 #122vv$#->>!++2B2BAKKDTDT#U  %,--^^AFFAFF3AF #:1#!>??rj   r   r  r]  _gr%   )	rB  rC  rD  rE  rF  rH  rG  rI  rJ  )r'   rD  r  rC  rB  r  r  r  r  sortedrE  ro   r  
itemgetterrF  rH  rG  rJ  r   _canonicalize_graphr]  r  rR  r1   rI  )r  sorted_outputsr  r   r  sorted_nodesr$  r'  r   rv  r  sorted_tensor_valuessorted_sym_int_valuessorted_sym_float_valuessorted_sym_bool_valuessorted_custom_obj_valuescounterr   rK  r  r  r  r"  s   ` ``                @@@rk   r-  r-  P  s   :T :Tz-un ekk*L|EKK 0000 "$J@6@&   AZ#   A[%%(      	

 
  u""((*0C0CA0FG !u##))+1D1DQ1GH #u%%++-83F3Fq3IJ "u$$**,(2E2Ea2HI  $u&&,,.H4G4G4JK 
 GAAvv#&9JJ$$++JJ$$,,JJ$$	'#

 ! %'wi.

1   *,0. % = =2
E *rj   r  r   c                   ^^ [         R                  " U 5      n U=(       d
    [        5       n[        [	        U R
                  R                  5       [        R                  " S5      S95      n[        [	        U R                  R                  5       [        R                  " S5      S95      n[	        U R                  5      n[	        U R                  R                  S S9nU R                  R                  nU R                  R                  n[        UR                   5      [        UR"                  5      :X  d   e[        UR$                  5      [        UR&                  5      :X  d   eS[(        [*        [,        [.           [*        4   4S jnS[(        [*        [,        [.           [*        4   4S jn	[	        [1        [3        UR                   UR"                  5      5      US9n
[        U
5      S:  a  [3        S U
 5       6 u  pOSnSn[	        [1        [3        UR$                  UR&                  5      5      U	S9n[3        S	 U 5       6 u  p[5        XXq5      u  nmU4S
 jnUU4S jnU H  mU" T5        M     U H  mU" T5        M     [7        [9        U[;        [=        U5      [=        U5      S9US9UUU R>                  U R@                  U RB                  US9$ )a3  
Normalize a serialized ExportedProgram, so that different eager program which
shares the same semantics can get a single representation on disk.

This function canonicalizes an ExportedProgram by:

1. Sorting nodes in topological order.
2. Rename nodes to have unique names.
3. Remove unstable fields.
4. Aggregate the above program fields.
5. Recurse in subgraphs.

Args:
    ep (ExportedProgram): The ExportedProgram to canonicalize.
    constants (Optional[set[str]]): Set of constants names

Returns:
    ExportedProgram: The canonicalized exported program.
r   r)  c                     U R                   $ rn   )r+  )r  s    rk   r  canonicalize.<locals>.<lambda>  s    PQPUPUrj   r   c                 H   U u  nu  p#[        U[        5      (       d   eUR                  S:X  a  SS U4$ UR                  S:X  a  SUR                  R                  U4$ UR                  S:X  a  SUR
                  R                  U4$ UR                  S:X  a  SUR                  R                  U4$ UR                  S	:X  a  S
UR                  R                  U4$ UR                  S:X  a  SS U4$ UR                  S:X  a  SUR                  R                  U4$ [        SU 35      e)Nr     r  r%   r  r#   r  r  r     r  r   r     Unknown input type: )rv   r5   r   r  r  r  r  r  r  r  r  r  rR  r|  )rP  r  _argr  s       rk   
rank_input canonicalize.<locals>.rank_input  s   \d$	****99$dC<YY+%dnn33S88YY("dkk--s22YY++d**??DDYY,&doo55s::YY'!dC<YY**d))..33 #7v!>??rj   c                 "   U u  nu  p#[        U[        5      (       d   eUR                  S:X  a  SS U4$ UR                  S:X  a  SS U4$ UR                  S:X  a  SUR                  R                  U4$ UR                  S:X  a  SUR
                  R                  U4$ UR                  S:X  a  S	UR                  R                  U4$ UR                  S
:X  a  SS U4$ UR                  S:X  a  SS U4$ UR                  S:X  a  SS U4$ [        SU 35      e)Nr  r;  r  r  r%   r  r#   r  r:  r  r<  r  r  r  r   Unknown output type: )	rv   rE   r   r  r  r  r  r  r|  )r   r  r>  r  s       rk   rank_output!canonicalize.<locals>.rank_output  s    \d$
++++99%dC<YY-'dC<YY..d--<<cAAYY++d**66;;YY11d00??DDYY22dC<YY//dC<YY'!dC< #8!?@@rj   c              3   *   #    U  H	  u  pUv   M     g 7frn   rd   rz   r  r   s      rk   r|   canonicalize.<locals>.<genexpr>  s     *F:1:   rd   c              3   *   #    U  H	  u  pUv   M     g 7frn   rd   rF  s      rk   r|   rG    s     (EvsrH  c                 ,  > [        U [        5      (       d   eU R                  S:X  Ga&  U R                  R                  nUR                  S:X  a!  UR
                  nTUR                     Ul        g UR                  S:X  aP  UR                  nUR                  S:X  a  TUR                     Ul        g UR                  S:X  a  g [        SU 35      eUR                  S:X  aP  UR                  nUR                  S:X  a  TUR                     Ul        g UR                  S:X  a  g [        S	U 35      eUR                  S
;   a  g [        SU 35      eU R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a  g [        SU  35      e)Nr  r  r  re  r   Unknown sym_int type: rg  r   Unknown sym_float type: )ro  r   r   r   rc  r  r=  r  r  r  r  r  r  )rv   r5   r   r  r  r  rR  r  re  r|  rg  r  r  r  r  r  )r  r  r   r   r  t_custom_objtokreplace_tables          rk   replace_input#canonicalize.<locals>.replace_input  s&   $	****99$//%%Cxx;&MM&qvv.\)NN66Y& -aii 8AIVVx'(+A!)EFF^+$$66Y& -aii 8AIVVz)(+CA3)GHH   $';C5%ABBYY+%""A"166*AFYY("A"166*AFYY++$$((A"166*AFYY,&??..L -l.?.? @LYY'!**..C$SXX.CHYY** #7v!>??rj   c                 n  > [        T	[        5      (       d   eT	R                  S:X  Ga&  T	R                  R                  nUR                  S:X  a!  UR
                  nTUR                     Ul        g UR                  S:X  aP  UR                  nUR                  S:X  a  TUR                     Ul        g UR                  S:X  a  g [        SU 35      eUR                  S:X  aP  UR                  nUR                  S:X  a  TUR                     Ul        g UR                  S:X  a  g [        S	U 35      eUR                  S
;   a  g [        SU 35      eT	R                  S:X  a+  T	R                  R                  nTUR                     Ul        g T	R                  S:X  a+  T	R                  R                  nTUR                     Ul        g T	R                  S:X  a+  T	R                  R                  nTUR                     Ul        g T	R                  S:X  a+  T	R                  R                  nTUR                     Ul        g T	R                  S:X  aI  T	R                  nTUR                  R                     UR                  l        TUR                      Ul        g T	R                  S:X  aI  T	R"                  nTUR                  R                     UR                  l        TUR                      Ul        g T	R                  S:X  a+  T	R$                  R                  nTUR                     Ul        g [        ST	 35      e)Nr  r  r  re  r   rK  rg  r   rL  )ro  r   r   r   rc  r=  r  r  r  r  r  r  r  rB  )rv   rE   r   r  r  r  rR  r  re  r|  rg  r  r  r  r  r  r  r  r  )
r   r  r   r   r  gurN  rO  r  s
           rk   replace_output$canonicalize.<locals>.replace_output  s   $
++++99%""&&Cxx;&MM&qvv.\)NN66Y& -aii 8AIVVx'(+A!)EFF^+$$66Y& -aii 8AIVVz)(+CA3)GHHVV$';C5%ABBYY-'  $$A"166*AFYY++$$((A"166*AFYY..''++A"166*AFYY11**..A"166*AFYY22++A&quuzz2AEEJ -a.?.? @AYY//((A&quuzz2AEEJ -a.?.? @AYY'!**..C$SXX.CH #8!?@@rj   r  )r  r6  r  rg  )"rn  deepcopyr   r  r+  r]  ro   r  r,  r4  rk  rK  r  r6  r  r  rB  r  rC  r  r   r   r   r2  r  r8  r-  r.   r3   r4   rK  rh  ri  rj  )r  r   r]  r4  rk  r  r6  r  r?  rC  
sorted_insr  r  sorted_outsr.  r  sorted_graphrP  rU  rO  r  s                      @@rk   rr  rr    sr   , 
r	B#,suI 0 0 6 6 8h>Q>QRS>TUVMr##))+1D1DQ1GH (Kr@@oV))IOO!!Eu||I$9$9 ::::u}}Y%;%;!<<<<@5hsmS!89 @(AE#x}c"9: A, #ellI$9$9:;J :%(*F:*F%G"{#emmY%;%;<=;K $'(E(E#F N"5u#L-5@n3Aj d  t   $ -!,/ 0
 $+((,,&& rj   c                       \ rS rSrSr\S\4S j5       r\S\4S j5       r\S\4S j5       r	\S\
R                  4S j5       rS	rg
)ExtensionHandlerik  z.
Base class for handling extension operators.
r   c                 2    [        U R                   S35      e)Nz  namespace() must be implementedrv  r  r   s    rk   r  ExtensionHandler.namespacep      !S]]O3S"TUUrj   c                 2    [        U R                   S35      eNz op_name() must be implementedr^  r   r{   s     rk   r  ExtensionHandler.to_op_namet      !S]]O3Q"RSSrj   rR  c                 2    [        U R                   S35      erb  r^  )r   rR  s     rk   r  ExtensionHandler.from_op_namex  re  rj   c                 2    [        U R                   S35      e)Nz  op_schema() must be implementedr^  rc  s     rk   r<  ExtensionHandler.op_schema|  r`  rj   rd   N)re   rf   rg   rh   r   classmethodr2  r  r  r  rw   FunctionSchemar<  ri   rd   rj   rk   r\  r\  k  s     V# V V Ts T T T T T Ve22 V Vrj   r\  op_typeextension_handlerc                    [        U[        5      (       d   SU S35       eU [        ;  d
   U  S35       e[        U [        5      (       d   eU R
                  R                  S5      (       d   U R
                  R                  S5      (       a   eUR                  5       [        ;  d   eU[        U '   U[        UR                  5       '   g)zJRegister custom de/serialization method for a node with non-standard type.zExpected ExtensionHandler, got rm  z is already registered.rw   builtinsN)	r  r\  r;  rv   r   rf   r  r  r  )rl  rm  s     rk   register_extensionrp    s    
 ')9:: 
)*;)<A>: 11VgY>U3VV1gt$$$$%%g..((44  &&(0IIII'8G$?P/99;<rj   c                  <    [        [        R                  5       5      $ rn   )r   r;  rx  rd   rj   rk   rA  rA    s    (--/00rj   r;  r  rn   (%  r  rn  r  r  r  r5  r  r   rF  loggingr(  r  r  rQ  r  collectionsr   r   collections.abcr   r   r   r   
contextlibr	   r
   r   enumr   r   r   r   r   r   r   r   rw   torch.export.exported_programexportr   r  torch._export.non_strict_utilsr   torch._export.verifierr   torch._subclasses.fake_tensorr   r   torch.fx._symbolic_tracer   torch.fx.experimentalr   torch.fx.tracebackr   torch.utilsr   r  torch.utils._pytreer   r   torch.utils._sympy.numbersr   torch.utils._sympy.symbolr   r   torch.utils._sympy.value_rangesr    torch.utils._tracebackr!   torch.utils._tritonr"   r,  r$   rI  r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   unionr[   __all__	getLoggerre   r  r)  rb   r  rs   r   r   r   MetaTyperz  r   uint8BYTEint8CHARuint16UINT16int16SHORTint32INTint64LONGfloat16HALFfloat32FLOATfloat64DOUBLE	complex32COMPLEXHALF	complex64COMPLEXFLOAT
complex128COMPLEXDOUBLEBOOLbfloat16BFLOAT16float8_e4m3fnFLOAT8E4M3FNfloat8_e5m2
FLOAT8E5M2float8_e4m3fnuzFLOAT8E4M3FNUZfloat8_e5m2fnuzFLOAT8E5M2FNUZr   r   
sparse_coo	SparseCoo
sparse_csr	SparseCsr
sparse_csc	SparseCsc
sparse_bsr	SparseBsr
sparse_bsc	SparseBsc_mkldnnstridedStridedr   rW  contiguous_formatContiguousFormatchannels_lastChannelsLastchannels_last_3dChannelsLast3dpreserve_formatPreserveFormatr  rV  eqnelegeltgtnegpostruncsym_notmulr   subfloordivmodpowsym_int	sym_floatsym_itesym_maxsym_minsym_sqrttruedivand_or_lshiftrshiftr  anyr   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r  r   r   r   r   r   r   r  r2  r   r*  r.  r   r3  r8  r>  r@  r   rM  rb  r  r  r]   r^   r_   r`   JSONEncoderr   r   r  r\   r  r  r  r;  r-  r   rr  r\  rp  rA  r;  r  rd   rj   rk   <module>r     s	         	      	   / B B % (  ? ?   * * Q 0 D ; 1 ) ) > - 6 7 4 * 0 5 5 5 5 5 5 5 5 5 5 5 5 5 5l  !	\ 	.DdO . 	LL		NN	MM	  	KK	JJ
 
LL*## 
KK!!	
 
KK 
KK 
MM:?? 
MM:## 
MM:$$ 
OOZ++ 
OOZ,, 
j.. 
JJ
 
NNJ'' 
00  
z,,!" 
:44#$ 
:44% , ))BC  
f&&	f&&	f&&	f&&	f&&	MM6>>	MM6>>  **DE  
\::	22	L77	<66	% ! %11R$S ! KKKKKKKKKKKKLLLLJJ	MMLLLLLLLLLL	MM	OO	MM	MM	MM	NNMMLLOOOO7> HxHHH HH      #d #24& 4U\\ 4@HV, @sCx @F 0 FU38_ F)
 )u{{ )v # 
(E%,,u~~uzzQR (
sELL01 
f 
*
5!67 
H 
*	
%emm 34 	
 	
U\\ j  >B x 9: AGZ G!15$ 5L/sm/.1/
/0d38neCHou<=2?5:: ?s ?x} ?6
8C= 
ejj 
6u|| 6t 6	ELL+56		#
	A 	R 	R 	RCD CsEHHMM sl n
e n
 n
b' @
% @
 @
F a
 a
 a
H% QE Q Qh$$"" $6   /32((DcN+  	*+\S % C  8<  %	 $T#s(^4
 &q
5$sCx. !qj	 :>dd$,SX$6ddNV V,Q#YQ,-Q&1 DF d3i.>)??@ E?A 4T*:%; ;< Arj   