
    ^jw                    @   U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dlmZmZmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZmZm Z m!Z!m"Z" d dl#Z#d dl$Z$d dl%m&c m'Z( d dl)m*Z* d d	l+m,Z, d d
l-m.Z.m/Z/ d dl0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z; d dl<m=Z=m>Z> d dl?m@Z@ d dlAmBZBmCZC d dlDmEZE d dlFmGZG d dlHmIZI ddlJmKZK ddlLmMZM ddlMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZmZmZ ddlmZ g dZ e	j
                  e      Z G d de      Zdeeef   fd Ze1ez  e$j                  z  ez  e$j                  z  ez  e$j                  z  e(j                  z  ZdZd!Zi e$j$                  epj&                  e$j(                  epj*                  e$j,                  epj.                  e$j0                  epj2                  e$j4                  epj6                  e$j8                  epj:                  e$j<                  epj>                  e$j@                  epjB                  e$jD                  epjF                  e$jH                  epjJ                  e$jL                  epjN                  e$jP                  epjR                  e$j                  epjT                  e$jV                  epjX                  e$jZ                  epj\                  e$j^                  epj`                  e$jb                  epjd                  e$jf                  epjh                  e$jj                  epjl                  e$jn                  epjp                  e$jr                  epjt                  iZ ee      Ze$jz                  ecj|                  e$j~                  ecj                  e$j                  ecj                  e$j                  ecj                  e$j                  ecj                  e$j                  ecj                  e$j                  ecj                  iZ eeʫ      Ze$j                  eej                  e$j                  eej                  e$j                  eej                  e$j                  eej                  iZ eeԫ      Zej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  e
j                  e$j                  ej                  ej                  ej                  ej                  ej                  ej                  e$j                  e$j                  e$j                  e$j                  e$j                  e$j                  ej                  ej                  ej                  ej                  ej                  hZ ed" eD              r ed#      e G d$ d%             Ze G d& d'             Z G d( d)e      ZdeTd*e$j                  fd+Zd,eey   d*eed-f   fd.Zd/eey   d*eed-f   fd0Zd1epd*e$j                  fd2Zd3eyd*efd4Zd5e$j                  e$j                  z  e$j                  z  e#j                  z  fd6Z d5ee$j                  z  d*eyfd7Zd5ee$j                  z  d*ewfd8Zd5ee$j                  z  d*esfd9Zd:e$j                  d*e|fd;Zdae"d<   ed=<   d>e1fd?Zd@e	dAed*e1fdBZ
efdCedz  dDed*e	fdEZdFeeef   eed-f   z  e	z  fdGZdHe#j                  dIed*edz  fdJZdHedz  d*e#j                  fdKZdLe#j                   dMeCfdNZdOee#j                   eEf   d*eeeof   fdPZdQ Ze G dR dS             Z G dT dUe      ZdV ZdWe$j0                  j                  fdXZe! G dY dZe[             Ze! G d\ d]e[             Ze! G d^ d<e[             Ze! G d_ d`e[             Z G da dbej<                        Zdc Z dded*e	fdeZ!defdfdfdfdgdhe(j                  dieeef   dz  dDedjedkedled*efdmZ"dn Z#do Z$dpedqe	d*efdrZ%	 ddsdtdCedueeef   dz  d*e(j                  fdvZ&d*eeXeeef   f   fdwZ'	 ddxeUdye(e   dz  d*eUfdzZ) G d{ d|      Z*d}ee   d~ee*   fdZ+d Z,i Z-eee   ee*   f   ed<   i Z.eeee*   f   ed<   y)    N)
namedtupleOrderedDict)CallableIterableIteratorSequence)contextmanager)	dataclassfield)Enum)	AnnotatedAnycastfinalOptional)&_enable_graph_inputs_of_type_nn_module)load_verifier)get_opaque_type_nameis_opaque_value)
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                       e Zd Zy)SerializeErrorN)__name__
__module____qualname__     h/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_export/serde/serialize.pyrc   rc   r   s    rh   rc   dc                 j    | j                         D ci c]  \  }}|j                  | c}}S c c}}w N)itemsvalue)rj   kvs      ri   _reverse_maprq   v   s(    #$779-41aAGGQJ---s   /;c              #   d   K   | ](  }t        |t        j                  j                         * y wrl   )
isinstancetorch_ops
OpOverload).0ops     ri   	<genexpr>rz      s!     @z"ejj++,@   .0z0_SYM_OPS should not contain OpOverload instancesc                   6    e Zd ZU eed<   eed<   eed<   eed<   y)SerializedArtifactexported_program
state_dict	constantsexample_inputsN)rd   re   rf   bytes__annotations__rg   rh   ri   r}   r}      s    rh   r}   c                   6    e Zd ZU eed<   eed<   eed<   eed<   y)_SerializedProgramr~   r   r   r   N)rd   re   rf   r/   r   r   rg   rh   ri   r   r      s    %%rh   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)LazyMapz
    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    i | _         t               | _        y rl   )mapset	evaluatedselfs    ri   __init__zLazyMap.__init__   s    rh   c                 "    || j                   |<   y rl   )r   )r   ro   rp   s      ri   __setitem__zLazyMap.__setitem__   s    rh   c                     | j                   |   }|| j                  v r|S | j                  j                  |        |       | j                   |<   | j                   |   S rl   )r   r   add)r   ro   outs      ri   __getitem__zLazyMap.__getitem__   sO    hhqkJ1exx{rh   c                 6    | j                   j                         S rl   )r   __repr__r   s    ri   r   zLazyMap.__repr__  s    xx  ""rh   N)rd   re   rf   __doc__r   r   r   r   rg   rh   ri   r   r      s    
#rh   r   returnc                     | j                    t        j                  | j                        S t        j                  | j                  | j                         S )N)typer   index)r   ru   devicer   )rj   s    ri   deserialize_devicer   	  s7    ww||((<<QVV17733rh   sizes.c                     | D ])  }|j                   dk7  st        d|j                           t        d | D              S )Nas_intOnly as_int is supported, got c              3   4   K   | ]  }|j                     y wrl   r   )rx   sym_int_sizes     ri   rz   z#deserialize_size.<locals>.<genexpr>  s     ?$$?   r   AssertionErrortuple)r   r   s     ri   deserialize_sizer     sN     W( #A,BSBSAT!UVVW ????rh   stridesc                     | D ])  }|j                   dk7  st        d|j                           t        d | D              S )Nr   r   c              3   4   K   | ]  }|j                     y wrl   r   )rx   sym_int_strides     ri   rz   z%deserialize_stride.<locals>.<genexpr>  s     E>&&Er   r   )r   r   s     ri   deserialize_strider     sN    ! Y(* #A.BUBUAV!WXXY EWEEErh   stc                     t         |    S rl   )_SERIALIZE_TO_TORCH_DTYPE)r   s    ri   deserialize_scalar_typer     s    $R((rh   offsetc                 h    | j                   dk7  rt        d| j                          | j                  S )Nr   r   )r   r   r   )r   s    ri   deserialize_storage_offsetr   !  s/    {{h=fkk]KLL==rh   sc                     t        | t        j                  t        j                  t        j                  f      r| j
                  j                  } t        j                  j                  j                  |       S rl   )rt   ru   rS   rM   rQ   nodeexprsympyprintingreprsreprr   s    ri   _print_sympyr   '  sG    !ellEMM5>>BCFFKK>>$$Q''rh   c                    t        | t        j                  t        j                  t
        f      rt        j                  |       rt        j                  t        |             S t        | t        j                  t        j                  f      s!t        dt        |       j                         | j                  j                  (t        j                  t        t        |                   S t        j                  t        t        |       t!        j                  | j                  j                                    S t#        d|  dt        |        d      )Nr   zexpected SymInt or Symbol, got as_exprhintz,SymInt should be either symbol or int, got `` of type ``)rt   ru   rS   r   Symbolintr   is_concrete_intcreater   r   rd   r   r   rO   r   rP   rc   r   s    ri   serialize_sym_intr   -  s    !ellELL#67**1-==A//a%,,!=>$5d1g6F6F5GH  vv{{"}}W\!_-EFF}}#$Q(//qvv{{C  :1#[a	QRS
 	
rh   c                    t        | t        j                  t        j                  t
        f      rt        j                  |       rt        j                  t        |             S t        | t        j                  t        j                  f      s!t        dt        |       j                         | j                  j                  (t        j                  t        t        |                   S t        j                  t        t        |       t!        j                  | j                  j                                    S t#        d|  dt        |        d      )Nas_floatz!expected SymFloat or Symbol, got r   r   z0SymFloat should be either symbol or float, got `r   r   )rt   ru   rQ   r   r   floatr   is_concrete_floatr   r   r   rd   r   r   rO   r   rP   rc   r   s    ri   serialize_sym_floatr   E  s    !ennellE:;,,Q/??E!H55a%..%,,!?@$7Q8H8H7IJ  vv{{"w|A/GHH#$Q(//E  >qcTRSWIUVW
 	
rh   c                 2   t        | t        j                  t        f      r]t	        j
                  |       rt        j                  t        |             S t        j                  t        t        |                   S t        d|  dt        |        d      )Nas_bool)expr_strr   z.SymBool should be either symbol or bool, got `r   r   )rt   ru   rM   boolr   is_concrete_boolr   rO   r   rc   r   r   s    ri   serialize_sym_boolr   ]  ss    !emmT*+++A.>>$q'22>>'<?*KLL<QC{4PQ7)STU
 	
rh   tc                    t        t        | j                     | j                  D cg c]  }t	        |       c}| j
                  t        | j                  j                  | j                  j                        | j                         D cg c]  }t	        |       c}t	        | j                               t        | j                           S c c}w c c}w )z.
    Extract a TensorMeta describing `t`.
    r   )dtyper   requires_gradr   r   storage_offsetlayout)rV   _TORCH_TO_SERIALIZE_DTYPEr   shaper   r   r.   r   r   r   strider   _TORCH_TO_SERIALIZE_LAYOUTr   )r   r   s     ri   serialize_tensor_metar   i  s     '0-.WW5 #5oo188==?/0xxz:!"1%:()9)9);<)!((3 5 ;s   C
Cr`   _CURRENT_DESERIALIZERfake_tensorc                     t        | t        j                  j                        }t	        |       }t        j                  t        |      t              j                  d      }t        ||ffS )Nclsutf-8)rt   ru   nn	Parameterr   jsondumps_dataclass_to_dictEnumEncoderencode_reconstruct_fake_tensor)r   is_parametertensor_metatensor_meta_bytess       ri   _reduce_fake_tensorr   {  sY    k588+=+=>L'4K

;'[fWo  $&7%FFFrh   serialized_tensor_metar   c                     t        j                  | j                  d            }t        t        |      }t
        t        d      t
        j                  |      }|rt        j                  j                  |      }|S )Nr   z)Need access to current deserializer state)r   loadsdecode_dict_to_dataclassrV   r   r   deserialize_tensor_metaru   r   r   )r   r   json_tensor_metar   r   s        ri   r   r     sk     zz"8"?"?"HI$Z1ABK$HII'??LKhh((5rh   artifactpickle_protocolc                 ^   | yt         t        j                  v rt        d      	 t        j                  t         t
               t        j                         }t        j                  | ||       |j                         t        j                  t         = S # t        j                  t         = w xY w)Nrh   z0Refusing to stomp on existing FakeTensor reducer)r   )r   copyregdispatch_tabler   pickler   ioBytesIOru   savegetvalue)r   r   buffers      ri   serialize_torch_artifactr	    s     W+++OPP/z#67 	

8V_E "":.G"":.s   AB B,
serializedc                    t        | t        t        f      r| S t        |       dk(  ri S t	        j
                  |       }|j                  d       	 t        j                  |d      }t        |t        t        f      s!t        dt        |      j                         |S # t        $ rS}|j                  d       t        j                  |d      }t        j                  dt        |      |       Y d }~d }~ww xY w)Nr   T)weights_onlyFz\Fallback to weights_only=False succeeded. Loaded object of type %s after initial failure: %s)exc_infozexpected tuple or dict, got )rt   dictr   lenr  r  seekru   load	Exceptionlogwarningr   r   rd   )r
  r  r   es       ri   deserialize_torch_artifactr    s     *tUm,
:!	ZZ
#F
KKN

::f48 h.;DN<S<S;TUVVO  
A::f59AN	 	 	
 	

s   B   	C<)A	C77C<valadjustc                 z   | t         j                  t        fv ry | t         j                   t         fv ry t        | t         j                        rt        |       S t        j                  dt        |       | |       |dk(  rt        j                  |       S |dk(  rt        j                  |       S t        d|       )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   rt   Integerr   r  r  r   mathr  r  RuntimeError)r  r  s     ri   _sympy_int_to_intr     s    
uxx  
y6'""#u}}%3x KK	 	S	 zz#	6	yy~4VH=>>rh   c                     | |S | t          t         fv r| S | t        j                  k(  rt         S | t        j                   k(  rt          S t        j                  |       S rl   )r   r  infr   r  )r  defaults     ri   _int_to_sympy_intr$    sT    
{
w

dhh
txxiw==rh   symsym_typec                 P    t        t        |       t        t        |         d        S rl   )r   strr  r   )r%  r&  s     ri   _symbol_indexr)    s#    s3xJx013455rh   range_constraintsc                     | j                         D ci c]C  \  }}t        |      t        t        |j                  d      t        |j
                  d            E c}}S c c}}w )Nr  r  )rm   r(  rI   r   lowerupper)r*  ro   rp   s      ri   serialize_range_constraintsr.    s_     &++-
 Aq	 	Aaggv.aggw/
 	
  s   AA c                     t        | t        j                  j                        r| j                  S t        |       t        v r!t        t        |          j                  |       S t        dt        |              )NzCannot find schema for )	rt   ru   rv   rw   _schemar   _serialization_registry	op_schemar  )targets    ri   _get_schema_from_targetr4    s^    &%**//0~~	f0	0&tF|4>>vFF
0f?
@@rh   c                   @   e Zd ZU  ee      Zee   ed<    ee      Zee   ed<    ee      Z	ee
   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<   d	Zeed
<    ee      Zeeef   ed<   y)
GraphState)default_factoryinputsoutputsnodestensor_valuessym_int_valuessym_bool_valuessym_float_valuesFis_single_tensor_returncustom_obj_valuesN)rd   re   rf   r   listr8  r(   r   r9  r:  rD   r  r;  r(  rV   r<  rS   r=  rM   r>  rQ   r?  r   r@  r-   rg   rh   ri   r6  r6    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Qrh   r6  c                       e Zd Zd Zy)Finalc                     |D ]+  }t        |t              st        d|j                   d       t        j                  | ||t        |            S )Nztype 'z ' is not an acceptable base type)rt   rC  	TypeErrorrd   r   __new__r  )metaclsnamebases	classdictbs        ri   rF  zFinal.__new__  sQ     	WA!U#&4T UVV	W ||GT5$y/BBrh   N)rd   re   rf   rF  rg   rh   ri   rC  rC    s    Crh   rC  c                     g d}|D ]7  }t        | |      st        ||      st        | |      t        ||      k7  s7 y y)N)num_cpu_threads	num_warps
num_stagesnum_ctasFT)hasattrgetattr)configentry_metadatametadata_attrsattrs       ri   is_metadata_matchedrW    sG    ON 64 W^T%Bvt$(EE rh   r   c                 
   | j                   t        j                  j                  j                  urt        d| j                          t               st        d      ddlm} ddl	m
} t        | j                  d   t              s$t        dt        | j                  d                t        j                  j                  j                  j!                  | j                  d         }t        ||      }|r|j"                  n|}t%        |d      rs|j&                  }t)        |j+                               d	k7  r%t        d
t)        |j+                                      t-        t/        |j1                                     d   }nt%        |d      rp|j2                  }t)        |j+                               d	k7  r%t        dt)        |j+                                      t-        t/        |j1                                     }nt        d|j4                         t)        |j+                               d	k(  r$|t-        t/        |j1                                     fS t        ||      xr& t%        |d      xr t)        |j6                        dkD  }|ri }	|j6                  D ]d  }
|
t)        |j8                        k  s|j8                  |
   }| j                  j;                  di       }t        |t<              sX||v s]||   |	|<   f |j6                  D cg c]%  }|j8                  |   |	v r|	|j8                  |      ' }}g }|D ]I  }t        |t>        t        t@        f      r|jC                  |       0|jC                  tE        |             K g }|jG                         D ]t  \  }}tI        jJ                  d|      }|sg }|D ]6  }|dv r|jC                  |dk(         	 |jC                  tA        |             8 ||k(  sb|jC                  ||f       v ntO        |jG                               }t)        |      dk(  r2t        d|j4                   dtO        |j+                                      t)        |      d	k(  r
||d   d	   fS |r[|D ]6  \  }}|jP                  }|jR                  D ]  }tU        ||      s||fc c S  8 t        d|j4                   d|rdnd d      t        d|j4                   d|rdnd d|D cg c]  \  }}|	 c}}       c c}w # tL        $ r@ 	 |jC                  t        |             n # tL        $ r |jC                  |       Y nw xY wY w xY wc c}}w )Nz/expected triton_kernel_wrapper_functional, got z+triton required to serialize triton kernelsr   )	Autotuner)JITFunction
kernel_idxz#expected kernel_idx to be int, got device_cachesr&   z%expected exactly 1 device cache, got cachez"expected exactly 1 cache key, got z#kernel caches not found for kernel 
constexprskwargsz\('constexpr',\s*([^)]+)\))TrueFalser`  z[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: )+r3  ru   _higher_order_opstriton_kernel_wrap triton_kernel_wrapper_functionalr   r#   triton.runtime.autotunerrY  triton.runtime.jitrZ  rt   r_  r   r   kernel_side_table
get_kernelfnrQ  r\  r  keysnextitervaluesr]  rd   r^  	arg_namesgetr  r   r   appendr(  rm   refindall
ValueErrorrA  metadataconfigsrW  )r   rY  rZ  kernelis_autotuneractual_kernelcachesr]  has_constexprsconstexpr_valsconstexpr_idx
param_namekwargs_dictidxexpected_valuesnormalized_expectedr  matching_entriessig_keycache_entryconstexpr_matchesconstexpr_valuesmatch_sig_keyrT  rS  key_s                               ri   !get_triton_kernel_and_cache_entryr  #  s   &&99ZZ	[ =dkk]K
 	
 <JKK2.dkk,/51$t{{<7P2Q1RS
 	
 $$77IITTL!F fi0L!-FII6M}o.,,v{{}" 7FKKM8J7KL  T&--/*+A.		($$v{{}" 4S5G4HI  T&--/*+1-2H2H1IJ
 	

 5::<Ad4#7888 	=+. 	.M<0	.(()A-  *55 	MMs=#:#:;;*44]C
"kkooh;k40![05@5Lz2	M %//	
 &&s+~=	 =22378
 
 !" 	5C#c512#**3/ $**3s84	5 $)KKM 	D G[ "

+H' R 
 $& . 
?E 11(//@?,33E%LA
? $'::$++Wk,BC+	D.  .
!ijw  kA  kA  jB B%%)%**,%7$8:
 	
 !.q1!444%5 	6!Hk(11N .. 6&v~>(+556	6 @AWAW@XXY/=+CVW X89
 	
 
@AWAW@XXY+9'?R
S T9L\9]&#q#9]8^	` U
L  * ?? 0 7 7E
 C#- ? 0 7 7 >??P :^sB   *T"T"U."	U+,UU+U$	!U+#U$	$U+*U+c                      e Zd Zdej                  deej                     fdZed        Z	de
j                  j                  fdZde
j                  j                  fdZdefd	Zde
j                  j                  fd
Zd Zde
j                  j                  dz  fdZdefdZde
j                  j                  deeef   fdZdee   dz  deeeef      dz  fdZdej4                  defdZdee   fdZ	 d9dedee   fdZdee   fdZde fdZ!de fdZ"de fdZ#de fdZ$d9dedz  de%fdZ&de'fdZ(de)fdZ*de+fd Z,de)fd!Z-d"ej\                  de.fd#Z/d"ej`                  de0fd$Z1d%ej                  de2fd&Z3d'ejh                  de%fd(Z5d)e6jn                  defd*Z8d+ejr                  de9fd,Z:deej                     dee   fd-Z;de
j                  j                  dee%   fd.Z<de
j                  j                  dee%   fd/Z=d0ed1ede%fd2Z>de
j                  j                  dee'   fd3Z?d4e
j                  j                  deAfd5ZBd6eeef   fd7ZCd4e
j                  j                  de@fd8ZDy):r^   graph_signaturemodule_call_graphc                 h    t               | _        || _        || _        i | _        i | _        i | _        y rl   )r6  graph_stater  r  custom_objsduplicate_getitem_nodestreespec_namedtuple_fields)r   r  r  s      ri   r   zGraphModuleSerializer.__init__  s6    
 &<.!2+-79$DF'rh   c              #   r   K   | j                   }t               | _         	 d  || _         y # || _         w xY wwrl   )r  r6  r   saveds     ri   save_graph_statez&GraphModuleSerializer.save_graph_state  s3       %<	%$DuDs   7+ 7	47r   c           
      ,   |j                   dk7  rt        d|j                          |j                  d   }t        j	                  d|j
                  |       t        |t        j                        r2t        j                  | j                  |j
                  |            }nLt        |t        j                        r2t        j                  | j                  |j
                  |            }n t        |t        j                        rt        d      t        |t        t         t"        t$        t'        d       f      r| j)                  |      }nt        |t*        j,                        rj|j.                  }t        j                  t-        |j
                  |      	      }| j1                  |      | j2                  j4                  |j
                  <   nt        d
|j                  d          | j2                  j6                  j9                  |       y )Nplaceholderzexpected placeholder op, got r  z[handle_placeholder] %s: %s	as_tensor
as_sym_intz,SymFloat graph input is not implemented yet.rH  	class_fqnas_custom_objz Unimplemented graph input type: )ry   r   metar  debugrH  rt   ru   Tensorr(   r   serialize_tensor_outputrS   serialize_sym_int_outputrQ   r   r   r(  r   r   serialize_inputepr-   r  serialize_script_obj_metar  r@  r8  rq  )r   r   r  graph_inputr  s        ri   handle_placeholderz(GraphModuleSerializer.handle_placeholder  s   77m# #@	!JKKii		/C@c5<<("//66tyy#FK U\\*"//88CHK U^^, !OPPc4eT$Z@A..s3KR112I"///TYY)TK ..s3 ..tyy9 !#CDIIeDTCU!VWW&&{3rh   c                    |j                   dk7  rt        d|j                          t        |j                        dk7  r!t        dt        |j                               |j                  d   }t        j                  d|j                  |       t        |t        j                  j                        r3d| j                  _        | j                  |      g| j                  _        y t        |t        t         f      st        dt#        |             |D cg c]  }| j                  |       c}| j                  _        y c c}w )	Noutputzexpected output op, got r&   z(FX.Node's args should have one arg, got r   z[handle_output] %s: %sTzexpected tuple or list, got )ry   r   r  argsr  r  rH  rt   ru   fxrD   r  r?  r  r9  r   rA  r   )r   r   	node_argsargs       ri   handle_outputz#GraphModuleSerializer.handle_output  s   77h #;DGG9!EFFtyy>Q :3tyy>:JK  IIaL			*DIIyAi/7;D4(,(<(<Y(G'HD$i%7$'CDOCT%UVVMV'Wc(<(<S(A'WD$'Ws   Er   c                     t        |t              r|S |j                  j                  d      r-|j                  j	                  dd      }| d|j
                   S |j                   d|j
                   S )Nz
torch._opsz	torch.ops.)rt   r(  re   
startswithreplacerd   )r   r3  modules      ri   serialize_operatorz(GraphModuleSerializer.serialize_operator  sr    fc"M)),7 &&..|[IFXQv/00''(&//):;;rh   c                 &    |j                   dk7  rt        d|j                          |j                  j                  d      }t        j                  d|j                  |j                  |j                  |j                  |       |j                  t        j                  u ry |j                  t        v s;|t        |t        j                  t        j                   t        j"                  f      rt%        |j                        dk7  r!t        dt%        |j                               t'        |j                   j)                  |j                         j+                  |j                  |j                         j-                  |j                  |      g j/                  |            }	nt        |j                  t        j0                  j2                        rt'        |j                   j)                  |j                         j5                  |j                  |j                  |j                         j7                  |       j/                  |            }nt        |j                  t        j0                  j8                        rdt:        fd	}|j                  t        j<                  j>                  u rtA        |j                        }|j                  d   j                  }tC        |jD                  jF                  |      st        d
|       tI        |jD                  jF                  |      }|jJ                  |d<   d |d<   g }|d   t        |d   tL              ry|d   D ]l  }	t        |	t        jN                  j&                        r5t        |	j                  j                  dd       tP        jR                        r\|jU                  |	       n ||d<    fd}
t'        |j                   j)                  |j                         jW                  ||j                         |
|       j/                  |      d      }n
|j                  t        j<                  jX                  jZ                  u r:t]        |      \  }}|j^                  }|j                  d   }t        |t`              s!t        dtc        |      jd                         |jg                         }g }|jh                  D ch c]  }|jj                  s|j                   }}d}g }d}t        |j                  d   t`              s$t        dtc        |j                  d                |j                  d   jm                         D ]m  \  }}||v rd}|rt        d      ||v r|jU                  |       |jU                  to        | jq                  |      tr        jt                               |dz  }o t        |j                  d   t@              s$t        dtc        |j                  d                |jv                  jd                   d|jx                   }||j                  d   d   ||jz                  d}tC        |d      r|j|                  |d<   tC        |d      rBt        |j~                  t:              rt        |j~                        |d<   n|j~                  |d<   tC        |d      r|j                  |d<   tC        |d      r|j                  |d<   tC        |d      r|j                  |d<   |jh                  D cg c]  }|jj                  r|j                   c}|d <   tI        tI        |d!d       d"d       }|W|jh                  D cg c]=  }|jj                  s/t        |j                  |j                  |j                              ? c}|d#<   n=|jh                  D cg c]$  }|jj                  rt        |j                        & c}|d#<   t'        |j                   j)                  |j                        ||jm                         D cg c]0  \  }}to        | jq                  |      tr        j                        2 c}}z    j                  |       j/                  |       ||            }nt'        |j                   j)                  |j                         jW                  |j                  |j                         j                  |       j/                  |       ||            }n!tc        |j                        t        v ratc        |j                        t        vr!t        tc        |j                         d$      t        tc        |j                           }|j                         }|j                  |j                        }t        |t              rt        |t              s7t        d%tc        |      jd                   d&tc        |      jd                         d'|v sd'|v rt        d(|d&|      t'        |j                  d)| d'|  j5                  |j                  |j                  |j                         j7                  |       j/                  |            }nt        |j                        rvt'        |j                   j)                  |j                         jW                  |j                  |j                         j                  |       j/                  |            }nt        d*|j                   d+       j                  j                  jU                  |       y c c}w c c}w c c}w c c}w c c}}w ),Ncall_functionzexpected call_function op, got r  z-[handle_call_function] %s: %s(%s, {%s}) -> %sr   z#expected no kwargs for sym op, got )rH  r3  r8  r9  ru  r   c                 ,   t        | j                  t        j                  j                        s+t        dt        | j                        j                         | j                  j                  dd       }|d uxr t        |t        j                        S )Nz"expected HigherOrderOperator, got r  )rt   r3  ru   rv   HigherOrderOperatorr   r   rd   r  rp  r  )r   meta_vals     ri   _is_hop_single_tensor_returnzPGraphModuleSerializer.handle_call_function.<locals>._is_hop_single_tensor_return8  sr    !$++uzz/M/MN(<T$++=N=W=W<XY   99==5t+R
8U\\0RRrh   z&owning_module does not have attribute r&   r$   c                     | j                   j                  dd       }g }t        |      D ]8  \  }}j                  | |      }|j	                  j                  ||             : t        j                  |      gS )Nr  
as_tensors)r  rp  	enumerate_output_node_name_at_indexrq  r  r(   r   )r   r  tensor_argsr  r  rH  r   s         ri   serialize_tensor_list_outputzPGraphModuleSerializer.handle_call_function.<locals>.serialize_tensor_list_outputa  sw    #yy}}UD9H"$K%.x%8 U	T#>>tSI#**4+G+Gd+STU %OO{CDDrh   F)rH  r3  r8  r9  ru  is_hop_single_tensor_returnz"expected meta_val to be dict, got r_  z*expected kwargs['kwargs'] to be dict, got Tz/non-constexpr args found after constexpr arg(s)rH  r  kindgridzexpected grid to be list, got r  )rH  r  output_indicesrN  rM  sharedshared_memory_bytes
tile_widthtile_heightbase_pekernel_param_namessrc	signaturekernel_param_typesz* is not supported in export serialization.z.expected namespace and op_name to be str, got z and :z2namespace and op_name should not contain ':', got #zSerializing z is not supported)Ory   r   r  rp  r  r  rH  r3  r  r_  operatorgetitem_SYM_OPSrt   ru   rS   rM   rQ   r  rD   r  serialize_sym_op_inputsserialize_outputserialize_metadatarv   rw   serialize_inputsserialize_outputsr  r   rc  aoti_call_delegaterA  rQ  graphowning_modulerR  	aoti_pathr   r  r  r-   rq  serialize_hoo_inputsrd  re  r  ru  r  r   rd   rk  paramsis_constexprrm   rB   r  r)   
POSITIONALrj  hashrN  rM  r  r   r  r  r  r(  
annotationKEYWORDserialize_hoo_outputsr1  	namespace
to_op_namecallablerc   r  r:  )r   r   r  ex_noder  serializable_argslowered_module_namelowered_moduleserializable_weight_nodesweight_noder  rw  kernel_cache_entrykernel_cache_metadataoutput_keysr  pconstexpr_keysfound_constexpr
inputs_newiro   rp   kernel_name_with_hash
kwargs_newcompiled_signaturerH  ahandlerr  op_names   `                              ri   handle_call_functionz*GraphModuleSerializer.handle_call_function  s#
   77o% #B477)!LMM99=='		;IIKKIIKK	
 ;;(***;;(" 8ellEMM5>>%RS4;;1$$9#dkk:J9KL  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Sd S {{e55HHH$(O! ,099Q<+<+<#tzz779LM(@AT@UV  "))A)ACV!W'5'?'?!!$ (,!!$,.)$Q'3
%a((9 (9'; F &k588==Aj',,00=r?S?SG %188EF ,E%a(E 224;;?445FT8>!44T:05 **==^^_ .Ot-T**(:(C(C%99U+!(D1(<T(^=T=T<UV  'mmo!#28--!RQ1>>!&&!R!R"'
!$++h"7>(DT$++V^J_E`Dab  !KK1779 DAq N**. &,M  K'&--a0%%%!" $ 4 4Q 7!-!8!8 FA-0 "$++f"5t<(8dkk&>Q9R8ST 
 yy))*!,A,F,F+GH & 2 KK/2&4!6!@!@	
 02CD-== 01 0(;!"7">">E<?188=
#89 =R<X<X
#89 0,?/D/O/OJ|,0-@0E0Q0QJ}-0)<,A,I,IJy) %+MM4 AFF4
/0 &-.t<k4&" &1 "(8 ~~ .221661<<HI8J34 4:==8./ALL)8J34 224;;?% (2'7'7'9 $D! &!% $ 4 4Q 7!-!5!5 !66t<!44T:0LT0R" 224;;?44TYYL 66t<!44T:0LT0R $++"99DKK (??$DKK())ST  .d4;;.?@G))+I((5Gi-Z5M$DT)_E]E]D^^cdhipdqdzdzc{|  i3'>$HUZ[bZef  YY9+Qwi0,,T[[$))T[[Q..t4006G dkk" YY..t{{;00DKKH2248006G !<}<M!NOO%%g.w "SJ488s1   4m9m99m>m>Ann0n5nc                 D    t         j                  d|j                         y )Nz[handle_get_attr] %s)r  r  rH  )r   r   s     ri   handle_get_attrz%GraphModuleSerializer.handle_get_attr  s    		($))4rh   Nc                     d }|j                   D ]g  }|j                  t        j                  urt	        | d      ||j
                  d   k(  s@||}E|j                  | j                  |j                  <   i |S )Nz is not a getitem noder&   )usersr3  r  r  r   r  rH  r  )r   r   r   	user_nodeusers        ri   _output_node_at_indexz+GraphModuleSerializer._output_node_at_index!  s    	JJ 		MD{{("2"22$v-C%DEE		!$$ $I ?HnnD00;		M rh   c                 d    | j                  ||      }||j                   d| S |j                  S )N_unused_)r	  rH  )r   r   r   r  s       ri   r  z0GraphModuleSerializer._output_node_name_at_index/  s9    ..tU;	ii[00>>!rh   c           	         i }|j                   j                  d      x}r||d<   |j                   j                  d      x}rHd }|j                         D cg c]  \  }}| d ||        }}}t        j	                  |      |d<   |j                   j                  d      x}	rA|	D 
cg c]  }
|
d    d| j                  |
d            }}
t        j	                  |      |d<   |j                   j                  d      x}r!t        j	                  t        |            |d<   |j                   j                  d	      x}r	 t        j                  |      |d	<   d|j                   v r6|j                   d   }t        j                  | j                  |            |d<   |S c c}}w c c}
w # t        $ r!}t        d
|j                   d|       |d }~ww xY w)Nstack_tracenn_module_stackc                    t        | t              rt        |       dk7  rAt        | t              rt        |       nd}t        dt	        |       j
                   d|       | \  }}t        |t              s!t        dt	        |      j
                         t        |t              s!t        dt	        |      j
                         |dz   |z   S )Nr$   zN/Az expected tuple of length 2, got z of length zexpected path to be str, got zexpected ty to be str, got ,)rt   r   r  r   r   rd   r(  )r  val_lenpathtys       ri   export_nn_module_stackzHGraphModuleSerializer.serialize_metadata.<locals>.export_nn_module_stack>  s    !#u-SQ*4S%*@c#heG(:49;M;M:NkZaYbc  b!$,(7T
8K8K7LM  ""c*(5d2h6G6G5HI  czB&rh   r  source_fn_stackr   r&   torch_fncustomz-Failed to serialize custom metadata for node z with error 	from_node)r  rp  rm   ST_DELIMITERjoinr  rA  r   r   r  rc   rH  _serialize_from_node)r   r   retr  r  r  ro   rp   nn_module_listsource_fn_st	source_fnsource_fn_listr  r  r  r  s                   ri   r  z(GraphModuleSerializer.serialize_metadata6  s   ))--66;6!,C"iimm,=>>?>'* @O?T?T?V7;q!1#Q-a012N  &2%6%6~%FC!"99==):;;<; ". Q<.$"9"9)A,"G!HIN  &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$   F"+#F(F- -	G6GGr  c                 n    |y|D cg c]"  }t        |t              r|j                         $ c}S c c}w )zk
        Serialize from_node metadata from a list of NodeSource objects to a list of dictionaries.
        N)rt   r   to_dict)r   r  node_sources      ri   r  z*GraphModuleSerializer._serialize_from_nodep  sB       )
+z2 !
 	
 
s   '2script_obj_metac                 p    t         j                  d|       t        |j                  |j                        S )Nz[serialize_script_obj_meta] %sr  )r  r  r-   rH  r  r   r$  s     ri   r  z/GraphModuleSerializer.serialize_script_obj_meta  s2     			2OD  %%%//
 	
rh   c           	         t        |t        j                  j                        r.|j                  j
                  D cg c]  }|j                   }}nM|t        vrt        d| d      t        t        j                  |      j                  j                               }g }t        ||      D ]?  \  }}|j                  t!        || j#                  |      t$        j&                               A |S c c}w )Nzop z is not in _SYM_OPSr  )rt   ru   rv   rw   r0  	argumentsrH  r  r   rA  inspectr  
parametersrk  ziprq  rB   r  r)   r  )r   ry   r  r  
args_namesserialized_args	args_names          ri   r  z-GraphModuleSerializer.serialize_sym_op_inputs  s    b%**//0.0jj.B.BCs#((CJC!$s2$.A%BCCg//3>>CCEFJ!*d3 	NIs""",,S1%00	  Ds   C2r3  c           
      l   d }g }t        |t        j                  j                  j                        r|d   }|d   }|j                  ||      }n\t        |t        j                  j                  gt                     s!t        dt        |      j                         t        |      }|t        d      |xs i }t        |j                        D ]  \  }}	|	j                  |v r]|j!                  t#        |	j                  | j%                  ||	j                     |	j                        t&        j(                               q|	j*                  sa|t-        |      k  rS|j!                  t#        |	j                  | j%                  ||   |	j                        t&        j.                               ތ |S )Nr   r&   z6expected OpOverload or registered extension type, got zschema should not be Noner  )rt   ru   rc  	torchbindCallTorchBindr'   rv   rw   _registered_extension_typesr   r   rd   r4  r  r(  rH  rq  rB   r  r)   r  
kwarg_onlyr  r  )
r   r3  r  r_  r'   r-  objmethodr  
schema_args
             ri   r  z&GraphModuleSerializer.serialize_inputs  s    fe55??MMNq'C!WF]]3/F..O1L1NO %LTRX\MbMbLcd  -V4F> !<==2&v'7'78 	MAz&(&&!'__ 00":??3Z__ *11  **q3t9}&&!'__ 00a*//J)44 -	0 rh   c                 B   |D cg c]-  }t        d| j                  |      t        j                        / }}|j	                  |j                         D cg c]0  \  }}t        || j                  |      t        j                        2 c}}       |S c c}w c c}}w )zM
        For serializing HOO inputs since HOOs do not have a schema.
         r  )rB   r  r)   r  extendrm   r  )r   r  r_  r  r8  rH  s         ri   r  z*GraphModuleSerializer.serialize_hoo_inputs  s     	
  T11!4<;R;R
 
 	  &||~ D! ,,Q/%--		
 !
s   2B5B
c                 \    t        |      t        u xs t        |t        j                        S rl   )r   r   rt   ru   rS   r   r  s     ri   is_inductor_sym_int_argz-GraphModuleSerializer.is_inductor_sym_int_arg  s#    
 CyC@:c5<<#@@rh   c                     t        |      t        u xsH t        |t        j                  j
                        xr" |j                  | j                  j                  v S rl   )	r   r   rt   ru   r  rD   rH  r  r<  r;  s     ri   is_sym_int_argz$GraphModuleSerializer.is_sym_int_arg  sG    CyC 
sEHHMM* <D,,;;;	
rh   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S rl   )rt   r   ru   r  rD   rH  r  r>  r;  s     ri   is_sym_float_argz&GraphModuleSerializer.is_sym_float_arg  sE    #u% 
sEHHMM* >D,,===	
rh   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S rl   )rt   r   ru   r  rD   rH  r  r=  r;  s     ri   is_sym_bool_argz%GraphModuleSerializer.is_sym_bool_arg  sE    #t$ 
sEHHMM* =D,,<<<	
rh   arg_typec           
      l#    dd l mc m} |j                  |j                  ft        |t        j                  j                        r[|j                  dk(  rt        |j                  t              s+t        dt        |j                        j                         t        |j                   j"                  |j                        }t        |t        j$                        rt'        d      t        |t        j                  j(                        rU j+                         5   j-                  |      }d d d        t/        j0                  t3        |j                              S t        |      j                  dk(  rOt        |dd       }t        |d	d       }|t        d
      |t        d      t/        j0                  | d|       S t'        d|j                   dt        |              j5                  |      r4t/        j0                  t7        j0                  |j8                              S  j;                  |      r4t/        j0                  t=        j0                  |j8                              S  j?                  |      r4t/        j0                  tA        j0                  |j8                              S t        |jB                  d   tD        jF                        rBt/        j0                  tG        |j8                  |jB                  d   jH                              S |j8                   jJ                  v r9 jJ                  |j8                     }t/        j0                  tM        |            S t/        j0                  tM        |j8                              S t        |      r=|jO                         }	|	t        d      t/        j0                  tM        |	            S t        ||jP                        rz|jO                         }	|	t        d      |jS                         }
|
jU                         jW                         }|
 jX                  |	<   t/        j0                  tG        |	|            S t        |t        jZ                        r3t/        j0                  t7        j0                  t        |                  S t        |t        j\                        r3t/        j0                  t=        j0                  t        |                  S t        |      t^        u rt/        j0                  |      S t        |      t        u rt/        j0                  |      S t        |      t`        u rt/        j0                  |      S t        |      tb        u rt/        j0                  |      S t        |      td        u r5t/        j0                  tg        |jh                  |jj                              S |t/        j0                  d       S t        |tl              rki }|jo                         D ]@  \  }}t        |t              st'        d!t        |              jq                  |      ||<   B t/        j0                  |"      S t        |tr        tt        f      r\tw        |      dk(  r|t        |t        jx                        r|j{                         }t        |t        j|                        s!t        d#t        |      j                         |j{                         }t        |t        jx                        r|j{                         }t        |t        j~                        rt/        j0                  g $      S t        |t        j                        rt/        j0                  g %      S t        |t        j                        rt/        j0                  g &      S t        |t        j                        rt/        j0                  g '      S t        |t        j                        rt/        j0                  g (      S t'        d)| d*      t        j                  d+       t/        j0                  g (      S t        d, |D              rt/        j0                  ts        |      $      S t        d- |D              rt/        j0                  ts        |      %      S t        d. |D              rt/        j0                  ts        |      &      S t        d/ |D              rt/        j0                  ts        |      '      S t         fd0|D              rg }|D ]  }t        |t        jZ                        r/|j                  t7        j0                  t        |                   Lt        |      t`        u s^|j                  t7        j0                  |              t/        j0                  |1      S t        d2 |D              rAt/        j0                  |D cg c]!  }t=        j0                  t        |            # c}3      S t         fd4|D              rg }|D ]  }t        |t        j                  j                        r0|j                  t7        j0                  |j8                               Wt        |      t`        u si|j                  t7        j0                  |              t/        j0                  |1      S t         fd5|D              rg }|D ]  }t        |t        j                  j                        r0|j                  t=        j0                  |j8                               Wt        |tb              sh|j                  t=        j0                  |              t/        j0                  |3      S t         fd6|D              rg }|D ]  }t        |t        j                  j                        r0|j                  tA        j0                  |j8                               Wt        |t^              sh|j                  tA        j0                  |              t/        j0                  |7      S t        d8 |D              r^g }|D ]A  }|j                  dk(  rt'        d      |j                  tM        |j8                               C t/        j0                  |(      S t        d9 |D              rt        d: |D              rxg }|D ][  }g }|D ]A  }|j                  dk(  rt'        d      |j                  tM        |j8                               C |j                  |       ] t/        j0                  |;      S t        d< |D              r,d= }t/        j0                  ts        t        ||            >      S t        fd?|D              r<t/        j0                  |D cg c]  }tM        |jO                                c}(      S t        fd@|D              r.fdA}t/        j0                  ts        t        ||            >      S t        dB |D              r-t/        j0                  |D cg c]  }ts        |       c}C      S t        dD |D              r-t/        j0                  |D cg c]  }ts        |       c}E      S t'        dF|D cg c]  }t        |       c}       t        |t        j                        rt/        j0                  t        |   G      S t        |t        j                        r5t/        j0                  t        |j                  |j                  H      I      S t        |t        j                        rt/        j0                  t        |   J      S t        |t        j                        rt/        j0                  t        |   K      S t        |t        j                  j                        r|j                  dL      r|j                  dM      st'        dN| dO      dPtw         jX                         }| jX                  |<   |jU                         jW                         }t/        j0                  tG        ||            S t        |      r[dPtw         jX                         }| jX                  |<   t        t        |            }t/        j0                  tG        ||            S t        |t        j                  j                  t        j                  j                  f      r%t/        j0                   j                  |      Q      S t'        dRt        |       dS|       # 1 sw Y   _xY wc c}w c c}w c c}w c c}w c c}w )TNr   get_attrz#expected arg.target to be str, got z?getattr nodes containing tensors should not appear in the graph)rH  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  rH  r  zBuffer must have valid namer   r   r   )realimag)
as_complexTas_nonezDict keys must be strings, got )as_string_to_argumentzexpected ListType, got )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   >   K   | ]  }t        |      t        u   y wrl   )r   r   rx   r  s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     0q47d?0   c              3   >   K   | ]  }t        |      t        u   y wrl   r   r   r_  s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>       1T!W^1r`  c              3   >   K   | ]  }t        |      t        u   y wrl   )r   r   r_  s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     3!T!W%3r`  c              3   >   K   | ]  }t        |      t        u   y wrl   )r   r(  r_  s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  rc  r`  c              3   @   K   | ]  }j                  |        y wrl   )r<  rx   r  r   s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     BT11!4B   )as_sym_intsc              3   P   K   | ]  }t        |t        j                           y wrl   )rt   ru   rQ   r_  s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     @qZ5>>2@s   $&)as_sym_floatsc              3   @   K   | ]  }j                  |        y wrl   )r>  rg  s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     9T((+9rh  c              3   @   K   | ]  }j                  |        y wrl   )r@  rg  s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     ;!T**1-;rh  c              3   @   K   | ]  }j                  |        y wrl   )rB  rg  s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     :T))!,:rh  )as_sym_boolsc              3   d   K   | ](  }t        |t        j                  j                         * y wrl   rt   ru   r  rD   r_  s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     ?aZ588==1?r{   c              3   H   K   | ]  }t        |t        t        f        y wrl   )rt   rA  r   r_  s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     ?aZD%=1?s    "c              3   @   K   | ]  }t        d  |D                yw)c              3   d   K   | ](  }t        |t        j                  j                         * y wrl   rq  rx   r   s     ri   rz   zBGraphModuleSerializer.serialize_input.<locals>.<genexpr>.<genexpr>  s     @QJq%((--0@r{   N)all)rx   inners     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s"      HEJ@%@@Hs   )as_nested_tensorsc              3   z   K   | ]3  }t        |t        j                  j                  t	        d       f       5 y wrl   )rt   ru   r  rD   r   r_  s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s(     MAZEHHMM4:#>?Ms   9;c                     | t        j                  d      S t        | t        j                  j
                        r*t        j                  t        | j                              S t        d|        NTrW  rS  r  z!Unsupported list/tuple argument: )	rE   r   rt   ru   r  rD   rU   rH  rc   r  s    ri   serialize_optional_tensor_argszMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_args  s`    y5<<TJJ#Auxx}}55<<&4!&&&A   -/PQRPS-TUUrh   )as_optional_tensorsc              3   6   K   | ]  }t        |        y wrl   )rt   rx   r  inductor_tensor_bufferss     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     IZ#:;Is   c              3   R   K   | ]  }t        |g t        d                y wrl   )rt   r   r  s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s-      JK
1D 7DdDEs   $'c                     | t        j                  d      S t        |       r.t        j                  t        | j	                                     S t        d|        r{  )rE   r   rt   rU   get_namerc   )r  r  s    ri   r}  zMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_args  s\    y5<<TJJ#A'>?5<<&4!**,&G   -/PQRPS-TUUrh   c              3   d   K   | ](  }t        |t              xr t        d  |D               * yw)c              3   >   K   | ]  }t        |      t        u   y wrl   rb  rx   xs     ri   rz   zBGraphModuleSerializer.serialize_input.<locals>.<genexpr>.<genexpr>
  s     ,GT!W^,Gr`  N)rt   r   rv  r_  s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>	  s/      LM
1e$G,GQ,G)GGr{   )as_int_listsc              3   p   K   | ].  }t        |t        t        f      xr t        d  |D               0 yw)c              3   <   K   | ]  }t        |t                y wrl   )rt   r   r  s     ri   rz   zBGraphModuleSerializer.serialize_input.<locals>.<genexpr>.<genexpr>  s     4UaZ55I4Us   N)rt   rA  r   rv  r_  s     ri   rz   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s7       1tUm,U4UST4U1UUs   46)as_float_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 )[torch._inductor.ir	_inductorirBufferReinterpretViewrt   ru   r  rD   ry   r3  r(  r   r   rd   rR  r  r  r  rc   r4   r  serialize_graphr(   r   r3   r>  rT   rH  r@  rR   rB  rN   r  r  r-   r  r  rU   r  TorchBindObjectget_real_obj_typequalified_namer  rS   rQ   r   r   r   complexr+   rT  rU  r  rm   r  rA  r   r  OptionalTypegetElementTypeListTypeBoolTypeIntType	FloatType
StringType
TensorTyper  r  rv  rq  r   r   r   r   r.   r   memory_format!_TORCH_TO_SERIALIZE_MEMORY_FORMATr   r   _CScriptObject_has_methodr   r   rv   rw   r  r  )r   r  rC  inductor_irrV  r  rH  rI  
dedup_namearg_namearg_valr  serialized_dictr  rn   	elem_typern  r  r(  nested_arguments
inner_listinner_argumentsr   r}  r   custom_obj_namer  s   `                         @ri   r  z%GraphModuleSerializer.serialize_input  s   00 ''#

 c588==)vv#!#**c2(=d3::>N>W>W=XY  syy66

CdELL1(Y   ehh&:&:;..0 ; $ 4 4T :;#??!.CJJe!L  $Z((,BB #*$t"DK!(|T!BJ"*,-MNN!),-LMM#??}Aj\5RSS(8LQUVZQ[P\]  $$S)-44SXXF  &&s+!1!8!8!J  %%c* / 6 6sxx H  CHHUOR-A-AB"3 XX%1J1J# 
 T999!99#((C
Z1PQQSXX1NOO45
 ||~H$%BCC??^-JKK[889 ||~H$%BCC&&(G668I)0DX&??1B8Y1W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 C
U!#s+(+J4PS9+)VWW'+';';E'B$C ??IIdE]+3x1}'!(E,>,>?#+#:#:#<%h?,5d8n6M6M5NO  !) 7 7 9I!)U-?-?@$-$<$<$>	!)U^^<';;#Iu}}='r::#Iu?'<<#Iu/?/?@'"==#Iu/?/?@'"== -/DYKu-UVV KKF
 $??b990C00S	::1S11tCy993s33c;;1S11$s)<<BcBB  GA!!U\\2n&;&;CF&KLaCn&;&;1&EF	G
  6::@C@@TW"Xq#3#:#:3q6#J"X  9S99 GA!!UXX]]3n&;&;AFF&KLaCn&;&;1&EF	G
  6::;s;; KA!!UXX]]3&6&=&=aff&MN#Au-&6&=&=q&IJ	K
  V<<:c:: IA!!UXX]]3o&<&<QVV&LM#At,o&<&<Q&GH	I
  F;;?3??	 BAttz),]  $$^%@AB  )<<?3??C HNQH E $& "% =J&(O * O77j0"0 a#  (..~499/MNO %++O<=  9IJJMMMV  (,S1OQT-U(V  ISIIKNOaAJJL AO   OR V  (,S1OQT-U(V   QT   c4JT!W4JKK  
  6L1tAw6LMM$<s=S!d1g=S<TU  U[[)??2KC2PQQU\\*??V-STTU001??!B3!G  U\\*??-G-LMMUXX223/OON3$7u => >  !-S1A1A-B,CDO03D_-		224I??/K  S! ,S1A1A-B,CDO03D_-,T#Y7I??/K  ejj33UZZ5S5STU??t/F/Fs/KLL -d3i[8NxjY [	; ;x #YP  P. 5K 7M >Ts2   !AF&AF1!AF"AF' AF,$AF1
FAFc                     || j                   j                  v rt        d|d      t        |      | j                   j                  |<   t	        |      S )Nname z already in tensor_valuesrS  )r  r;  r   r   rU   r   rH  r  s      ri   r  z-GraphModuleSerializer.serialize_tensor_outputC  sQ    4##111 50I!JKK/DX/N&&t,4((rh   c                     || j                   j                  v rt        d|d      t        |      | j                   j                  |<   t	        j
                  |      S )Nr  z already in sym_int_valuesrM  )r  r<  r   r   rT   r   r  s      ri   r  z.GraphModuleSerializer.serialize_sym_int_outputI  sW    4##222 50J!KLL0A(0K''-$$T22rh   c                     || j                   j                  v rt        d|d      t        |      | j                   j                  |<   t	        j
                  |      S )Nr  z already in sym_float_valuesrM  )r  r>  r   r   rR   r   r  s      ri   serialize_sym_float_outputz0GraphModuleSerializer.serialize_sym_float_outputO  sW    4##444 50L!MNN2Eh2O))$/&&t44rh   c                     || j                   j                  v rt        d|d      t        |      | j                   j                  |<   t	        j
                  |      S )Nr  z already in sym_bool_valuesrM  )r  r=  r   r   rN   r   r  s      ri   serialize_sym_bool_outputz/GraphModuleSerializer.serialize_sym_bool_outputU  sW    4##333 50K!LMM1CH1M((.%%d33rh   specc                 h   t         j                  d|       |j                  t        j                  j
                  k(  r$t        |j                  t        j                        rt        |j                  j                        t        u r,t        j                  |j                  j                        }n@t        |j                  j                        t        u r+t        j                  |j                  j                        }nt        |j                  j                        t        u r+t        j                  |j                  j                        }nt        |j                  j                        t         u r+t        j                  |j                  j                        }nP|j                  j                  t        j                  d      }n#t#        d|j                  j                   d	      t%        j                  t'        |j                  j(                  |
            S t%        j                  t+        | j-                  |j                                    S |j                  t        j                  j.                  k(  r|j0                  t3        d      t        |j                  t        j4                        s+t3        dt        |j                        j6                         t%        j                  t9        t5        |j                  j(                        |j0                              S |j                  t        j                  j:                  k(  r|j0                  t3        d      t        |j                  t        j4                        s+t3        dt        |j                        j6                         |j<                  t3        d      t%        j                  t?        t5        |j                  j(                        |j0                  |j<                              S |j                  t        j                  j@                  k(  r|j0                  t3        d      t        |j                  t        j4                        s+t3        dt        |j                        j6                         t%        j                  tC        t5        |j                  j(                        |j0                              S |j                  t        j                  jD                  k(  r|j0                  t3        d      t        |j                  t        jF                        s+t3        dt        |j                        j6                         t%        j                  tI        tG        |j                  j(                  |j                  jJ                        |j0                              S |j                  t        j                  jL                  k(  rt        |j                  t        jN                        s+t3        dt        |j                        j6                         t%        j                  tQ        tO        |j                  j(                                     S t3        d!|       )"Nz[serialize_input_spec] %sr   r   rK  r   TrW  zUnhandled constant input z to serializerH  rn   )constant_inputr  )
user_inputz,spec.target should not be None for PARAMETERexpected TensorArgument, got rS  r  parameter_name)	parameterz)spec.target should not be None for BUFFERz-spec.persistent should not be None for BUFFER)r  buffer_name
persistent)r  z2spec.target should not be None for CONSTANT_TENSOR)r  tensor_constant_name)tensor_constantz-spec.target should not be None for CUSTOM_OBJz expected CustomObjArgument, got r  )r  r  )
custom_objexpected TokenArgument, got tokenUnknown argument kind: ))r  r  r  r  	InputKind
USER_INPUTrt   r  ConstantArgumentr   rn   r   r,   r   r   r(  r   rc   r6   r8   rH  rZ   serialize_argument_spec	PARAMETERr3  r   rU   rd   r;   BUFFERr  r7   CONSTANT_TENSORr<   
CUSTOM_OBJr-   r9   r  TOKENrW   r:   )r   r  constant_specs      ri   serialize_input_specz*GraphModuleSerializer.serialize_input_spec[  s   		-t499///$((B$7$7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{{"$%STTdhh(9(9:$3DN4K4K3LM  ##.&DHHMM:#';;  YY",,---{{"$%PQQdhh(9(9:$3DN4K4K3LM  &$%TUU##(&DHHMM: $#  YY",,666{{"$H  dhh(9(9:$3DN4K4K3LM  ## 9&DHHMM:)-!  YY",,111{{"$%TUUdhh(<(<=$6tDHH~7N7N6OP  ##/)!XX]]dhh6H6H %)KK	  YY",,,,,dhh(8(89$24>3J3J2KL  ##$%488==9  !#:4&!ABBrh   c                 6   t         j                  d|       |j                  t        j                  j
                  k(  r9t        j                  t        | j                  |j                                    S |j                  t        j                  j                  k(  rt        |j                  t        j                        s+t        dt        |j                        j                          t        j                  t#        t        |j                  j$                                    S |j                  t        j                  j&                  k(  r|j(                  t        d      t        |j                  t        j                        s+t        dt        |j                        j                          t        j                  t+        t        |j                  j$                        |j(                        	      S |j                  t        j                  j,                  k(  r|j(                  t        d
      t        |j                  t        j                        s+t        dt        |j                        j                          t        j                  t/        t        |j                  j$                        |j(                              S |j                  t        j                  j0                  k(  r|j(                  t        d      t        |j                  t        j                        s+t        dt        |j                        j                          t        j                  t3        t        |j                  j$                        |j(                              S |j                  t        j                  j4                  k(  r|j(                  t        d      t        |j                  t        j                        s+t        dt        |j                        j                          t        j                  t7        t        |j                  j$                        |j(                              S |j                  t        j                  j8                  k(  r|j(                  t        d      t        |j                  t        j                        s+t        dt        |j                        j                          t        j                  t;        t        |j                  j$                        |j(                              S |j                  t        j                  j<                  k(  rt        |j                  t        j>                        s+t        dt        |j                        j                          t        j                  tA        t?        |j                  j$                                    S t        d|       )Nz[serialize_output_spec] %sr  )user_outputr  rS  )loss_outputz2spec.target should not be None for BUFFER_MUTATION)r  r  )buffer_mutationz5spec.target should not be None for PARAMETER_MUTATIONr  )parameter_mutationz8spec.target should not be None for GRADIENT_TO_PARAMETER)gradient_to_parameterz9spec.target should not be None for GRADIENT_TO_USER_INPUT)r  user_input_name)gradient_to_user_inputz6spec.target should not be None for USER_INPUT_MUTATION)user_input_mutationr  r  r  )!r  r  r  r  
OutputKindUSER_OUTPUTrF   r   r[   r  r  LOSS_OUTPUTrt   rU   r   r   rd   r>   rH  BUFFER_MUTATIONr3  r*   PARAMETER_MUTATIONrH   GRADIENT_TO_PARAMETERr0   GRADIENT_TO_USER_INPUTr1   USER_INPUT_MUTATIONrY   r  rW   rG   )r   r  s     ri   serialize_output_specz+GraphModuleSerializer.serialize_output_spec  s   		.599111$$*t/K/KDHH/UV  YY"--333dhh(9(9:$3DN4K4K3LM  $$*~488==/QR  YY"--777{{"$H  dhh(9(9:$3DN4K4K3LM  $$ 2&DHHMM: $!  YY"--:::{{"$K  dhh(9(9:$3DN4K4K3LM  $$#8&DHHMM:#';;$  YY"--==={{"$N  dhh(9(9:$3DN4K4K3LM  $$&=&DHHMM:#';;'  YY"-->>>{{"$O  dhh(9(9:$3DN4K4K3LM  $$'>&DHHMM:$(KK(  YY"--;;;{{"$L  dhh(9(9:$3DN4K4K3LM  $$$9&DHHMM:$(KK%  YY"-----dhh(8(89$24>3J3J2KL  $$%%488==9  !#:4&!ABBrh   sigc           	          t         j                  d       t        |j                  D cg c]  }| j	                  |       c}|j
                  D cg c]  }| j                  |       c}      S c c}w c c}w )Nz
[serialize_signature]input_specsoutput_specs)r  r  r5   r  r  r  r  )r   r  r   s      ri   serialize_signaturez)GraphModuleSerializer.serialize_signature$  s^    		+,?BO!2215OADAQAQRA$44Q7R
 	
ORs   A1A6
r  c                    t        |t        j                        r*t        j                  t        |j
                              S t        |t        j                        r4t        j                  t        j                  |j
                              S t        |t        j                        r4t        j                  t        j                  |j
                              S t        |t        j                        r| j                  |j                        S t        |t        j                        r5t        j                  t        |j
                  |j                              S t        d      )	NrS  r  rM  r  rO  r  r  TODO)rt   r  rU   r(   r   rH  rT   rR   r  r  rn   r-   r  r   r   r  s     ri   r  z-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??/QVVq{{S  !((rh   treespecc                 l     dt         j                  dd f fdt        |t              } |       |S )Ntsr   c           	      J   | j                   y | j                   t        u st        j                  | j                         rt        j                  | j
                     j                  }|j                  v rej                  |   j                  }|| j
                  j                  k7  r`t        d| j
                   d| j
                  j                   d| d      t        | j
                  j                        j                  |<   | j                         D ]
  } |        y )Nz%The given TreeSpec's namedtuple type z was found to have field names z6 but somehow previously was found to have field names r  )field_names)r   r   pytreeis_namedtuple_classSUPPORTED_SERIALIZED_TYPEScontextserialized_type_namer  r  _fieldsrc   rC   children)r  r  r  childr   store_namedtuple_fieldss       ri   r  zIGraphModuleSerializer.serialize_treespec.<locals>.store_namedtuple_fields>  s   wwww*$(B(B277(K'-'H'HJJ(&& % (4+J+JJ"&"A"A,#!k   #bjj&8&88,CBJJ< P==?ZZ=O=O<P QTT_S``ac  &"**2D2DE 334HI  /'./rh   )r  TreeSpecr   rX   )r   r  serialized_treespecr  s   `  @ri   serialize_treespecz(GraphModuleSerializer.serialize_treespec;  s8    	/ 	/D 	/2 -X7GH)""rh   module_call_signaturec           	         t         j                  d|       t        |j                  D cg c]  }| j	                  |       c}|j
                  D cg c]  }| j	                  |       c}| j                  |j                        | j                  |j                        |j                  x}r|      S d       S c c}w c c}w )Nz$[serialize_module_call_signature] %sr8  r9  in_specout_specforward_arg_names)
r  r  rA   r8  r  r9  r  r  r  r  r   r	  r  namess       ri   serialize_module_call_signaturez5GraphModuleSerializer.serialize_module_call_signature[  s     			8:OP"9N9U9U45,,Q/ :O9V9V45,,Q/ ++,A,I,IJ,,-B-K-KL#8#J#JJ%J
 	
 RV
 	
s   B<C
c           	          t         j                  d       |D cg c]@  }t        |j                  |j                  r| j                  |j                        nd       B c}S c c}w )Nz
[serialize_module_call_graph]fqnr  )r  r  r@   r  r  r  r   r  entrys      ri   serialize_module_call_graphz1GraphModuleSerializer.serialize_module_call_graphm  sa     			34 +

  II  88I

 
	
 

s   AA"c                    dt         dt        fd}|j                  dk(  r:t        |j                  t
        j                  j                  gt                     s8t        d|j                   dt        |j                        j                         t        |j                        }|j                  }t        |      dk(  rg S |j                  d   } ||j                        r_g }t!        |      D ]8  \  }}| j#                  ||      }	|j%                  | j'                  |	|             : t)        j*                  |	      gS t        |      d
k(  r| j-                  |j.                  |      gS g }
t!        t1        ||            D ]  \  }\  }}|t        |j2                  t
        j4                  t
        j6                  f      s+t        dt        |j2                        j                         |
j%                  t)        j*                  d             t        |t
        j8                        rt        |j2                  t
        j4                  t
        j6                  f      s+t        dt        |j2                        j                         | j#                  ||      }	|
j%                  | j-                  |	|             ?t        |t:              rt        |j2                  t
        j<                        r2t        |j2                  j?                         t
        j6                        s+t        dt        |j2                        j                         | jA                  ||      }g }t!        |      D ]R  \  }}|	||j.                   d| d| }	n| j#                  ||      }	|j%                  | j'                  |	|             T |
j%                  t)        j*                  |	             lt        |tB        tD        tF        tH        f      r5| j#                  ||      }|
j%                  | j-                  ||             tK        dt        |       d|jM                                 |
S )a5  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.
        r3  r   c                     t        |       }|j                  }t        |      dk7  ry|d   j                  }t	        |t
        j                        xr( t	        |j                         t
        j                        S )Nr&   Fr   )	r4  returnsr  	real_typert   ru   r  r  r  )r3  r'   r  return_types       ri   _is_single_tensor_list_returnzNGraphModuleSerializer.serialize_outputs.<locals>._is_single_tensor_list_return  sg    ,V4FnnG7|q !!*..Kk5>>: z**,e.>.>@ rh   r  zIexpected call_function with OpOverload or registered extension type, got z with r   r  r  r&   z)expected OptionalType or TensorType, got TrW  z/expected ListType with TensorType element, got r  r  zUnhandled output type z from node )'r   r   ry   rt   r3  ru   rv   rw   r2  r   r   rd   r4  r  r  r  r  r  rq  r  r(   r   r  rH  r+  r  r  r  r  rA  r  r  r	  r   rS   r   rQ   rt  format_node)r   r   r  r'   r  r  r  r  r  rH  output_argumentsreturn_schemar  r  r  muser_node_names                    ri   r  z'GraphModuleSerializer.serialize_outputs}  s   (		# 		$ 		 GG&ejj33T6Q6ST !wwivd4;;&7&@&@%AC 
 )5..w<1I99U# )5K&x0 M	T66tSA""4#?#?d#KLM OO{;<<\Q))$))X>?? *3C'4J*K 0	&C&$|!!++e.@.@%BRBR-S )CDI`I`DaDjDjCkl 
 !''(EFD%,,/!!++e.@.@%BRBR-S )CDI`I`DaDjDjCkl  66tSA ''(=(=dD(IJD$' }66G"%//>>@%BRBR )I$}OfOfJgJpJpIqr  !66tSA	%dO GDAqy  ("&))HSE1#>#>>y!LKK < <T1 EFG !''4(HID3x"@A!%!@!@s!K ''(=(=nd(ST ,T$ZLDDTDTDVCWX ]0	d  rh   c                 ,   |j                   d   }t        |t              r2g }t        |      D ]  \  }}| j	                  ||      }t        |t
              rg }t        |      D ]  \  }}	t        |	t        j                        st        dt        |	       d      ||j                   d| d| }
n| j                  ||      }
|j                  | j                  |
|	              |j                  t        j                  |             ||j                  n|j                   d| }
|j                  | j!                  |
|             " |S t        |t"              rg }|j%                         D ]j  \  }}t        |t        j                        st        dt        |       d      | j                  ||      }
|j                  | j                  |
|             l t        j                  |      gS | j!                  |j                  |      gS )zN
        For serializing HOO outputs since HOOs do not have a schema.
        r  z Serialize list output with type z nyir  r  r  )r  rt   r   r  r	  rA  ru   r  rc   r   rH  r  rq  r  r(   r   r  r  rm   )r   r   r  r9  r  element_meta_valr  tensorsjr!  rH  r  r  r  s                 ri   r  z+GraphModuleSerializer.serialize_hoo_outputs  s    99U#h&G'0': R## 66tQ?	.5 G )*: ; 
N1)!U\\:"0"B47)4 P#  %,&*ii[1QC#@D#'#B#B9a#PDt'C'CD!'LM
N NN8??g#FG
 %0 " $		{(1#6  NN4#8#8?O#PQ3R6 N$'K%^^- M	T!$5(:4:,dK  66tSA""4#?#?d#KLM OO{;<<))$))X>??rh   rH  r  c                    |t        j                  d      S t        |t        j                        r&t        j                  | j                  ||            S t        |t        t        j                  f      r&t        j                  | j                  ||            S t        |t        t        j                  f      rAt        |t              rt        d      t        j                  | j                  ||            S t        |t        t        j                  f      r&t        j                  | j                  ||            S t!        d|       )	NTrW  r  rQ  z1meta_val should not be bool when returning SymIntr  rO  zUnable to serialize output )r(   r   rt   ru   r  r  r   rM   r  r   rS   r   r  r   rQ   r  rc   r  s      ri   r  z&GraphModuleSerializer.serialize_output)  s   ??400h-??66tXF  4"78?? ::4J  3"56(D)$G  ??88xH  5%.."9:??!<<T8L 
 :8*EFFrh   c                    |j                   d   }i }|j                  D ]L  }|j                  t        j                  urt        d| d| d      |j                  ||j                  d   <   N t        |      D ]  \  }}||vs|j                   d| ||<     g }t        |      D ])  \  }}	|j                  | j                  ||   |	             + |S )Nr  z
User node z of z is incorrectr&   r  )r  r  r3  r  r  r   rH  r  r  rq  r  )
r   r   r  idx_to_namer  r  r  arg_listr  r$  s
             ri   _handle_getitem_usersz+GraphModuleSerializer._handle_getitem_usersI  s    99U#JJ 	2D{{("2"22$z$tD6%OPP(,		K		!%		2  ) 	?FC +%&*ii[#>C 	? #,X#6 	AOO,,[^=MN	 rh   graph_modulec                 j   t        |t        j                  j                        s!t	        dt        |      j                         t        j                  d|j                  d             |j                  j                  D ]"  }	  t        | d|j                         |       $ t'        | j(                  j*                  | j(                  j                  | j(                  j,                  | j(                  j.                  | j(                  j0                  | j(                  j2                  | j(                  j4                  | j(                  j6                  | j(                  j8                  		      S # t        $ r:}t        d| d|j!                          dt#        j$                                |d }~ww xY w)
Nzexpected GraphModule, got z[serialize_graph]

%sF)print_outputhandle_zFailed serializing node z in graph: 
 Original exception )	r8  r:  r;  r<  r>  r=  r@  r9  r?  )rt   ru   r  r4   r   r   rd   r  r  print_readabler  r:  rR  ry   r  rc   r  	traceback
format_excr2   r  r8  r;  r<  r>  r=  r@  r9  r?  )r   r,  r   r  s       ri   r  z%GraphModuleSerializer.serialize_graphd  s   ,(<(<= ,T,-?-H-H,IJ  			%|'B'BPU'B'V	
 !&&,, 	D2y1248	 ##**""((**88++::!-->> ,,<<"..@@$$,,$($4$4$L$L

 
	
  $.tfK@P@P@R?SSijsj~j~  kA  jB  Cs   E//	F285F--F2r  c                     i }|j                  d      x}r1t        j                  d|       	 t        j                  |      |d<   |S |S # t
        $ r}t        d|       |d }~ww xY w)Nr  z%
[serialize_graph_module_metadata] %sz9Failed to serialize custom metadata for graph with error )rp  r  r  r   r   r  rc   )r   r  r  r  r  s        ri   serialize_graph_module_metadataz5GraphModuleSerializer.serialize_graph_module_metadata  sy    XXh''6'II>G $

6 2H 
s
  $OPQsSs   A	 		A&A!!A&c                    t         j                  d       | j                  |      }t        || j	                  | j
                        | j                  | j                        | j                  |j                        | j                        S )Nz
[serialize])r  r  r  ru  r  )r  r  r  r4   r  r  r  r  r5  r  r  )r   r,  r  s      ri   r]   zGraphModuleSerializer.serialize  ss    		/"$$\2..t/C/CD">>t?U?UV99,:K:KL'+'F'F
 	
rh   rl   )Erd   re   rf   r  ExportGraphSignaturerA  r@   r   r	   r  ru   r  rD   r  r  r(  r  r  r  r	  r  r  r  r   r   r  r-   r  rB   r  r  r  r   r<  r>  r@  rB  r(   r  rU   r  rT   r  rR   r  r  r6   r  rF   r  r5   r  ArgumentSpecr  r  r  r  rA   r  r  r  r  r  r+  r4   r2   r  r5  r]   rg   rh   ri   r^   r^     s   
G00
G   2 23
G % %4uxx}} 4:X%((-- X$	<C 	<O/ O/b5EHHMMD4H " "8uxx}} 8c3h 8t
j)D0
	d38n		$

!33
	
43F , 	11
 
m	1fD4G ,Ad A
T 

t 

d 
DS4Z D8 DL
) )3. 35<L 54> 4aC aC) aCFdC"-- dCJ dCL
r'>'> 
> 
) )X ) #6?? #s #@
%'%;%;
	
$
!%b&8&8!9
	o	
 x ehhmm x X x t0@%((-- 0@DN 0@dGS GC GH G@%((-- D<P 6
EHH,@,@ 
U 
:DcN 

ehh&:&: 

{ 

rh   r^   )	metaclassc                   l    e Zd Zdefdeeef   dz  defdZdddddej                  de
d	e
d
e
def
dZy)r_   Nopset_versionr   c                     i | _         |r| j                   j                  |       d| j                   vr+t        j                  j	                         | j                   d<   || _        y Naten)r;  updateru   r  _get_max_operator_versionr   )r   r;  r   s      ri   r   z"ExportedProgramSerializer.__init__  sV    
 .0%%m4+++).)K)K)MDv&.rh   Tserialize_state_dictserialize_constantsserialize_example_inputsr~   rB  rC  rD  r   c          
         |j                          t        |j                  |j                        }|j	                  |j
                        }t        |j                        }|j                  j                         }|j                  j                         D ]  \  }	}
|	|v rt        d|	d      |
||	<    t        || j                  |t        t         d   t         d         |j"                  D cg c]  }|j$                   c}t&        j(                  |j*                        }t-        |t/        |j1                                      t3        |j4                  d      }d	}|rt7        || j8                        }d	}|rt7        || j8                        }d	}|r t7        |j:                  | j8                        }t=        ||||      S c c}w )
zS
        Args:
            exported_program: Exported Program to serialize
        zconstant name z already exists in constantsr   r&   )majorminorr,  r;  r*  schema_version	verifierstorch_versionguards_codeF)in_placerh   )validater^   r  r  r]   r,  r.  r*  r  copyr   rm   r   r/   r;  rL   rK   rJ  dialectru   __version___guards_codecanonicalizer   rk  r%   r   r	  r   r   r   )r   r~   rB  rC  rD  gm_serializerserialized_graph_moduleserialized_range_constraintsr   nr   rp   serialized_epnew_state_dictserialized_state_dictserialized_constantsserialized_example_inputss                    ri   r]   z#ExportedProgramSerializer.serialize  s    	!!#-,,.>.P.P
 #0"9"9:J:W:W"X'B..(
$ %2$=$=$B$B$D	$..446 	DAqI~$~aU:V%WXXIaL	
 (0,,:($Q'$Q' +;*D*DEQqyyE++(55
 	]C	(8$9: 6''%
 !$$< 4 4%!  ##;4//$  %(!#(@ //1E1E)% "! %	
 	
= Fs   /G)rd   re   rf   DEFAULT_PICKLE_PROTOCOLr  r(  r   r   r  r/   r   r   r]   rg   rh   ri   r_   r_     sz     046/CH~,/ /" &*$()-J
,,J
 #	J

 "J
 #'J
 
J
rh   r_   c                      e Zd Zej                   G d d             ZdEdZeded   fd       Z	de
fdZde
fd	Z	 dFd
e
deez  ez  dz  dej"                  fdZdedeej&                  z  fdZdedeej,                  z  fdZdedeej0                  z  fdZdedefdZdedej:                  fdZdej@                  jB                  ez  dz  fdZ"de#dej@                  jF                  fdZ$de!de%ddfdZ&de'dejN                  fdZ(de)dejR                  fdZ*de+dejX                  fd Z-	 	 dGd!e.d"e/e
ej`                  f   e1z  d#e/e
e2f   e1z  d$e3e3ej`                  d%f   e/e
e2f   f   e1z  dz  d&e/e
e4jj                  f   dz  defd'Z6d(e
d)ej@                  jB                  fd*Z7d+ Z8de!fd,Z9d-e:e;   fd.Z<d/e=de2fd0Z>d/e?de2fd1Z@d2 ZAde!d)ej@                  jB                  fd3ZBde!d)ej@                  jB                  fd4ZCd)ej@                  jB                  d5eDeEz  eFz  d6ed7e/e
e2f   fd8ZGd)ej@                  jB                  d7e/e
e2f   fd9ZHde!d)ej@                  jB                  ddfd:ZId;e/e
e
f   de/e
e2f   fd<ZJd=e:e/e
e2f      dz  de:eK   dz  fd>ZLd?e=dej                  fd@ZNdAeOdej                  fdBZPdCe:eQ   de:ej                     fdDZRy)Hr`   c                   V   e Zd ZU ej                  j
                  ed<   ej                  ed<   e	ej                     ed<   eeej                  f   ed<   eeej                  ej                   j"                  z  f   ed<   eeef   ed<   eeej                  df   eeef   f   dz  ed	<   y)
GraphModuleDeserializer.Resultr,  r  r  names_to_symbolsr   r   .Nr   )rd   re   rf   ru   r  r4   r   r  r7  rA  r@   r  r(  r   r   r  r   r   r   r   r   rg   rh   ri   Resultr`    s    hh****** 2 233sELL011ellUXX-?-???@@3344eELL#$56S#XFG$NNrh   rb  r   Nc                     i | _         t               | _        t        j                  j                         | _        t        j                  j                         | _	        y rl   )
serialized_name_to_noder   serialized_name_to_metaru   r  r2   r  r   Moduler  r   s    ri   r   z GraphModuleDeserializer.__init__	  s8    AC$07	$XX^^%
hhoo'rh   c              #     K   | j                   | j                  | j                  | j                  | j                  f}t
        j                  j                         | _         t
        j                  j                         | _        i | _        t               | _        t               | _        	 d  |\  | _         | _        | _        | _        | _        y # |\  | _         | _        | _        | _        | _        w xY wwrl   )r  r  rd  re  unbacked_symbolsru   r  r2   r   rf  r   r   r  s     ri   save_graph_modulez)GraphModuleDeserializer.save_graph_module		  s      JJKK((((!!
 XX^^%
hhoo'')$'.y$365		 
,,%
,,%s   B%C4(C ,"C4#C11C4serialized_targetc                 h    |j                  d      \  }}|dd  }t        |   }|j                  |      S )Nr  r&   )split_deserialization_registryfrom_op_name)r   rj  r  r  r   s        ri   deserialize_extension_operatorz6GraphModuleDeserializer.deserialize_extension_operator"	  s=    .44S9	7abM	+I6##G,,rh   c                    |j                  d      rt        }|j                  d      dd  }n||j                  d      rt        }|j                  d      dd  }nP|j                  d      rt        }|j                  d      dd  }n$|j                  d      r| j                  |      S |S |}|D ]  }t        ||      s|c S t        ||      }  |S )N	_operatorr  r&   ru   r  r  )r  r  rl  ru   r  ro  rQ  rR  )r   rj  r  serialized_target_namesr3  rH  s         ri   deserialize_operatorz,GraphModuleDeserializer.deserialize_operator(	  s    ''
 F&7&=&=c&B12&F#))'2F&7&=&=c&B12&F#))&1F&7&=&=c&B12&F#))#.667HII$$+ 	/D64((( .		/
 rh   r   r   c                      	 ddt         j                  dt        t        z  t        z  dz  dt         j                  f fd}t        j
                  |i  j                   j                        } |||      S )z
        Parses and does bottom-up processing of sympy.Expr nodes,
        populating ShapeEnv & caching symbols as needed.
        Nr%  r   r   c                 r   | j                   s| j                  s| j                  r| S t        |       }| j                  D ]  }j                  |        |j                  v rj                  |   } nx| j                  |<   t        | t        j                        rOt        j                  | t        j                  t        j                  f      rj                  j!                  |        |4| j"                  j$                  vrj"                  j'                  | |       j(                  j+                  |      x}r2j"                  j-                  | |j.                  |j0                         t        | t        j                        r-t3        j4                  d      j"                  j6                  | <   | S )N)compiler_mincompiler_maxr&   )skip)
is_Integeris_Float
is_Booleanr(  r  _parse_sym_exprsymbol_name_to_symbolrt   r   r   r   symbol_is_typer    UNBACKED_INTUNBACKED_FLOATrh  r   	shape_envbacked_var_to_valadd_backed_var_to_valsymbol_name_to_rangerp  constrain_symbol_ranger,  r-  r"   extractvar_to_stack)r%  r   r   r  vrr   s        ri   _process_sym_exprzBGraphModuleDeserializer._parse_sym_expr.<locals>._process_sym_exprI	  sd    ~~
 s888 .C((-. t99944X>C;>D..x8!#u||49W9Wd//1D1DE: --11#6#4>>3S3S(SNN88dC2266x@@2@NN99%'XX%'XX :  c5<<07H7P7PVW7XDNN//4Jrh   )localsrl   )r   Exprr   r   r   sympifysympy_functionsr}  )r   r   r   r  r   s   `    ri   r|  z'GraphModuleDeserializer._parse_sym_exprA	  sy     @D!	!	#&:#5#<!	ZZ!	F }}Id**Id.H.HI
 !t,,rh   r   c                 :   |j                   }|j                  dk(  r|j                  d }nQ|j                  j                  dk7  r"t        d|j                  j                        |j                  j                   }| j	                  |j
                  |      }| j                  j                  ||      S |j                  dk(  r4t        |      t        ur!t        dt        |      j                         |S t        d|j                   d|j                          )Nr   r   z!expected hint type 'as_int', got r   zexpected int, got zSymInt has invalid field type  with value )rn   r   r   r   r|  r   r  create_symintnoder   rd   rc   r   r   r  r   r%  s        ri   deserialize_sym_intz+GraphModuleDeserializer.deserialize_sym_intr	  s    gg66Yxx88==H,(;CHHMM;LM  xx~~&&s||T:C>>33Cd3CCVVxCy#$'9$s):L:L9M%NOOJ 0QWWIN rh   c                    |j                   }|j                  dk(  r]|j                  r|j                  j                  nd }| j	                  |j
                  |      }| j                  j                  ||      S |j                  dk(  r3t        |t              s!t        dt        |      j                         |S t        d|j                   d|j                          )Nr   r   r   zexpected float, got z SymFloat has invalid field type r  )rn   r   r   r   r|  r   r  create_symfloatnodert   r   r   rd   rc   r  s        ri   deserialize_sym_floatz-GraphModuleDeserializer.deserialize_sym_float	  s    gg66Y(+388$$dD&&s||T:C>>55c5EEVVz!c5)$';DI<N<N;O%PQQJ 2166(,qwwiP rh   c                 r   |j                   }|j                  dk(  r6| j                  |j                        }| j                  j                  |      S |j                  dk(  r3t        |t              s!t        dt        |      j                         |S t        d|j                   d|j                          )Nr   r   zexpected bool, got zSymBool has invalid field type r  )rn   r   r|  r   r  create_symboolnodert   r   r   rd   rc   )r   r   r  r   s       ri   deserialize_sym_boolz,GraphModuleDeserializer.deserialize_sym_bool	  s    gg66Y''5D>>44T::VVy c4($':49;M;M:N%OPPJ 1!&&aggYO rh   r   c                 d     j                   5  t        t        t        j                  t         fd|j                  D              t         fd|j                  D              t        |j                        t        |j                     |j                              cd d d        S # 1 sw Y   y xY w)Nc              3   @   K   | ]  }j                  |        y wrl   r  rx   r  r   s     ri   rz   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>	  s     UC$2237Urh  c              3   @   K   | ]  }j                  |        y wrl   r  r  s     ri   rz   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>	  s     WC$2237Wrh  )r   r   r   )fake_tensor_moder   r   ru   empty_stridedr   r   r   r   r   r   r   r   )r   r   s   ` ri   r   z/GraphModuleDeserializer.deserialize_tensor_meta	  s     "" 
	##U;CTCTUUW;CVCVWW-k.@.@A3K4E4EF"-";";	
	 
	 
	s   BB&&B/r$  c                 X    t        j                  |j                  |j                        S )Nr  )r  r-   rH  r  r&  s     ri   deserialize_script_obj_metaz3GraphModuleDeserializer.deserialize_script_obj_meta	  s)     ## %%%//
 	
rh   c                 p   |j                   dk(  r#| j                  |j                  j                     S |j                   dk(  r#| j                  |j                  j
                     S |j                   dk(  r#| j                  |j                  j
                     S |j                   dk(  r#| j                  |j                  j
                     S |j                   dk(  r|j                  S |j                   dk(  r|j                  S |j                   dk(  r|j                  S |j                   dk(  ry t        d	|       )
Nr  r  rR  rP  r   r   r   rX  z"Unable to deserialize output node )r   rd  r  rH  r  rN  rR  rP  r   r   r   rc   )r   r  s     ri   deserialize_graph_outputz0GraphModuleDeserializer.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Orh   serialized_graphc           	          t         j                  d       |j                  j                         D ]0  \  }}t         j                  d||       |f fd	 j                  |<   2 |j
                  j                         D ]0  \  }}t         j                  d||       |f fd	 j                  |<   2 |j                  j                         D ]0  \  }}t         j                  d||       |f fd	 j                  |<   2 |j                  j                         D ]0  \  }}t         j                  d||       |f fd		 j                  |<   2 |j                  j                         D ]/  \  }}t         j                  d
|       |f fd	 j                  |<   1 t         j                  d       t        |j                        D ]  \  }}	t         j                  d|	       |	j                  dv rK|	j                  j                  }
 j                  j                  |
      }|
|_         j!                  |
|       v|	j                  dk(  r}|	j                  j                  dk(  rK|	j                  j"                  }
 j                  j                  |
      }|
|_         j!                  |
|       t%        d|	j                   d      |	j                  dv ro j&                  j(                  |   j*                  j                  xs d| }
 j                  j                  |
      } j-                  |	      |j.                  d<   t%        d|	        |j0                  D ]0  }	  j3                  |j4                        } j7                  ||       2 g }|j>                  D ]8  }t         j                  d|       |jA                   jC                  |             : |jD                  r+tG        |      dk7  rtI        dtG        |             |d   }ntK        |      } j                  jM                  |      }|jD                  rg|jN                  d   }tQ        |tR        jT                  jV                        stI        dt        |             |j.                  d   |j.                  d<   n[|jN                  d   }tQ        |tJ        tX        f      stI        dt        |             tK        d |D              |j.                  d<    j                  j0                  D ]`  }|j.                  j[                  d      x}!t]        j^                  |d  j`                   jb                  d!"      x}sR||j.                  d#<   b tG         jb                        dk7  r.tI        d$tG         jb                         d% jb                          j                  S # t8        $ r)}t%        d| dt;        j<                                |d }~ww xY w)&Nz
[deserialize_graph]z([deserialize_tensor_meta] %s (input): %sc                 &    j                  |       S rl   )r   rp   r   s    ri   <lambda>z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>	  s    t'C'CA'F rh   z$[deserialize_sym_int] %s (input): %sc                 &    j                  |       S rl   r  r  s    ri   r  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>	  s    (@(@(C rh   z&[deserialize_sym_float] %s (input): %sc                 &    j                  |       S rl   )r  r  s    ri   r  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>	  s    $*D*DQ*G rh   z%[deserialize_sym_bool] %s (input): %sc                 &    j                  |       S rl   )r  r  s    ri   r  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>	  s    )B)B1)E rh   z [deserialize_script_obj_meta] %sc                 &    j                  |       S rl   )r  r  s    ri   r  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>	  s    $*J*J1*M rh   z
[deserialize graph nodes]z[deserialize input] %s)r  r  r  rN  z Deserializing a constant symint z as an input)r   r   r   rX  rL  r  r  zInvalid input type zFailed deserializing node r0  z[deserialize output] %sr&   z5expected single output for single_tensor_return, got r   z,Expected Node for single tensor return, got z1Expected tuple/list for multi tensor return, got c              3      K   | ]9  }t        |t        j                  j                        r|j                  d    n| ; yw)r  N)rt   ru   r  rD   r  )rx   r  s     ri   rz   z<GraphModuleDeserializer.deserialize_graph.<locals>.<genexpr>A
  s6      , $.c588==#AsJ,s   ?Arg   T)r  pendingsimplifyunbacked_bindingsz"expected no unbacked symbols, got : )2r  r  r;  rm   re  r<  r>  r=  r@  r  r8  r   rn   rH  r  r  sync_fx_noderN  rc   r  r  r  deserialize_inputr  r:  rs  r3  deserialize_noder  r2  r3  r9  rq  r  r?  r  r   r   r  r  rt   ru   r  rD   rA  rp  r    _free_unbacked_symbols_with_pathr  rh  )r   r  rH  tensor_valuesym_int_valuesym_float_valuesym_bool_valuer$  r  input_	node_nameplaceholder_nodeserialized_noder3  r  r9  r  output_node	first_argr   r  r  s   `                     ri   deserialize_graphz)GraphModuleDeserializer.deserialize_graph	  s   		)* #3"@"@"F"F"H 	D,II@$U%F ((.	 $4#B#B#H#H#J 	D-II<dMR&C ((.	 &6%F%F%L%L%N 	!D/II>oV(G ((.	 %5$D$D$J$J$L 	 D.II=t^T'E ((.	 &6%G%G%M%M%O 	!D/II8/J(M ((.	 			/0"#3#:#:;  	EIAvII.7{{<<"LL--	#'::#9#9)#D  )2 %!!)-=>,<<$$	1 & 4 4I'+zz'='=i'H$ -6$)%%i1AB(:6<<.U   !  !NN66q9==BBOA3i	#'::#9#9)#D /3/E/Ef/M %%e,$':6(%CDDA 	EF  055 	O22?3I3IJ%%ov>	 &.. 	BFII/8NN488@A	B 337|q $KCPWL>Z  ajGGnGjj''033#((+Ii7$B4	?BST  '0nnU&;KU##((+Ii%7$GYGXY  ', ,$, 'KU# JJ$$ 
	CDyy}}U++8%4%U%U"nn 11!& !  2C		-.
	C t$$%* 4S9N9N5O4PPRSWShShRij  zzs  $00AAWXaXlXlXnWops   -W	W?$W::W?r  r3  c           
         dt         fd}|t        v s1|t        j                  j                  j
                  j                  k(  r|j                  r|j                  n"|j                  d   j                  j                  }| j                  |j                        }| j                  j                  d||i |      }| j                  ||       n4|t        j                   j"                  j$                  u rt'        d      t)        |t        j*                  j,                        rm| j/                  |j                        \  }}| j1                  |j2                        }g ||j5                         D ]R  }	t)        |	t        j6                  j8                        s(|	j:                  dk(  s8|	j<                  j?                  |       T |j                  r|j                  }nctA        |j                        dk(  rItC        |j                  d   d      r0tE        |d	d
      r#|j                  d   jF                  j                  nd }| j                  j                  d||||      }| jI                  ||       |j<                  j?                  |       nqt)        |t        j*                  jJ                  gtM                     r|j                  r|j                  }n- ||      r#|j                  d   jF                  j                  nd }| jO                  ||      \  }}| j                  j                  d||||      }| jI                  ||       ntQ        |      rj| j/                  |j                        \  }}|j                  r|j                  nd }| j                  j                  d||||      }| jI                  ||       n?t)        |tR              rd| ddz   dz   dz   nd}
t'        |
d| dtU        |       dz         |j<                  j?                  | j1                  |j2                               tV        jY                  d|j                  |jZ                  |j\                  |j^                  |j<                  ja                  d             |t        j                  j                  jb                  j                  u rzt)        |j\                  d   x}t               s|j<                  d   }t)        |t        jd                        r| jf                  ji                  |jj                  jl                  d|       n|t        j                  j                  jn                  j                  u re|j\                  d   j<                  d   }t)        |t        jp                        r/| jf                  js                  |jj                  jl                         |j:                  dvrd|j<                  vri |j<                  d<   y y y )Nr   c                     t        |       }|j                  }t        |      dk(  xr' t        |d   j                  t
        j                        S )Nr&   r   )r4  r  r  rt   r  ru   r  )r3  r'   r  s      ri   _is_single_tensor_returnzJGraphModuleDeserializer.deserialize_node.<locals>._is_single_tensor_returnZ
  sG    ,V4FnnGw<1$ 
$$e&6&6* rh   r   r  z_deserialize nyi for torch._higher_order_ops.triton_kernel_wrap.triton_kernel_wrapper_functionalrE  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.r8  z" Unsupported target type for node r  r  z)[deserialize_node] %s: %s(%s, {%s}) -> %sr  )r  r  r  ):r   r  ru   opsr>  itemr#  rH  r9  rn   rN  deserialize_sym_op_inputsr8  r  create_nodedeserialize_sym_op_outputsrc  rd  re  rc   rt   rv   r  deserialize_hoo_inputsdeserialize_metadataru  rn  r  rD   ry   r  r?  r  rQ  rR  r  deserialize_outputsrw   r2  deserialize_inputsr  r(  r   r  r  r3  r  r_  rp  _assert_scalarrM   r  guard_or_defer_runtime_assertr   r   sym_constrain_range_for_sizerS   _constrain_range_for_size)r   r  r3  r  rH  r  fx_noder_  ru  r  _additional_msgr  r   r%  s                 ri   r  z(GraphModuleDeserializer.deserialize_nodeY
  s   	 	 hyy~~""**+ #''  $$$,,Q/55== 
 11/2H2HIDjj,,_fdBPTUG++OW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1NPTU $++A.88==   jj,,vtG $$_g>LL)UZZ**K-H-JK
 ##&++ 07 $++A.88==   226?KLD&jj,,vtG $$_g>f667M7MNLD&+:+?+??''TDjj,,vtG $$_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NN@@		G uyy~~BBJJJ,,q/&&u-C#u||,88G JJ77!5.0GLL*+ 6 8rh   r  c           	         t         j                  d|       |j                  dk(  rSt        j                  t        j
                  j                  | j                  |j                  j                        d       S |j                  dk(  rvt        j                  t        j
                  j                  t        j                  |j                  j                  j                        |j                  j                        S |j                  dk(  rt        j                  t        j
                  j                  t        j                  |j                   j                  j                        |j                   j"                  |j                   j$                        S |j                  dk(  rvt        j                  t        j
                  j&                  t        j                  |j(                  j                  j                        |j(                  j*                        S |j                  d	k(  rt        j                  t        j
                  j,                  t        j.                  |j0                  j                  j                  |j0                  j                  j2                  
      |j0                  j4                        S |j                  dk(  rbt        j                  t        j
                  j6                  t        j8                  |j:                  j                  j                        d       S |j                  dk(  r|t        j                  t        j
                  j                  t        j<                  |j>                  j                  | jA                  |j>                  jB                              d       S tE        d|       )Nz[deserialize_input_spec] %sr  r  r  r3  r  rS  r  )r  r  r3  r  r  r  r  r  r  r  zUnknown input spec )#r  r  r   r  r6   r  r  deserialize_argument_specr  r  r  rU   r  rH  r  r  r  r  r  r  r  r  r  r-   r  r  r  r  rW   r  r  r  deserialize_constant_inputrn   r   )r   r  s     ri   deserialize_input_specz.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!:;;rh   oc                    t         j                  d|       |j                  dk(  rSt        j                  t        j
                  j                  | j                  |j                  j                        d       S |j                  dk(  rbt        j                  t        j
                  j                  t        j                  |j                  j                  j                        d       S |j                  dk(  rvt        j                  t        j
                  j                  t        j                  |j                  j                  j                        |j                  j                         S |j                  dk(  rvt        j                  t        j
                  j"                  t        j                  |j$                  j                  j                        |j$                  j&                        S |j                  dk(  rvt        j                  t        j
                  j(                  t        j                  |j*                  j                  j                        |j*                  j&                        S |j                  d	k(  rvt        j                  t        j
                  j,                  t        j                  |j.                  j                  j                        |j.                  j0                        S |j                  d
k(  rvt        j                  t        j
                  j2                  t        j                  |j4                  j                  j                        |j4                  j0                        S |j                  dk(  rbt        j                  t        j
                  j6                  t        j8                  |j:                  j                  j                        d       S t=        d|       )Nz[deserialize_output_spec] %sr  r  r  rS  r  r  r  r  r  r  zUnknown output spec )r  r  r   r  rF   r  r  r  r  r  r  rU   r  rH  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rW   r  r   )r   r  s     ri   deserialize_output_specz/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!;<<rh   r  c           	      
   t         j                  d       t        j                  |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j                  |       c}      S c c}w c c}w )Nz
[deserialize_signature]r  )r  r  r  r7  r  r  r  r  )r   r  r  r  s       ri   deserialize_signaturez-GraphModuleDeserializer.deserialize_signatureO  sd    		-.&&ADQA44Q7QCFCSCSTa$66q9T
 	
QTs   A;B 
rU  rZ  r   r   .r  c           	      H   t         t        d      | a 	 t        j                  d       t	        j
                  d      | _        t        dd| j                        | _        i dt        j                  j                  j                  j                  dt        j                  j                  j                  j                  d	t        j                  j                  j                  j                  d
t        j                  j                  j                  j                   dt        j                  j                  j                  j"                  dt        j                  j                  j                  j$                  dt        j                  j                  j                  j&                  dt        j                  j                  j                  j(                  dt        j                  j                  j                  j*                  dt        j                  j                  j                  j,                  dt        j                  j                  j                  j.                  dt        j                  j                  j                  j0                  dt        j                  j                  j                  j2                  dt        j                  j                  j                  j4                  dt        j                  j                  j                  j6                  dt        j                  j                  j                  j8                  dt        j                  j                  j                  j:                  t        j                  j                  j                  j<                  t        j                  j                  j                  j>                  t        j                  j                  j                  j@                  t        j                  j                  j                  jB                  t        j                  j                  j                  jD                  d| _#        i | _$        tK        |      | _&        | jO                  |jP                        | _(        i | _)        tU               | _+        d\  }}d tX        jZ                  tX        j\                  fD        \  }}	|r|j_                         D ]  \  }
}|j`                  }t	        jb                  te        |tf               |jh                        | jR                  |
<   |
jk                  |      r$tm        |
to        |      d        }tq        ||      }|
jk                  |	      stm        |
to        |	      d        }tq        ||      } ts        |dz         D ]!  }| j                  xjt                  dz  c_:        # ts        |dz         D ]!  }| j                  xjv                  dz  c_;        # |to        |      dkD  rtK        |      | _<        nd | _<        | j{                  |j|                         t        | jx                        5  | j                  |j                        }d d d        t        j                  | j                  | j|                        }i }|j                  j                  d      x}rt        j                  |      |d<   t        |d      r9i |d<   |j                  j_                         D ]  \  }}|j                  |d   |<    ||_L        t        j                  || jP                  | jH                  tK        |      | jL                  | jx                        d a S # 1 sw Y   xY w# d a w xY w) Nz$_CURRENT_DESERIALIZER is already setz
[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   .   K   | ]  }t         |     y wrl   )r   ru  s     ri   rz   z6GraphModuleDeserializer.deserialize.<locals>.<genexpr>  s      @"#
1@s   r&   r   r  r  )r,  r  r  ra  r   r   r   )Or   r   r  r  r   ShapeEnvr  r   r  ru   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  r  r  r   rh  r    r  r  rm   r,  r!   r$  r   r-  r  r   r  maxrangeunbacked_symfloat_counterunbacked_symint_counterr   r  r  r   deserialize_module_call_graphr  r  _create_graph_module_for_exportr  ru  rp  r   r   rQ  r  r  r  r`   rb  )r   rU  rZ  r   r   r  count_unbacked_symfloatcount_unbacked_symintunbacked_symfloat_prefixunbacked_symint_prefixro   r  r,  r  r  r  r,  r  r  type_fieldss                        ri   deserializez#GraphModuleDeserializer.deserializeV  sI    !, !GHH $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9 
NEArHHE3B3N3N)%&92884D--a0 ||$<=#&>"?"A BC256Mq2Q/&<=#&<"="? @A034I10M-
N 2Q67 >88A=8>0145 <66!;6< )c..AA.E&@&P#&*#""#:#@#@A78K8KL $($F$F+==%! ==dkk4::VLD099==hGGvG!%F!3X.0LM5712 -GGMMOS @F@R@RD56u=	S
 !%L*11).."3!%!;!;56KL..#22 2  %)!5 4 %)!s,   U9^ C!^ 0^D^ ^^ ^!rH  r  c                     || j                   v rt        d| d      ||_        || j                   |<   d|j                  v rt	        d| d      | j
                  |   |j                  d<   y )NzNode z& has already been deserialized before.r  zfx_node z already has 'val' in meta)rd  rc   rH  r  r   re  )r   rH  r  s      ri   r  z$GraphModuleDeserializer.sync_fx_node  sv    4/// 5.T!UVV-4$$T*GLL  8D61K!LMM"::4@Urh   c                 ,     t         fd|D              S )Nc              3   T   K   | ]  }j                  |j                         ! y wrl   )r  r  )rx   inputr   s     ri   rz   zDGraphModuleDeserializer.deserialize_sym_op_inputs.<locals>.<genexpr>  s      K5T++EII6Ks   %()r   )r   r8  s   ` ri   r  z1GraphModuleDeserializer.deserialize_sym_op_inputs  s    KFKKKrh   c                    t        |      j                  }|j                  D ci c]  }|j                  |j                   }}|j                  D ci c](  }|j                  | j                  |j                        * }}g }t               }|D ]  }	|	j                  |v r||	j                     }
||	j                     }|t        j                  k(  r|j                  |
       U|t        j                  k(  r/t        j                  |	j                        s|
||	j                  <   |	j                          xr |	j                   }|r|j                  ||	j                            t        j                  |	j                        r|	j                  rt!        d|	j                   d      t#        |      dkD  r2t               }|j%                  t'        |j)                                      |j                  ||	j                            ||	j                  |v s||	j                     ||	j                  <    t+        |      |fS c c}w c c}w )Nzschema_arg z should not be kwarg_onlyr   )r4  r(  r8  rH  r  r  r  r   r)   r  rq  r  keyword	iskeywordhas_default_valuer3  r   r  r9  rA  rn  r   )r   r3  r  schema_argsr  argument_kindsactual_argsr  r_  r6  r  r  is_positionals                ri   r  z*GraphModuleDeserializer.deserialize_inputs  s   -f5??>M>T>TUU%**ejj0UU )//
 JJ..uyy99
 
 (3% 	KJ+-!*//2%joo6<222KK$\111':K:KOO; /2F:??+ 0022P:;P;P7P  K
89"":??3(((%joo%66OP  v;?(]FKKV]]_ 56K
89??k1.9*//.JF:??+=	K> T{F""M V
s   I-Ir8  c                 0   g }i }|D ]  }|j                   t        j                  k(  s|j                  dk(  r+|j	                  | j                  |j                               Z| j                  |j                        ||j                  <    t        |      |fS )zO
        For deserializing HOO inputs since HOOs do not have a schema.
        r8  )r  r)   r  rH  rq  r  r  r   )r   r8  r  r_  r  s        ri   r  z.GraphModuleDeserializer.deserialize_hoo_inputs  s      	IF{{l5559JD226::>?&*&<&<VZZ&Hv{{#		I
 dV$$rh   inpc           	      z	    j                   }j                  }|dk(  ry |dk(  r# j                  j                  j                     S |dk(  rt
        j                     S |dk(  rt        j                     S |dk(  rt        j                     S |dk(  rt        |t              s!t        dt        |      j                          j                         5   j!                  |j"                         t%        j&                   j(                   j"                        }d d d         j(                  j+                  |j                          j"                  j-                  d|j                  |j                  	      S |d
k(  rt/        j0                        S |dk(  rj2                  S |dk(  rj4                  S |dk(  rj6                  S |dk(  rj8                  S |dk(  r4t;        j<                  j>                  j<                  j@                        S |dk(  r jC                  jD                        S |dk(  r jC                  jF                        S |dk(  r jC                  jH                        S t        |tJ              rF|dk(  r3|jM                         D ci c]  \  }}| jO                  |       c}}S tQ        d|       t        |tR              rtU        |      dk(  rg S |dk(  r(|D cg c]  } j                  |j                      }}|S |dv rtS        |      S |dk(  r|D 	cg c]  }	tW        |	       c}	S |dk(  r|D 
cg c]  }
tS        |
       c}
S |dk(  r7|D cg c])  }|D cg c]  } j                  |j                      c}+ c}}S |dv r|D cg c]  } jC                  |       c}S |dk(  r fd}tS        tY        ||            S tQ        d       |dk(  rhjZ                  j                   j                  v r# j                  jZ                  j                     S  j\                  jZ                  j                     S |d k(  r j_                  j`                        S tQ        d       # 1 sw Y   pxY wc c}}w c c}w c c}	w c c}
w c c}w c c}}w c c}w )!NrX  r  r  r  r  rF  zexpected GraphArgument, got rE  rS  r  r   r   r   rL  rV  r  rP  rR  rY  zUnknown dict type: r   r  )r[  r\  rZ  r]  r  r  rx  )ri  ro  rk  r~  c                     | j                   dk(  ry | j                   dk(  r#j                  | j                  j                     S t	        d       )NrX  r  Unhandled argument )r   rd  rn   rH  rc   )r  r  r   s    ri    deserialize_optional_tensor_argszSGraphModuleDeserializer.deserialize_input.<locals>.deserialize_optional_tensor_args_  sJ    vv*#;.#;;AGGLLII,/B3%-HIIrh   r  r  r  )1rn   r   rd  r  rH  r   r  !_SERIALIZE_TO_TORCH_MEMORY_FORMATr  _SERIALIZE_TO_TORCH_LAYOUTr  rt   r3   r   rd   ri  r  r  r  r  r  register_moduler  r   r  r   r   r   rL  r  rV  rT  rU  deserialize_sym_argumentr  rP  rR  r  rm   r  rc   rA  r  r   r   r  r   rs  r  )r   r  rn   typ_	submodulero   rp   r  resultdimsfloatsr  r  s   ``           ri   r  z)GraphModuleDeserializer.deserialize_input  sx   		xx9 [ //0B0BCC%%,S-?-?@@''4S5I5IJJ[ -cmm<<Ze]3$24;3G3G2HI  '') X&&u{{3>>t{{DJJW	X 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A411!44OO$':4&%ABBt$5zQ	%LQRS$66sxx@RRKKE{"'056d66))389V99,, '," HRRT11#((;R  IIFKLs55c: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!<==YX X< P S 79 S
 MsC   ARR4 R0R#R(-	R26 R-R2'R8R-R2c                 `   |j                   dk(  rt        |j                        S |j                   dk(  rt        |j                        S |j                   dk(  rt        |j                        S |j                   dk(  rt        |j                        S |j                   dk(  ry t        d| d      )Nr   r   rL  r   rX  zUnhandled constant argument z to deserialize)
r   r   r   r   r   r(  rL  r   r   rc   )r   r  s     ri   r  z2GraphModuleDeserializer.deserialize_constant_inputt  s    88xszz?"XX#&&XX$s}}%%XX"$$XX" #?uO!TUUrh   c                    t        |t              rC|j                  dk(  r|j                  S |j                  dk(  r| j                  |j
                     S t        |t              rC|j                  dk(  r|j                  S |j                  dk(  rl| j                  |j
                     S t        |t              rC|j                  dk(  r|j                  S |j                  dk(  r| j                  |j
                     S t        d|       )Nr   rN  r   r   z Unknown symbolic argument type: )rt   rT   r   r   rd  rN  rR   r   rN   r   rc   )r   sym_args     ri   r  z0GraphModuleDeserializer.deserialize_sym_argument  s    g~.||x'~~%*33GOODD!12||z)'''*33GOODD1||y(&*33GOODD?yIJJrh   c                 j    | j                  |j                  d   j                  j                  |       y )Nr   )r  r9  rn   rN  )r   r  r  s      ri   r  z2GraphModuleDeserializer.deserialize_sym_op_outputs  s)    /11!4::BBGLrh   c                     t        |j                        dk(  ry t        |j                        dk(  rEd|j                  v r7t        |dd      s*|j                  d   j                  dk7  r fd} |||      S t        |j                        dk(  rP|j                  d   j                  dk(  r4 j                  |j                  d   j                  j                  |       y t        |j                        dk(  rft        |j                  d   j                  t        t        t        f      r4 j                  |j                  d   j                  j                  |       y t        |j                        dk(  rc|j                  d   j                  dk(  rGd |j                  d	<   |j                   j                   j#                  |j                         d
       y  j%                  ||       y )Nr   r&   ztorch.ops.higher_orderr  TrX  c                    g }d }| j                   d   j                  dk(  r| j                   d   j                  }nKt        | j                   d   j                  t
        t        t        f      r| j                   d   j                  }j                  | j                        }|t        d      j                  |||d|       t        |      |j                  d<   |j                  |j                  <   y )Nr   r  zarg should not be Noner  )r9  r   r  rt   rn   rT   rN   rR   r  ru  r   generate_getitemr   r  rd  rH  )r  r  r  r  deserialized_metadatar   s        ri   #_deserialize_hop_with_single_returnzXGraphModuleDeserializer.deserialize_outputs.<locals>._deserialize_hop_with_single_return  s    &("**1-22kA)11!4>>C#++A.44#_6FG *11!4::C(,(A(A#,,)% ;()ABB%%haAVW&+HoU#=D,,W\\:rh   r  r  _unused)r  r9  r3  rR  r   r  r  rH  rt   rn   rT   rN   rR   rN  r  _renamer  _target_to_strdeserialize_multiple_outputs)r   r  r  r-  s   `   ri   r  z+GraphModuleDeserializer.deserialize_outputs  s   &&'1, ''(A-(O,B,BBO-JDQ''*//9<* 7PP ''(A-''*//;>o55a8BBGGQ(()Q.:##A&,,_.>?4
 o55a8>>FFP''(A-''*//9< #'GLLOOtzz88HIQR))/7Crh   r  r  r,  c                    t        |t              r|j                  }nQt        |t              r|j                  }n4t        |t
              r|j                  }nt        dt        |             | j                  j                  dt        j                  ||f|      }| j                  ||       |j                  | j                  |          |j                  j!                  |       y )Nz+generate_getitem got unknown argument type r  rS  )rt   rU   rH  rT   rN  rR   r   r   r  r  r  r  r  rq  re  r  r?  )r   r  r  r  r  r,  rH  individual_outputs           ri   r+  z(GraphModuleDeserializer.generate_getitem  s     c>*88D^,;;D-.;;D =d3i[I  !JJ22cN	 3 
 	$ 1244T:; 	%%&;<rh   c                    t        |      D ]  \  }}t        |t        t        t        f      r| j                  |||||       8t        |t              s!t        dt        |      j                         |j                  dv r | j                  |||j                  ||       |j                  dv r| j                  j                  dt        j                  ||f      }|j                  g        | j!                  |d   ||j                  |       |j"                  j%                  |       |d   |j"                  d<   3|j                  dk(  rl| j                  j                  dt        j                  ||fd      }|j                  d        d |j"                  d<   |j"                  j%                  |       t'        d	|        y )
Nexpected Argument, got )r  r  rP  )r  ri  rk  r[  r\  r]  rZ  ro  r  r  r  rX  rS  z Unimplemented node output type: )r  rt   rU   rT   rR   r+  r(   r   r   rd   rn   r  r  r  r  rq  generate_getitemsr  r?  NotImplementedError)	r   r  r  r  r,  r  r  list_outputr3  s	            ri   r6  z)GraphModuleDeserializer.generate_getitems  s    "$ -	THC#@PQR%%gsC1F c8,$'>tCy?Q?Q>R%STTxxFF%%gsyy#7L  	 	 #jj44#$$cN
 #&&RL+syy:O   ''(=>*22,  'Y&$(JJ$:$:#$$cN"	 %; %! %04!&&u-!&&--.CD),LSE*RSS[-	Trh   c                    | j                  |j                        }g }t        |j                        dk(  rt	        |j                  d   j
                  t              s8t        dt        |j                  d   j
                        j                         t	        |j                  d   j
                  d   t              s;t        dt        |j                  d   j
                  d         j                         | j                  |||j                  d   j                  |       n| j                  |||j                  |       t        |      |j                  d<   || j                  |j                   <   y )Nr&   r   expected list, got r  r  )r  ru  r  r9  rt   rn   rA  r   r   rd   rU   r6  r  r   r  rd  rH  )r   r  r  r,  r  s        ri   r1  z4GraphModuleDeserializer.deserialize_multiple_outputs%  sV    !% 9 9/:R:R S !&&'1,o55a8>>E$)$/F/Fq/I/O/O*P*Y*Y)Z[  o55a8>>qA>R$3D9P9PQR9S9Y9YZ[9\4]4f4f3gh  ""''*55%	 ""'?#:#:<Q
 $HoU5<$$W\\2rh   ru  c                     i }|j                  d      x}r||d<   dt        f fd}|j                  d      x}r3d d t        fd|j                  t              D              }||d<   |j                  d      x}rNg }|j                  t              D ]/  }	|	j                  d	      \  }
}|j                  |
 ||      f       1 ||d<   |j                  d
      x}r!t        |j                  t                    |d
<   |j                  d      x}rt        j                  |      |d<   |j                  d      x}r' j                  t        j                  |            |d<   |S )Nr  rj  c                 <   d }| j                  d      r%t        j                  }| j                  d      dd  }n=| j                  d      rt        }| j                  d      dd  }nj	                  |       S |}|D ]  }t        ||      s| c S t        ||      }  |S )Nztorch.nnr  r$   ru   r&   )r  ru   r   rl  rs  rQ  rR  )rj  r  rr  r3  rH  r   s        ri   deserialize_meta_funczKGraphModuleDeserializer.deserialize_metadata.<locals>.deserialize_meta_funcN  s    F ++J7*;*A*A#*Fqr*J'"--g6*;*A*A#*Fqr*J'001BCCF/ 3vt,,,$VT2F	3
 Mrh   r  c                     | ||ffS rl   rg   )r  r  r  s      ri   import_nn_module_stackzLGraphModuleDeserializer.deserialize_metadata.<locals>.import_nn_module_stackc  s    T2J&rh   c                 (   g }d\  }}d\  }}t        |       D ]>  \  }}||v r|dz  }||v r|dz  }|dk(  s |dk(  s&|j                  | ||        |dz   }@ |j                  | |d         t        |      dk7  rt        dt        |             |S )N)r   r   )z[(z)]r&   r  r      z/expected metadata_split to return 3 parts, got )r  rq  r  r   )ru  r   startrW  r  rK  endcs           ri   metadata_splitzDGraphModuleDeserializer.deserialize_metadata.<locals>.metadata_splitg  s    q!1'1 (FCAvQaQca1f

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

8EF+,s8q=(I#c(T  
rh   c              3   4   K   | ]  }  |         y wrl   rg   )rx   r  r?  rE  s     ri   rz   z?GraphModuleDeserializer.deserialize_metadata.<locals>.<genexpr>z  s#      # 't(<=#s   r  r  r  r  r  )
rp  r(  r  rl  r  rq  r   r   r   _deserialize_from_node)r   ru  r  r  r=  nn_module_stack_strr  source_fn_st_strr  source_fn_strrH  
target_strtorch_fn_str
custom_strfrom_node_strr?  rE  s   `              @@ri   r  z,GraphModuleDeserializer.deserialize_metadataI  s    ",,}55;5!,C	S 	& #+,,/@"AAA'& # #/55lC# O &5C!"'||,=>>>L!1!7!7!E O#0#6#6s#; j##T+@+L$MNO &2C!"#<<
33<3#L$6$6|$DEC
O!h//:/ JJz2CM$LL55=5#::4::m;TUC
rh   from_node_datac                     |yt        |t              s!t        dt        |      j                         |D cg c]  }t        j                  |      x}| c}S c c}w )z@
        Deserialize from_node metadata from JSON data.
        Nr:  )rt   rA  r   r   rd   r   
_from_dict)r   rO  fn_dictr#  s       ri   rG  z.GraphModuleDeserializer._deserialize_from_node  sn     !.$/ #6tN7K7T7T6U!VWW *
)44W==J 
 	
 
s    Ar  c                 b   t         j                  d|       |j                  dk(  r*t        j                  |j
                  j                        S |j                  dk(  r*t        j                  |j                  j                        S |j                  dk(  r*t        j                  |j                  j                        S |j                  dk(  r:t        j                  |j                  j                  | j                  |            S t        j                  d| j                  |            S )	Nz[deserialize_argument_spec] %sr  rS  r  rP  r  r  r8  )r  r  r   r  rU   r  rH  rT   r  rN  rR   rP  r  r  r  r  s     ri   r  z1GraphModuleDeserializer.deserialize_argument_spec  s    		2A666[ $$!++*:*:;;VV|#$$!,,*>*>??VV~%&&ANN,B,BCCVV&&&__))1G1G1J  &&Bd6L6LQ6OPPrh   r	  c           	      \   t        j                  |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j                  |       c}t        |j                        t        |j                        |j                  x}r|      S d       S c c}w c c}w )Nr  )	r  rA   r8  r  r9  r   r  r  r  r  s       ri   !deserialize_module_call_signaturez9GraphModuleDeserializer.deserialize_module_call_signature  s     %%;P;W;W67..q1 <Q;X;X67..q1 ##8#@#@A#$9$B$BC#8#J#JJ%J
 	
 RV
 	
s   B$B)
r  c           	          t         j                  d       |D cg c]J  }t        j                  |j                  |j
                  r| j                  |j
                        nd       L c}S c c}w )Nz 
[deserialize_module_call_graph]r  )r  r  r  r@   r  r  rU  r  s      ri   r  z5GraphModuleDeserializer.deserialize_module_call_graph  sg     			56 +

  II  ::5??K

 
	
 

s   AA,)r   Nrl   )NN)Srd   re   rf   dataclassesr
   rb  r   r	   r   ri  r(  ro  rs  r   r   r   r   r  r|  rS   ru   r  rQ   r  rM   r  rV   r   r   r-   r  r  r  rD   r  r2   r  r   r  r6   r  rF   r  r5   r7  r  r4   r  r  r   r   r   r   r!   r	  r  r  r  rA  rB   r  r(   r  r,   r  r  r  r  rU   rT   rR   r+  r6  r1  r  r   rG  r8  r  rA   rU  r@   r  rg   rh   ri   r`   r`     su   O O O( 8D>  0- -c 4 @D/-/-#&:#5#</-	/-bV ell0B .x EENN4J g $2F  
 
0
			
P%((--#2E2L P(E% EEHHNN ENJ1 J1h J14 J1X3<	 3<bll 3<j3= 3= 3=j
 
B<S<S 
 NRv)!,v)  $C$56>v) S>E)	v)
 eELL#$56S#XFG

v) #3(C(C#CDtKv) 
v)pA Auxx}} AL(#$ (#T%T--@ %`>X `># `>DVm V VK$M$ M M8D4 8D%((-- 8Dt= = n,/??	=
 =  $CH~=<4T 4T
  $CH~4Tl"=#"=.3hhmm"=	"=HHT#s(^ HS#X HT
"4S>2T9
	j	D	 
$Q8 Q Q
%8
			
"
!%o!6
	b  	!
rh   c                   X   e Zd Zddeeef   dz  fdZdeeej                  f   deee	j                  f   dee	j                  ef   fdZ	 ddd	d
edeeej                  f   ez  deeej                  f   ez  deeej                  df   eeef   f   ez  dz  dej                  f
dZy)ra   Nexpected_opset_versionc                     i | _         |r| j                   j                  |       d| j                   vr,t        j                  j	                         | j                   d<   y y r=  )rY  r?  ru   r  r@  )r   rY  s     ri   r   z$ExportedProgramDeserializer.__init__  sR    68#!''../EF44427((2T2T2VD''/ 5rh   r  r}  r   c                     t         j                  d       i }|j                         D ]K  \  }}|j                  |      x}rt         j                  d||       |||<   6t         j	                  d|       M |S )Nz 
[deserialize_range_constraints]z([deserialize_range_constraints] %s -> %sz;Symbol %s did not appear in the graph that was deserialized)r  r  rm   rp  r  )r   r  r}  r*  ro   rp   symbols          ri   deserialize_range_constraintsz9ExportedProgramDeserializer.deserialize_range_constraints  s    
 			56(..0 	DAq.22155v5		DaK,-!&)QST	 ! rh   F_unsafe_skip_version_checkr~   r   r   r   .c                   t        |t              s!t        dt        |      j                         |j
                  }|j                  t        d   k7  r@|j                  dk(  r|j                  dk(  s"|s t        d|j
                   dt         d      |j                  j                         D ci c]M  \  }}|t        j                  t        |j                  t                t        |j"                  t                     O }	}}t%               j'                  |j(                  ||||	      }
| j+                  |	|
j,                        }t/        j                  |
j(                  |
j(                  j0                  |
j2                  |
j4                  ||
j6                  |
j8                  |
j:                  |j<                  D cg c]  }t?        |       c}	      }|j@                  |_!        tD        jG                  d|       |S c c}}w c c}w )Nexpected ExportedProgram, got r   zSerialized schema version z+ does not match our current schema version r  )	rootr  r  r   r*  r  r   r   rJ  z
[deserialize]: %s)$rt   r/   r   r   rd   rI  rF  rK   rG  rc   r*  rm   r   r!   r$  min_valr   max_valr`   r	  r,  r]  ra  r  r  r  r   r  r   r   rJ  r   rL  rR  r  r  )r   r~   r   r   r   r_  versionro   rp   r  resr*  r"  s                ri   r	  z'ExportedProgramDeserializer.deserialize  s    *O< 06F1G1P1P0QR  #11 ==N1--MMQ7==A#5-$01A1P1P0Q RAAO@PPQS  )::@@B 

 1	 **!!))fW5!!))V4  
  
 &'33)) 
 !>>   

 ##!!""((MM~~/!33--mm1A1K1KLA}Q'L

 /::		'0A 
8 Ms   1AH>Hrl   )rd   re   rf   r  r(  r   r   r   r!   r   r   r]  r/   ru   r  r   r   r   r  r	  rg   rh   ri   ra   ra     s
   WtCH~/D W!"3(C(C#CD!  $C$56! 
ellK'	(	!0 ; $);); ell*+e3; U\\)*U2	;
 eELL#$56S#XFG

; 
		;rh   ra   c                        e Zd Z fdZ xZS )r   c                     t        |t              r|j                  S t        |t              r$t	        j
                  |      j                  d      S t        | !  |      S Nr   )	rt   r   rn   r   base64	b64encoder   superr#  )r   r4  	__class__s     ri   r#  zEnumEncoder.default/  sL    c4 99c5!##C(//88ws##rh   )rd   re   rf   r#  __classcell__)rm  s   @ri   r   r   .  s    $ $rh   r   c           
         t        | t              r!| j                  t        | j                        iS t        j                  |       rKt        j                  |       D ci c],  }|j                  t        t        | |j                              . c}S t        | t              r| D cg c]  }t        |       c}S t        | t              rt        d | D              S t        | t              r-| j                         D ci c]  \  }}|t        |       c}}S t        | t              rA| t        j                   k(  ry| t        j                    k(  ryt        j"                  |       ry| S | S c c}w c c}w c c}}w )Nc              3   2   K   | ]  }t        |        y wrl   )r   r  s     ri   rz   z%_dataclass_to_dict.<locals>.<genexpr>B  s     8q'*8s   Infinityz	-InfinityNaN)rt   r\   r   r   rn   rW  is_dataclassr  rH  rR  rA  r   r  rm   r   r  r"  isnan)r4  fr  ro   rp   s        ri   r   r   7  s4   #v,SYY788		!	!#	& !'',
 FF&wsAFF';<<
 	
 
C	/23!"1%33	C	8C888	C	58YY[ATQ%a((AA	C	$((?TXXIZZ_J
)

 4 Bs   1E-&E2 E7r4  c                 j    t        j                  t        |       t        d      j	                  d      S )NF)r   	allow_nanr   )r   r   r   r   r   )r4  s    ri   _to_json_bytesrx  R  s+    ::(-;%PWW rh   TrA  r~   r;  rB  rC  rD  c                   t        | j                        5  t        ||      j                  | |||      }d d d        t	        j
                  t              s+t        dt        |j
                        j                         t        |j
                        }t        ||j                  |j                  |j                        }|S # 1 sw Y   xY w)NrA  ra  )r   r   r_   r]   rt   r~   r/   r   r   rd   rx  r}   r   r   )	r~   r;  r   rB  rC  rD  serialized_program
json_bytesr   s	            ri   r]   r]   X  s     
00@0O0O	P 
6?

)!5 3%=	  
 	
 (99?K,T2D2U2U-V-_-_,`a
 	
   2 C CDJ!%%$$))	H O+
 
s    CCc                     t        | t              rt        t        | d       }||S t        | t        j
                        rt        | j                        S | S rl   )rt   r(  rR  r'   typing
ForwardRef_resolve_schema_cls__forward_arg__)r   resolveds     ri   r  r  y  sK    #s63-O#v(()"3#6#677Jrh   c           	         t        |       } t        | t              rt        d|  d      t	        j
                  |       t        u rt        | j                  |      S t	        j
                  |       t        j                  t        j                  fv rlt        d       t	        j                  |       v rL|y t	        j                  |       }t        |      dk7  rt        dt        |             t        |d   |      S t        | t              r#t        | t               rt        |t"              s!t        dt        |      j$                         t        |      dk7  rt        dt        |             t'        t)        |j+                                     }t'        t)        |j-                                     }t        |t              s!t        d	t        |      j$                         t	        j.                  | t1        t2              
      }||   } | j4                  di |t        ||      iS t7        j8                  |       rpi }t	        j.                  | t1        t2              
      }t7        j:                  |       D ]*  }|j<                  }	|	|vrt        ||	   ||	         }
|
||	<   ,  | di |S t        |t>              rBt        |      dk(  r|S t	        j                  |       d   }|D cg c]  }t        ||       c}S t        |t"              rFt	        j                  |       d   }|jA                         D ci c]  \  }}|t        ||       c}}S | tB        u rtC        |      S |S c c}w c c}}w )NzUnresolved class type: 'z'.r$   zexpected 2 type args, got r   zexpected dict, got r&   zexpected dict with 1 key, got zexpected str key, got )globalnsrg   )"r  rt   r(  r   r}  
get_originr   r   
__origin__Uniontypes	UnionTyper   get_argsr  
issubclassr\   r  rd   rl  rm  rk  rn  get_type_hintsvarsr'   r   rW  rs  r  rH  rA  rm   r   )r   dataty_argsr  _value
type_hints
field_typer  ru  rH  new_field_objd_typerj   v_typero   rp   s                   ri   r   r     s   
c
"C#s7uB?@@*!#..$77&,,!@@TF		F <//#&w<1 #=c'l^!LMM!'!*d33	C	:c6#:$% #6tDz7J7J6K!LMMt9> #A#d)!MNNT$))+&'d4;;=)*%% #9$u+:N:N9O!PQQ**3fF
&
szzLU$6z6$JKLL		!	!#	&**3fF
 ##C( 	)A66D4.z$/?dLM(F4L	) }V}	D$	t9>K%a(7;<!"61-<<	D$	%a(=AZZ\JTQ%fa00JJ	T{K = Ks   2M3M8r   artifact_bytesc                 j    |j                  d      }t        j                  |      }t        | |      }|S ri  )r   r   r   r   )r   r  artifact_strartifact_dictartifact_dataclasss        ri   _bytes_to_dataclassr    s3    !((1LJJ|,M+C?rh   Fr^  rY  c                :   t        | j                  t              s+t        dt	        | j                        j
                         t        t        | j                        }t        |      j                  || j                  | j                  | j                  |      S )Nzexpected bytes, got r^  )rt   r~   r   r   r   rd   r  r/   ra   r	  r   r   r   )r   rY  r_  serialized_exported_programs       ri   r	  r	    s     h//7"4(A(A#B#K#K"LM
 	
 #622# ''=>JJ##= K  rh   c                 z    dt         fdfd fd} |j                        }t        |      t        j                        k7  r-t        dt        j                         dt        |             i fd}fd} D ]  } ||        |D ]  }	|	j                  D ]  }
 ||
         |D ]&  }	|	j
                  D ]  } ||j                          ( |D ]  }
 ||
        |D ]  }	|	j                  j                           t        t        j                  j                         t        j                  d	      
            }t        t        j                  j                         t        j                  d	      
            }t        t        j                   j                         t        j                  d	      
            }t        t        j"                  j                         t        j                  d	      
            }t        t        j$                  j                         t        j                  d	      
            }d	}|D ]  }|j
                  D ]  }|j                  }|j&                  dk(  st)        |j*                  j,                  j
                  |j*                  j,                  j                  |j*                  j,                        \  |j*                  _        }d| |j*                  _        |dz  }  t1         ||||||j2                  |	      fS )Nr  c                    | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   d	k(  ry | j                   d
k(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  r| j
                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  r| j                  S t        d|        ) NrX  r  r  r   r[  r   r\  rL  r]  rV  r  ri  rP  rk  r  r  r  r  r   rZ  rR  ro  rF  r~  r  r  r  r  rY  rx  z+Unknown input type to the ExportedProgram: )r   r  r  r  ri  rP  rk  rR  ro  r~  r  rx  r   r|  s    ri   _get_argumentz*_canonicalize_graph.<locals>._get_argument  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''VV..VV**&&& #Nqc!RSSrh   c                     t        |t              s!t        dt        |      j                         t        j                  |  |             y )Nr5  )rt   r(   r   r   rd   r  tree_map)ru  r  r  s     ri   for_argsz%_canonicalize_graph.<locals>.for_args  s>    !X& #:47;K;K:L!MNN=+,rh   c                 n    t          G d d             }t               i i g i g }dt        d z  fdD ]  }fd} ||        t               D ]2  \  }fd}|j                  D ]  } ||         |g d      <   4 t               D ]3  \  }fd}	|j
                  D ]  } |	|j                          5 fd	}
fd
D ]  } |
|        dt        f fd}j                         D ]  \  }|j                  dk(  s |        t              dkD  rt        j                        \  }}    }|j                  D ]  } |
|        |j                  |       vrt        d d         j                  D ][  }|   }|j                  dk  rt        d|j                         |xj                  dz  c_	        |j                  dk(  sT ||       ]    j                  j!                          t              dkD  r|S )Nc                   (    e Zd ZU ee   ed<   eed<   y)6_canonicalize_graph.<locals>.sort_nodes.<locals>.EdgesoutsinsN)rd   re   rf   rA  r   r   rg   rh   ri   Edgesr    s    s)OHrh   r  r   c                    | y t        | t              r| j                  S t        | t        t        t
        f      r8| j                  dk(  r| j                  S | j                  dv ry t        d|        t        | t              rC| j                  dk(  r| j                  j                  S | j                  dk(  ry t        d|        t        | t              r| j                  S t        d|        )NrN  )r   r   r   Unknown argument type: r  rX  zUnknown optional tensor type: )rt   rU   rH  rT   rN   rR   r   rN  r   rE   r  r-   r|  s    ri   r  z9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_name+  s    y!^,vvAAQRS66Y&99$VV@@(+B1#)FGGA5666[(;;+++VVy((+I!)MNNA01vv$'>qc%BCCrh   c                 >     |       x}rj                  |       y y rl   )r   )r  r   r  graph_inputss     ri   	add_inputz:_canonicalize_graph.<locals>.sort_nodes.<locals>.add_inputE  s%     #1# $$Q' $rh   c                 L     |       x}r|v rt        d|d      |<   y y )Nsymbol z already in def_table)r   )r  r   	def_tabler  r  s     ri   add_defz8_canonicalize_graph.<locals>.sort_nodes.<locals>.add_defM  s<     #1#I~,wqe;P-QRR#&IaL $rh   r   c                      |       x}rY|v ry |vr|vrt        d|d      y |   }|   j                  j                            xj                  dz  c_        y y )Nr  z! not in def_table or graph_inputsr&   )r   r  rq  r  )	r  r   r  r   r  edgesr  r  r  s	      ri   add_edgez9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_edgeZ  s     #1#I~	)L0"0")!.O P#  #A,C#JOO**3/#JNNa'N $rh   c                 ^     |       x}r"|v rt        d|d      t              |<   y y )Nr  z already in rank)r   r  )r  r   r  ranks     ri   add_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_rankk  s@    QKq9(71%7G)HIId)Q  rh   c                 ,     |       }|r	|vr|   S y)Nr  rg   )r  r   r   r  r  s     ri   get_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_rankq  s"    AQi'Awrh   r  c                     fd}|    }|j                   D cg c]   }|j                   ||j                        f" }}t        j                  |j
                  || f       y c c}w )Nc                 (    g  fd|        S )Nc                 2    j                   |             S rl   )rq  )r  r  rankss    ri   r  zc_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks.<locals>.<lambda>~  s    5<<#< rh   rg   )r  r  r  r  s    @ri   	get_rankszQ_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks|  s    <a@rh   )r8  rH  r  heapqheappushr3  )	r  r  r   r  	args_rank
candidatesr  r  r:  s	        ri   add_candidatez>_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate{  s[    
 :D=A[[I!&&)AEE"23IIINN:Y'DE Js   %A&zidx z not in edgesze.ins should be > 0, got r&   )r
   r   r(  r  r9  r8  r  r   rm   r  r  r  heappoprq  r   r  clear)r:  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   `             @@@@@@@@ri   
sort_nodesz'_canonicalize_graph.<locals>.sort_nodes  sk   		 	 
	 "%$&	"$IK
!	D3: 	D0  	#A( Y"	# #5) 	&IC' \\ %!$% r1E#J	& #5) 	*IC( ( [[ *155)*!	*&	$	  	"AXq!	"	Fs 	F 	F kkm 	#FCuuzc"	# *o!j1IAq#:D\\ &1%&JJt%$tC5%>??c
 ($K55A:(+DQUUG)LMM
55A:!$'( #JOO!!# *o!" 
rh   z	expected z sorted nodes, got c                    fd}| y t        | t              r# || j                  j                        | _        y t        | t              r3| j
                  dk(  r# || j                  j                        | _        y y t        | t              r3| j
                  dk(  r# || j                  j                        | _        y y t        | t              r3| j
                  dk(  r# || j                  j                        | _        y y t        | t              r# || j                  j                        | _        y t        d|        )Nc                     dt               }| v rt        d| d      || <   | |vrt        d| d      |j                  |       ||<   |S )Nr  z	arg_name z already in name_tablez not in values)r  r   pop)r  rn  new_name
name_tables      ri   r/  z8_canonicalize_graph.<locals>.rename_def.<locals>._rename  so    3z?+,H:%$y<R%STT#+Jx v%$yN%KLL%zz(3F8Orh   rN  r  )rt   rU   rH  r;  rT   r   rN  r<  rR   r>  rN   r=  r-   r@  r   )r  r/  r  r  s     ri   
rename_defz'_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#!>??rh   c                 &   | y t        | t              r,j                  | j                  | j                        | _        y t        | t        t
        f      r<| j                  dk(  r,j                  | j                  | j                        | _        y y t        | t              r<| j                  dk(  r,j                  | j                  | j                        | _        y y t        | t              rZ| j                  dk(  rJj                  | j                  j                  | j                  j                        | j                  _        y y t        | t              r,j                  | j                  | j                        | _        y t        d|        )NrN  r  r  )rt   rU   rp  rH  rT   rR   r   rN  rN   rE   r  r-   r   )r  r  s    ri   replace_usez(_canonicalize_graph.<locals>.replace_use  s   9a(^^AFFAFF3AFN,<=>vv"&NN199aii@	 #?+vv"&NN199aii@	 #12vv$#->>!++2B2BAKKDTDT#U  %,-^^AFFAFF3AF #:1#!>??rh   r   r  rF  _gr&   )	r8  r9  r:  r;  r<  r>  r=  r?  r@  )r(   r:  r  r   r9  r8  r  ru  r  r  sortedr;  rm   r  
itemgetterr<  r>  r=  r@  r   _canonicalize_graphrF  r  rH  r2   r?  )r  sorted_outputsr  r   r  sorted_nodesr  r  r  rW  r  sorted_tensor_valuessorted_sym_int_valuessorted_sym_float_valuessorted_sym_bool_valuessorted_custom_obj_valuescounterr   r  r  r  r  r  s   ` ``                @@@ri   r  r    s   >T >TB-
|| ekk*L
<C,,EKK())<S=N<OP
 	

 "$J@:@&   Q   $ 	$AZ#	$$  ) 	)A[!%%(	))  !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 *rh   r  r   c                 ~   t        j                  |       } |xs
 t               }t        t	        | j
                  j                         t        j                  d                  }t        t	        | j                  j                         t        j                  d                  }t	        | j                        }t	        | j                  j                  d       }| j                  j                  }| j                  j                  }t        |j                         t        |j"                        k7  r7t%        dt        |j                          dt        |j"                               t        |j&                        t        |j(                        k7  r7t%        dt        |j&                         dt        |j(                               dt*        t,        t.        d	z  t,        f   fd
}dt*        t,        t.        d	z  t,        f   fd}	t	        t1        t3        |j                   |j"                              |      }
t        |
      dkD  rt3        d |
D         \  }}nd}d}t	        t1        t3        |j&                  |j(                              |	      }t3        d |D         \  }}t5        ||||      \  }fd}fd}|D ]
   |        |D ]
   |        t7        t9        |t;        t=        |      t=        |            |      ||| j>                  | j@                  | jB                  |      S )ak  
    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                     | j                   S rl   )r  )r  s    ri   r  zcanonicalize.<locals>.<lambda>9  s    PQPUPU rh   zgraph.inputs length z! != signature.input_specs length zgraph.outputs length z" != signature.output_specs length r   Nc                 p   | \  }\  }}t        |t              s!t        dt        |      j                         |j                  dk(  rdd |fS |j                  dk(  rd|j
                  j                  |fS |j                  dk(  rd|j                  j                  |fS |j                  dk(  rd	|j                  j                  |fS |j                  d
k(  rd|j                  j                  |fS |j                  dk(  rdd |fS |j                  dk(  rd|j                  j                  |fS t        d|       )Nexpected InputSpec, got r     r  r&   r  r$   r  rA  r     r  r   r     Unknown input type: )rt   r6   r   r   rd   r  r  r  r  r  r  r  r  r  rH  )r  r  _argr  s       ri   
rank_inputz canonicalize.<locals>.rank_inputF  s0   \dD$	* #;DJ<O<O;P!QRR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!>??rh   c                 H   | \  }\  }}t        |t              s!t        dt        |      j                         |j                  dk(  rdd |fS |j                  dk(  rdd |fS |j                  dk(  rd|j
                  j                  |fS |j                  dk(  rd|j                  j                  |fS |j                  d	k(  rd
|j                  j                  |fS |j                  dk(  rdd |fS |j                  dk(  rdd |fS |j                  dk(  rdd |fS t        d|       )Nexpected OutputSpec, got r  r  r  r  r&   r  r$   r  r  r  r  r  rA  r  r   Unknown output type: )
rt   rF   r   r   rd   r  r  r  r  r  )r   r  r  r  s       ri   rank_outputz!canonicalize.<locals>.rank_output[  s7   \dD$
+ #<T$Z=P=P<Q!RSS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!?@@rh   c              3   &   K   | ]	  \  }}|  y wrl   rg   rx   r  r  s      ri   rz   zcanonicalize.<locals>.<genexpr>w  s     *Fa1*F   rg   c              3   &   K   | ]	  \  }}|  y wrl   rg   r  s      ri   rz   zcanonicalize.<locals>.<genexpr>  s     (EvsA(Er  c                 @   t        | t              s!t        dt        |       j                         | j                  dk(  r| j
                  j                  }|j                  dk(  r!|j                  }|j                     |_        y |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_
        y |j                  dk(  ry t        d|       |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_
        y |j                  d	k(  ry t        d
|       |j                  dv ry t        d|       | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                   j                  }|j                     |_        y | j                  dk(  ry t        d|        )Nr  r  r  r  rN  r   Unknown sym_int type: rP  r   Unknown sym_float type: )rX  r   r   r   rL  r  r  r  r  r  r  r  r  )rt   r6   r   r   rd   r  r  r  rH  r  rN  rP  r  r  r  r  r  )r  r  r   r   ru  t_custom_objtokreplace_tables          ri   replace_inputz#canonicalize.<locals>.replace_input  s;   $	* #;DJ<O<O;P!QRR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!>??rh   c                    t        	t              s!t        dt        	      j                         	j                  dk(  r	j
                  j                  }|j                  dk(  r!|j                  }|j                     |_        y |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_
        y |j                  dk(  ry t        d|       |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_
        y |j                  d	k(  ry t        d
|       |j                  dv ry t        d|       	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  rI	j                   }|j                  j                     |j                  _        |j"                     |_        y 	j                  dk(  rI	j$                  }|j                  j                     |j                  _        |j"                     |_        y 	j                  dk(  r+	j&                  j                  }|j                     |_        y t        d	       )Nr  r  r  r  rN  r   r  rP  r   r  )rX  r   r   r   rL  r  r  r  r  r  r  r  r  r  )rt   rF   r   r   rd   r  r  r  rH  r  rN  rP  r  r  r  r  r  r  r  r  )
r   r  r   r   ru  gur  r  r  s
           ri   replace_outputz$canonicalize.<locals>.replace_output  s   $
+ #<T$Z=P=P<Q!RS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!?@@rh   r  )r  r  r  rH  )"rO  deepcopyr   r  r  r;  rm   r  r  r*  rL  r,  r  r  r  r  r8  r  r   r9  r  r   r   r(  r  r+  r  r/   r4   r5   rA  rI  rJ  rK  )r  r   r;  r*  rL  r  r  r  r  r  
sorted_insr  r  sorted_outsr  r  sorted_graphr  r  r  r  s                      @@ri   rS  rS    s   , 
r	B#,suI 0 0 6 6 8h>Q>QRS>TUVMr##))+1D1DQ1GH (Kr@@oV))IOO!!E
5<<C	 5 566"3u||#4"55VWZ[d[p[pWqVrs
 	
 5==S!7!788#C$6#77YZ]^g^t^tZuYvw
 	
@5cDj#!56 @*AE#sTz3"67 A. #ellI$9$9:;J :%(*F:*F%G"{#emmY%;%;<=;K $'(E(E#F NL"5~ui#L-6@p4Al  d  t  $ -!,/ 0
 $+((,,&& rh   c                   |    e Zd ZdZedefd       Zedefd       Zedefd       Zede	j                  fd       Zy)	ExtensionHandlerz6
    Base class for handling extension operators.
    r   c                 2    t        | j                   d      )Nz  namespace() must be implementedr7  rm  r   s    ri   r  zExtensionHandler.namespace      !S]]O3S"TUUrh   c                 2    t        | j                   d      Nz op_name() must be implementedr  r   ry   s     ri   r  zExtensionHandler.to_op_name      !S]]O3Q"RSSrh   rH  c                 2    t        | j                   d      r  r  )r   rH  s     ri   rn  zExtensionHandler.from_op_name  r  rh   c                 2    t        | j                   d      )Nz  op_schema() must be implementedr  r  s     ri   r2  zExtensionHandler.op_schema  r  rh   N)rd   re   rf   r   classmethodr(  r  r  rn  ru   FunctionSchemar2  rg   rh   ri   r  r    s     V# V V Ts T T T T T Ve22 V Vrh   r  op_typeextension_handlerc                    t        |t              st        d| d      | t        v rt        |  d      t	        | t
              s!t        dt        |       j                         | j                  j                  d      s| j                  j                  d      rt        d| j                   d      |j                         t        v rt        d	|j                         d
      |t        | <   |t        |j                         <   y)zJRegister custom de/serialization method for a node with non-standard type.zExpected ExtensionHandler, got r  z is already registered.zop_type must be a type, got ru   builtinszop_type module z, should not start with 'torch' or 'builtins'z
namespace z is already registeredN)r  r  r   r1  rt   r   rd   re   r  r  rm  )r  r  s     ri   register_extensionr  !  s   
 ')9:>?P>QQRSTT))y(?@AAgt$;DM<R<R;STUU$$W-1C1C1N1N2 g0011]^
 	
 ""$(AA*44699OP
 	
 (9G$?P/99;<rh   c                  <    t        t        j                               S rl   )r   r1  rk  rg   rh   ri   r2  r2  :  s    (--/00rh   r1  rm  rl   (/  rj  rO  r  rW  r  r)  r  r   r  loggingr  r  rr  r2  r  r}  collectionsr   r   collections.abcr   r   r   r   
contextlibr	   r
   r   enumr   r   r   r   r   r   r   ru   torch.export.exported_programexportr~   r  torch._export.non_strict_utilsr   torch._export.verifierr   torch._library.opaque_objectr   r   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%   r8  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   r[   unionr\   __all__	getLoggerrd   r  r  rc   r  rq   r   r   r   MetaTyper]  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FLOAT8E5M2FNUZfloat8_e8m0fnuFLOAT8E8M0FNUuint32UINT32uint64UINT64r   r   
sparse_coo	SparseCoo
sparse_csr	SparseCsr
sparse_csc	SparseCsc
sparse_bsr	SparseBsr
sparse_bsc	SparseBsc_mkldnnstridedStridedr   r  contiguous_formatContiguousFormatchannels_lastChannelsLastchannels_last_3dChannelsLast3dpreserve_formatPreserveFormatr  r  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   r	  r(  r  r   r$  r   r)  r.  r4  r6  r   rC  rW  r  r  r^   r_   r`   ra   JSONEncoderr   r   rx  r]   r  r   r  r	  r  r   rS  r  r  r2  r1  rm  rg   rh   ri   <module>r     s
         	      	    / B B % (  8 8   * * Q 0 N D ; 1 ) ) > - 6 7 4 * 0 5 5 5 5 5 5 5 5 5 5 5 5 5 5l  g!	\ 	.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	*22	LL*##	LL*##+ 2 ))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> @x@@
K
LL      #d #24& 4U\\ 4@HV, @sCx @F 0 FU38_ F)
 )u{{ )v # (ELL5==05>>AEJJN (
u||+ 
 
0
55>>1 
h 
0	
$. 	
7 	
U\\ j  >B x 9: AGZ G!15" 2I/Dj/+./
/.S#XsCx0584?5:: ?s ?sTz ?6
3: 
5:: 
6u|| 6t 6	ELL+56		#
	A 	R 	R 	RCD CVEHHMM Vr [
e [
 [
|. X
% X
 X
v [
 [
 [
|& TE T Tn$$"" $6   ,02
 "& $%)((S>D( 
   # B2jS % C  59  %	  cNT1
 ,B
5$sCx. !BL
 7;nn$'HtOnnbV V,Q#YQ,-Q21 DF d3i.>)??@ E?A 4T*:%; ;< Arh   