
    9j8                    *   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l0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z8 d dl9m:Z:m;Z; d dl<m=Z= d dl>m?Z?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZF ddlGmHZH ddlImJZJ ddlJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~ ddlmZ g dZ e	j                  e      Z G d de      Zdeeef   fdZe.ez  e$j                  z  ez  e$j                  z  ez  e$j                  z  e(j                  z  ZdZd Zi e$j                  emj                   e$j"                  emj$                  e$j&                  emj(                  e$j*                  emj,                  e$j.                  emj0                  e$j2                  emj4                  e$j6                  emj8                  e$j:                  emj<                  e$j>                  emj@                  e$jB                  emjD                  e$jF                  emjH                  e$jJ                  emjL                  e$j                  emjN                  e$jP                  emjR                  e$jT                  emjV                  e$jX                  emjZ                  e$j\                  emj^                  e$j`                  emjb                  e$jd                  emjf                  e$jh                  emjj                  e$jl                  emjn                  iZ ee      Ze$jt                  e`jv                  e$jx                  e`jz                  e$j|                  e`j~                  e$j                  e`j                  e$j                  e`j                  e$j                  e`j                  e$j                  e`j                  iZ eeǫ      Ze$j                  ebj                  e$j                  ebj                  e$j                  ebj                  e$j                  eb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eQd)e$j                  fd*Zd+eev   d)eed,f   fd-Zd.eev   d)eed,f   fd/Zd0emd)e$j                  fd1Zd2evd)efd3Zd4e$j                  e$j                  z  e$j                  z  e#j                  z  fd5Zd4ee$j                  z  d)evfd6Zd4ee$j                  z  d)etfd7Zd4ee$j                  z  d)epfd8Z d9e$j                  d)eyfd:Zdae"d;   ed<<   d=e.fd>Zd?ed@ed)e.fdAZefdBedz  dCed)efdDZdEee	ef   eed,f   z  ez  fdFZ
dGe#j                  dHe	d)edz  fdIZdGedz  d)e#j                  fdJZdKe#j                  dLe@fdMZdNee#j                  eBf   d)ee	elf   fdOZdP Ze G dQ dR             Z G dS dTe      ZdU ZdVe$j*                  j                  fdWZe! G dX dYeZ             Ze! G d[ d\eZ             Ze! G d] d;eZ             Ze! G d^ d_eZ             Z G d` daej6                        Zdb Zdced)efddZdefdedededfdge(j                  dhee	ef   dz  dCediedjedked)efdlZdm Z dn Z!doedped)efdqZ"	 ddrdsdBedtee	ef   dz  d)e(j                  fduZ#d)eeUee	e	f   f   fdvZ$	 ddweRdxe%e	   dz  d)eRfdyZ& G dz 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)
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__     ]/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/_export/serde/serialize.pyra   ra   q   s    rf   ra   dc                 j    | j                         D ci c]  \  }}|j                  | c}}S c c}}w N)itemsvalue)rh   kvs      rg   _reverse_mapro   u   s(    #$779-41aAGGQJ---s   /;c              #   d   K   | ](  }t        |t        j                  j                         * y wrj   )
isinstancetorch_ops
OpOverload).0ops     rg   	<genexpr>rx      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)rb   rc   rd   bytes__annotations__re   rf   rg   r{   r{      s    rf   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)rb   rc   rd   r-   r   r   re   rf   rg   r   r      s    %%rf   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 rj   )mapset	evaluatedselfs    rg   __init__zLazyMap.__init__   s    rf   c                 "    || j                   |<   y rj   )r   )r   rm   rn   s      rg   __setitem__zLazyMap.__setitem__   s    rf   c                     | j                   |   }|| j                  v r|S | j                  j                  |        |       | j                   |<   | j                   |   S rj   )r   r   add)r   rm   outs      rg   __getitem__zLazyMap.__getitem__   sO    hhqkJ1exx{rf   c                 6    | j                   j                         S rj   )r   __repr__r   s    rg   r   zLazyMap.__repr__  s    xx  ""rf   N)rb   rc   rd   __doc__r   r   r   r   re   rf   rg   r   r      s    
#rf   r   returnc                     | j                    t        j                  | j                        S t        j                  | j                  | j                         S )N)typer   index)r   rs   devicer   )rh   s    rg   deserialize_devicer     s7    ww||((<<QVV17733rf   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rj   r   )rv   sym_int_sizes     rg   rx   z#deserialize_size.<locals>.<genexpr>  s     ?$$?   r   AssertionErrortuple)r   r   s     rg   deserialize_sizer     sN     W( #A,BSBSAT!UVVW ????rf   stridesc                     | D ])  }|j                   dk7  st        d|j                           t        d | D              S )Nr   r   c              3   4   K   | ]  }|j                     y wrj   r   )rv   sym_int_strides     rg   rx   z%deserialize_stride.<locals>.<genexpr>  s     E>&&Er   r   )r   r   s     rg   deserialize_strider     sN    ! Y(* #A.BUBUAV!WXXY EWEEErf   stc                     t         |    S rj   )_SERIALIZE_TO_TORCH_DTYPE)r   s    rg   deserialize_scalar_typer     s    $R((rf   offsetc                 h    | j                   dk7  rt        d| j                          | j                  S )Nr   r   )r   r   r   )r   s    rg   deserialize_storage_offsetr      s/    {{h=fkk]KLL==rf   sc                     t        | t        j                  t        j                  t        j                  f      r| j
                  j                  } t        j                  j                  j                  |       S rj   )rr   rs   rQ   rK   rO   nodeexprsympyprintingreprsreprr   s    rg   _print_sympyr   &  sG    !ellEMM5>>BCFFKK>>$$Q''rf   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 ``)rr   rs   rQ   r   Symbolintr   is_concrete_intcreater   r   rb   r   r   rM   r   rN   ra   r   s    rg   serialize_sym_intr   ,  s    !ellELL#67**1-==A//a%,,!=>$5d1g6F6F5GH  vv{{"}}W\!_-EFF}}#$Q(//qvv{{C  :1#[a	QRS
 	
rf   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   )rr   rs   rO   r   r   floatr   is_concrete_floatr   r   r   rb   r   r   rM   r   rN   ra   r   s    rg   serialize_sym_floatr   D  s    !ennellE:;,,Q/??E!H55a%..%,,!?@$7Q8H8H7IJ  vv{{"w|A/GHH#$Q(//E  >qcTRSWIUVW
 	
rf   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   )rr   rs   rK   boolr   is_concrete_boolr   rM   r   ra   r   r   s    rg   serialize_sym_boolr   \  ss    !emmT*+++A.>>$q'22>>'<?*KLL<QC{4PQ7)STU
 	
rf   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)rT   _TORCH_TO_SERIALIZE_DTYPEr   shaper   r   r,   r   r   r   strider   _TORCH_TO_SERIALIZE_LAYOUTr   )r   r   s     rg   serialize_tensor_metar   h  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)rr   rs   nn	Parameterr   jsondumps_dataclass_to_dictEnumEncoderencode_reconstruct_fake_tensor)r   is_parametertensor_metatensor_meta_bytess       rg   _reduce_fake_tensorr   z  sY    k588+=+=>L'4K

;'[fWo  $&7%FFFrf   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_dataclassrT   r   r   deserialize_tensor_metars   r   r   )r   r   json_tensor_metar   r   s        rg   r   r     sk     zz"8"?"?"HI$Z1ABK$HII'??LKhh((5rf   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)Nrf   z0Refusing to stomp on existing FakeTensor reducer)r   )r   copyregdispatch_tabler   pickler   ioBytesIOrs   savegetvalue)r   r   buffers      rg   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 )rr   dictr   lenr  r  seekrs   load	Exceptionlogwarningr   r   rb   )r  r  r   es       rg   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   rr   Integerr   r  r  r   mathr  r  RuntimeError)r  r  s     rg   _sympy_int_to_intr    s    
uxx  
y6'""#u}}%3x KK	 	S	 zz#	6	yy~4VH=>>rf   c                     | |S | t          t         fv r| S | t        j                  k(  rt         S | t        j                   k(  rt          S t        j                  |       S rj   )r   r  infr   r  )r  defaults     rg   _int_to_sympy_intr"    sT    
{
w

dhh
txxiw==rf   symsym_typec                 P    t        t        |       t        t        |         d        S rj   )r   strr  r   )r#  r$  s     rg   _symbol_indexr'    s#    s3xJx013455rf   range_constraintsc                     | j                         D ci c]C  \  }}t        |      t        t        |j                  d      t        |j
                  d            E c}}S c c}}w )Nr  r  )rk   r&  rG   r  lowerupper)r(  rm   rn   s      rg   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 )	rr   rs   rt   ru   _schemar   _serialization_registry	op_schemar  )targets    rg   _get_schema_from_targetr2    s^    &%**//0~~	f0	0&tF|4>>vFF
0f?
@@rf   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)rb   rc   rd   r   listr6  r&   r   r7  r8  rB   r  r9  r&  rT   r:  rQ   r;  rK   r<  rO   r=  r   r>  r+   re   rf   rg   r4  r4    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Qrf   r4  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)rr   rA  	TypeErrorrb   r   __new__r  )metaclsnamebases	classdictbs        rg   rD  zFinal.__new__  sQ     	WA!U#&4T UVV	W ||GT5$y/BBrf   N)rb   rc   rd   rD  re   rf   rg   rA  rA    s    Crf   rA  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       rg   is_metadata_matchedrU    sG    ON 64 W^T%Bvt$(EE rf   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: )+r1  rs   _higher_order_opstriton_kernel_wrap triton_kernel_wrapper_functionalr   r!   triton.runtime.autotunerrW  triton.runtime.jitrX  rr   r]  r   r   kernel_side_table
get_kernelfnrO  rZ  r  keysnextitervaluesr[  rb   r\  	arg_namesgetr  r   r   appendr&  rk   refindall
ValueErrorr?  metadataconfigsrU  )r   rW  rX  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_keyrR  rQ  key_s                               rg   !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 rj   )r4  graph_stater  r  custom_objsduplicate_getitem_nodestreespec_namedtuple_fields)r   r  r  s      rg   r   zGraphModuleSerializer.__init__  s6    
 &<.!2=?79$DF'rf   c              #   r   K   | j                   }t               | _         	 d  || _         y # || _         w xY wwrj   )r  r4  r   saveds     rg   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.rF  	class_fqnas_custom_objz Unimplemented graph input type: )rw   r   metar  debugrF  rr   rs   Tensorr&   r   serialize_tensor_outputrQ   serialize_sym_int_outputrO   r   r   r&  r   r   serialize_inputepr+   r  serialize_script_obj_metar  r>  r6  ro  )r   r   r  graph_inputr  s        rg   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&&{3rf   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 )rw   r   r  argsr  r  rF  rr   rs   fxrB   r  r=  r  r7  r   r?  r   )r   r   	node_argsargs       rg   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.)rr   r&  rc   
startswithreplacerb   )r   r1  modules      rg   serialize_operatorz(GraphModuleSerializer.serialize_operator  sr    fc"M)),7 &&..|[IFXQv/00''(&//):;;rf   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                        r6d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 rt]        |      \  }}|j^                  }|j                  d   }t        |t`              s!t        dtc        |      jd                         |jg                         }g }|jh                  D ch c]  }|jj                  s|j                   }}d}d}d}t        |j                  d   t`              s$t        dtc        |j                  d                |j                  d   jm                         D ]9  \  }}||v rd}|rt        d      ||v r|jU                  |       ||fz  }|dz  }; t        |j                  d   t@              s$t        dtc        |j                  d                |jn                  jd                   d|jp                   }||j                  d   d   ||jr                  d}tC        |d      r|jt                  |d<   tC        |d      rBt        |jv                  t:              rty        |jv                        |d<   n|jv                  |d<   tC        |d      r|jz                  |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                         jW                  ||       j                  |       j/                  |       ||            }nt'        |j                   j)                  |j                         jW                  |j                  |j                         j                  |       j/                  |       ||            }ntc        |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/                  |            }nt        d*|j                   d+       j                  j                  jU                  |       y 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 )rF  r1  r6  r7  rs  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  )rr   r1  rs   rt   HigherOrderOperatorr   r   rb   r  rn  r  )r   meta_vals     rg   _is_hop_single_tensor_returnzPGraphModuleSerializer.handle_call_function.<locals>._is_hop_single_tensor_return7  sr    !$++uzz/M/MN(<T$++=N=W=W<XY   99==5t+R
8U\\0RRrf   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  rn  	enumerate_output_node_name_at_indexro  r  r&   r   )r   r  tensor_argsr~  r  rF  r   s         rg   serialize_tensor_list_outputzPGraphModuleSerializer.handle_call_function.<locals>.serialize_tensor_list_output`  sw    #yy}}UD9H"$K%.x%8 U	T#>>tSI#**4+G+Gd+STU %OO{CDDrf   F)rF  r1  r6  r7  rs  is_hop_single_tensor_returnz"expected meta_val to be dict, got re   r]  z*expected kwargs['kwargs'] to be dict, got Tz/non-constexpr args found after constexpr arg(s)gridzexpected grid to be list, got r  )rF  r  output_indicesrL  rK  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)Irw   r   r  rn  r  r  rF  r1  r  r]  operatorgetitem_SYM_OPSrr   rs   rQ   rK   rO   r  rB   r  serialize_sym_op_inputsserialize_outputserialize_metadatart   ru   serialize_inputsserialize_outputsr  r   ra  aoti_call_delegater?  rO  graphowning_modulerP  	aoti_pathr   r  r  r+   ro  serialize_hoo_inputsrb  rc  r  rs  r  r   rb   ri  paramsis_constexprrk   rh  hashrL  rK  r  r   r  r  r  r&  
annotationserialize_hoo_outputsr/  	namespace
to_op_namera   r  r8  )r   r   r  ex_noder  serializable_argslowered_module_namelowered_moduleserializable_weight_nodesweight_noder  ru  kernel_cache_entrykernel_cache_metadataoutput_keysr  pconstexpr_keysfound_constexprargs_newirm   rn   kernel_name_with_hash
kwargs_newcompiled_signaturehandlerr  op_names   `                            rg   handle_call_functionz*GraphModuleSerializer.handle_call_function  sQ	   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$HFA!$ "$++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;;?44XzJ 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 !<}<M!NOO%%g.G "S~488s+   4i=i=jjAj*j<jc                 D    t         j                  d|j                         y )Nz[handle_get_attr] %s)r  r  rF  )r   r   s     rg   handle_get_attrz%GraphModuleSerializer.handle_get_attr  s    		($))4rf   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$   )usersr1  r  r  r   r  rF  r  )r   r   r   	user_nodeusers        rg   _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 rf   c                 d    | j                  ||      }||j                   d| S |j                  S )N_unused_)r  rF  )r   r   r   r  s       rg   r  z0GraphModuleSerializer._output_node_name_at_index  s9    ..tU;	ii[00>>!rf   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 ,)rr   r   r  r   r   rb   r&  )r  val_lenpathtys       rg   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&rf   r  source_fn_stackr   r$   torch_fncustomz-Failed to serialize custom metadata for node z with error 	from_node)r  rn  rk   ST_DELIMITERjoinr  r?  r   r   r  ra   rF  _serialize_from_node)r   r   retr  r  r  rm   rn   nn_module_listsource_fn_st	source_fnsource_fn_listr  r  r  r  s                   rg   r  z(GraphModuleSerializer.serialize_metadata  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)rr   r   to_dict)r   r  node_sources      rg   r  z*GraphModuleSerializer._serialize_from_nodeW  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+   rF  r  r   r  s     rg   r  z/GraphModuleSerializer.serialize_script_obj_metaf  s2     			2OD  %%%//
 	
rf   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_OPSrF  r  kind)rr   rs   rt   ru   r.  	argumentsrF  r  r   r?  inspectr  
parametersri  zipro  r@   r  r'   
POSITIONAL)r   rw   r  r  
args_namesserialized_args	args_names          rg   r  z-GraphModuleSerializer.serialize_sym_op_inputso  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r1  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   )rr   rs   ra  	torchbindCallTorchBindr%   rt   ru   _registered_extension_typesr   r   rb   r2  r  r"  rF  ro  r@   r  r'   KEYWORD
kwarg_onlyr  r&  )
r   r1  r  r]  r%   r(  objmethodr  
schema_args
             rg   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 rf   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   )r@   r  r'   r&  extendrk   r.  )r   r  r]  ar6  rF  s         rg   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 rj   )r   r   rr   rs   rQ   r   r  s     rg   is_inductor_sym_int_argz-GraphModuleSerializer.is_inductor_sym_int_arg  s#    
 CyC@:c5<<#@@rf   c                     t        |      t        u xsH t        |t        j                  j
                        xr" |j                  | j                  j                  v S rj   )	r   r   rr   rs   r  rB   rF  r  r:  r8  s     rg   is_sym_int_argz$GraphModuleSerializer.is_sym_int_arg  sG    CyC 
sEHHMM* <D,,;;;	
rf   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S rj   )rr   r   rs   r  rB   rF  r  r<  r8  s     rg   is_sym_float_argz&GraphModuleSerializer.is_sym_float_arg  sE    #u% 
sEHHMM* >D,,===	
rf   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S rj   )rr   r   rs   r  rB   rF  r  r;  r8  s     rg   is_sym_bool_argz%GraphModuleSerializer.is_sym_bool_arg  sE    #t$ 
sEHHMM* =D,,<<<	
rf   arg_typec           
      "    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        |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)rF  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  rF  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rj   )r   r   rv   r6  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     0q47d?0   c              3   >   K   | ]  }t        |      t        u   y wrj   r   r   r\  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>       1T!W^1r]  c              3   >   K   | ]  }t        |      t        u   y wrj   )r   r   r\  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     3!T!W%3r]  c              3   >   K   | ]  }t        |      t        u   y wrj   )r   r&  r\  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  r`  r]  c              3   @   K   | ]  }j                  |        y wrj   )r9  rv   r6  r   s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     BT11!4B   )as_sym_intsc              3   P   K   | ]  }t        |t        j                           y wrj   )rr   rs   rO   r\  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     @qZ5>>2@s   $&)as_sym_floatsc              3   @   K   | ]  }j                  |        y wrj   )r;  rd  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     9T((+9re  c              3   @   K   | ]  }j                  |        y wrj   )r=  rd  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     ;!T**1-;re  c              3   @   K   | ]  }j                  |        y wrj   )r?  rd  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     :T))!,:re  )as_sym_boolsc              3   d   K   | ](  }t        |t        j                  j                         * y wrj   rr   rs   r  rB   r\  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     ?aZ588==1?ry   c              3   H   K   | ]  }t        |t        t        f        y wrj   )rr   r?  r   r\  s     rg   rx   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rj   rn  rv   r   s     rg   rx   zBGraphModuleSerializer.serialize_input.<locals>.<genexpr>.<genexpr>  s     @QJq%((--0@ry   N)all)rv   inners     rg   rx   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rj   )rr   rs   r  rB   r   r\  s     rg   rx   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|        NTrT  rP  r  z!Unsupported list/tuple argument: )	rC   r   rr   rs   r  rB   rS   rF  ra   r6  s    rg   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Urf   )as_optional_tensorsc              3   6   K   | ]  }t        |        y wrj   )rr   rv   r6  inductor_tensor_bufferss     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     IZ#:;Is   c              3   R   K   | ]  }t        |g t        d                y wrj   )rr   r   r}  s     rg   rx   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|        rx  )rC   r   rr   rS   get_namera   )r6  r~  s    rg   rz  zMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_args  s\    y5<<TJJ#A'>?5<<&4!**,&G   -/PQRPS-TUUrf   c              3   d   K   | ](  }t        |t              xr t        d  |D               * yw)c              3   >   K   | ]  }t        |      t        u   y wrj   r_  rv   xs     rg   rx   zBGraphModuleSerializer.serialize_input.<locals>.<genexpr>.<genexpr>  s     ,GT!W^,Gr]  N)rr   r   rs  r\  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s/      LM
1e$G,GQ,G)GGry   )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rj   )rr   r   r  s     rg   rx   zBGraphModuleSerializer.serialize_input.<locals>.<genexpr>.<genexpr>  s     4UaZ55I4Us   N)rr   r?  r   rs  r\  s     rg   rx   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 )Ytorch._inductor.ir	_inductorirBufferReinterpretViewrr   rs   r  rB   rw   r1  r&  r   r   rb   rP  r  r  r  ra   r2   r  serialize_graphr&   r   r1   r;  rR   rF  r=  rP   r?  rL   r  r  r+   r  r  rS   r  TorchBindObjectget_real_obj_typequalified_namer  rQ   rO   r   r   r   complexr)   rQ  rR  r  rk   r  r?  r   r  OptionalTypegetElementTypeListTypeBoolTypeIntType	FloatType
StringType
TensorTyper  r  rs  ro  r   r   r   r   r,   r   memory_format!_TORCH_TO_SERIALIZE_MEMORY_FORMATr   r   _CScriptObject_has_methodrt   ru   r  r  )r   r  r@  inductor_irrT  r  rE  rF  
dedup_namearg_namearg_valr  serialized_dictr  rl   	elem_typerl  r6  r"  nested_arguments
inner_listinner_argumentsr   rz  r   custom_obj_namer~  s   `                         @rg   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  ejj33UZZ5S5STU??t/F/Fs/KLL -d3i[8NxjY M	; ;x #YP  P. 5K 7M >Ts2   !AD*&AD71!AD<AE AE$AE
D*AD4c                     || j                   j                  v rt        d|d      t        |      | j                   j                  |<   t	        |      S )Nname z already in tensor_valuesrP  )r  r9  r   r   rS   r   rF  r  s      rg   r  z-GraphModuleSerializer.serialize_tensor_output#  sQ    4##111 50I!JKK/DX/N&&t,4((rf   c                     || j                   j                  v rt        d|d      t        |      | j                   j                  |<   t	        j
                  |      S )Nr  z already in sym_int_valuesrJ  )r  r:  r   r   rR   r   r  s      rg   r  z.GraphModuleSerializer.serialize_sym_int_output)  sW    4##222 50J!KLL0A(0K''-$$T22rf   c                     || j                   j                  v rt        d|d      t        |      | j                   j                  |<   t	        j
                  |      S )Nr  z already in sym_float_valuesrJ  )r  r<  r   r   rP   r   r  s      rg   serialize_sym_float_outputz0GraphModuleSerializer.serialize_sym_float_output/  sW    4##444 50L!MNN2Eh2O))$/&&t44rf   c                     || j                   j                  v rt        d|d      t        |      | j                   j                  |<   t	        j
                  |      S )Nr  z already in sym_bool_valuesrJ  )r  r;  r   r   rL   r   r  s      rg   serialize_sym_bool_outputz/GraphModuleSerializer.serialize_sym_bool_output5  sW    4##333 50K!LMM1CH1M((.%%d33rf   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   rH  r   TrT  zUnhandled constant input z to serializerF  rl   )constant_inputr  )
user_inputz,spec.target should not be None for PARAMETERexpected TensorArgument, got rP  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_INPUTrr   r  ConstantArgumentr   rl   r   r*   r   r   r&  r   ra   r4   r6   rF  rX   serialize_argument_spec	PARAMETERr1  r   rS   rb   r9   BUFFERr  r5   CONSTANT_TENSORr:   
CUSTOM_OBJr+   r7   r  TOKENrU   r8   )r   r  constant_specs      rg   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Brf   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  rP  )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_OUTPUTrD   r   rY   r  r  LOSS_OUTPUTrr   rS   r   r   rb   r<   rF  BUFFER_MUTATIONr1  r(   PARAMETER_MUTATIONrF   GRADIENT_TO_PARAMETERr.   GRADIENT_TO_USER_INPUTr/   USER_INPUT_MUTATIONrW   r  rU   rE   )r   r  s     rg   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Brf   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  r3   r  r  r  r  )r   r  r   s      rg   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      )	NrP  r  rJ  r  rL  r  r  TODO)rr   r  rS   r&   r   rF  rR   rP   r  r  rl   r+   r  r   r   r  s     rg   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  !((rf   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  _fieldsra   rA   children)r  r  r  childr   store_namedtuple_fieldss       rg   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  /'./rf   )r  TreeSpecr   rV   )r   r  serialized_treespecr  s   `  @rg   serialize_treespecz(GraphModuleSerializer.serialize_treespec  s8    	/ 	/D 	/2 -X7GH)""rf   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r6  r7  in_specout_specforward_arg_names)
r  r  r?   r6  r  r7  r  r	  r
  r  r   r  r  namess       rg   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      rg   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        |t8              rt        |j2                  t
        j4                  t
        j6                  f      s+t        dt        |j2                        j                         | j#                  ||      }	|
j%                  | j-                  |	|             5t        |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*                  |	             bt        |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.
        r1  r   c                     t        |       }|j                  }t        |      dk7  ry|d   j                  }t	        |t
        j                        xr( t	        |j                         t
        j                        S )Nr$   Fr   )	r2  returnsr  	real_typerr   rs   r  r  r  )r1  r%   r  return_types       rg   _is_single_tensor_list_returnzNGraphModuleSerializer.serialize_outputs.<locals>._is_single_tensor_list_returnq  sg    ,V4FnnG7|q !!*..Kk5>>: z**,e.>.>@ rf   r  zIexpected call_function with OpOverload or registered extension type, got z with r   r  r  r$   z)expected OptionalType or TensorType, got TrT  z/expected ListType with TensorType element, got r  r  zUnhandled output type z from node )'r   r   rw   rr   r1  rs   rt   ru   r-  r   r   rb   r2  r  r  r  r  r  ro  r  r&   r   r  rF  r%  r  r  r  r   r?  r  r  r  r   rQ   r   rO   rr  format_node)r   r   r  r%   r  r  r  r~  r  rF  output_argumentsreturn_schemar  r  r  muser_node_names                    rg   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  rf   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  rr   r   r  r  r?  rs   r  ra   r   rF  r  ro  r  r&   r   r  r  rk   )r   r   r  r7  r  element_meta_valr  tensorsjr  rF  r  r~  r  s                 rg   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>??rf   rF  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|       )	NTrT  r  rN  z1meta_val should not be bool when returning SymIntr  rL  zUnable to serialize output )r&   r   rr   rs   r  r  r   rK   r  r   rQ   r   r  r   rO   r  ra   r  s      rg   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Frf   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  r1  r  r  r   rF  r  r  ro  r  )
r   r   r  idx_to_namer   r~  r  arg_listr  r!  s
             rg   _handle_getitem_usersz+GraphModuleSerializer._handle_getitem_users)  s    99U#JJ 	2D{{("2"22$z$tD6%OPP(,		K		!%		2  ) 	?FC +%&*ii[#>C 	? #,X#6 	AOO,,[^=MN	 rf   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 )	r6  r8  r9  r:  r<  r;  r>  r7  r=  )rr   rs   r  r2   r   r   rb   r  r  print_readabler  r8  rP  rw   r  ra   r  	traceback
format_excr0   r  r6  r9  r:  r<  r;  r>  r7  r=  )r   r)  r   r  s       rg   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 )rn  r  r  r   r   r  ra   )r   r  r  r  r  s        rg   serialize_graph_module_metadataz5GraphModuleSerializer.serialize_graph_module_metadataa  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  rs  r  )r  r  r  r2   r  r  r  r  r2  r  r  )r   r)  r  s      rg   r[   zGraphModuleSerializer.serializen  ss    		/"$$\2..t/C/CD">>t?U?UV99,:K:KL'+'F'F
 	
rf   rj   )Erb   rc   rd   r  ExportGraphSignaturer?  r>   r   r	   r  rs   r  rB   r  r  r&  r  r  r  r  r  r  r  r   r   r  r+   r  r@   r  r  r  r   r9  r;  r=  r?  r&   r  rS   r  rR   r  rP   r  r  r4   r  rD   r  r3   r  ArgumentSpecr  r  r  r  r?   r  r  r  r  r  r(  r2   r0   r  r2  r[   re   rf   rg   r\   r\     s   
G00
G   2 23
G % %4uxx}} 4:X%((-- X$	<C 	<w/ w/r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 
}S4Z }8 }~	) )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&:&: 

{ 

rf   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)r8  updaters   r  _get_max_operator_versionr   )r   r8  r   s      rg   r   z"ExportedProgramSerializer.__init__}  sV    
 .0%%m4+++).)K)K)MDv&.rf   Tserialize_state_dictserialize_constantsserialize_example_inputsr|   r?  r@  rA  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)  r8  r(  schema_version	verifierstorch_versionguards_codeF)in_placerf   )validater\   r  r  r[   r)  r,  r(  r  copyr~   rk   r   r-   r8  rJ   rI   rG  dialectrs   __version___guards_codecanonicalizer   ri  r#   r}   r  r   r   r   )r   r|   r?  r@  rA  gm_serializerserialized_graph_moduleserialized_range_constraintsr~   nr   rn   serialized_epnew_state_dictserialized_state_dictserialized_constantsserialized_example_inputss                    rg   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)rb   rc   rd   DEFAULT_PICKLE_PROTOCOLr  r&  r   r   r  r-   r   r   r[   re   rf   rg   r]   r]   {  sz     046/CH~,/ /" &*$()-J
,,J
 #	J

 "J
 #'J
 
J
rf   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   )rb   rc   rd   rs   r  r2   r   r  r4  r?  r>   r  r&  r   r   r  r   r   r   r   r   re   rf   rg   Resultr]    s    hh****** 2 233sELL011ellUXX-?-???@@3344eELL#$56S#XFG$NNrf   r_  r   Nc                     i | _         t               | _        t        j                  j                         | _        t        j                  j                         | _	        y rj   )
serialized_name_to_noder   serialized_name_to_metars   r  r0   r  r   Moduler  r   s    rg   r   z GraphModuleDeserializer.__init__  s8    AC$07	$XX^^%
hhoo'rf   c              #     K   | j                   | j                  | j                  | j                  | j                  f}t
        j                  j                         | _         t
        j                  j                         | _        i | _        t               | _        t               | _        	 d  |\  | _         | _        | _        | _        | _        y # |\  | _         | _        | _        | _        | _        w xY wwrj   )r  r  ra  rb  unbacked_symbolsrs   r  r0   r   rc  r   r   r  s     rg   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   rg  r  r  r  s        rg   deserialize_extension_operatorz6GraphModuleDeserializer.deserialize_extension_operator	  s=    .44S9	7abM	+I6##G,,rf   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$   rs   r  r  )r  r  ri  rs   r  rl  rO  rP  )r   rg  r  serialized_target_namesr1  rF  s         rg   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((( .		/
 rf   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_symbolrr   r   r   r   symbol_is_typer   UNBACKED_INTUNBACKED_FLOATre  r   	shape_envbacked_var_to_valadd_backed_var_to_valsymbol_name_to_rangern  constrain_symbol_ranger*  r+  r    extractvar_to_stack)r#  r   r   r  vrr   s        rg   _process_sym_exprzBGraphModuleDeserializer._parse_sym_expr.<locals>._process_sym_expr)	  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Jrf   )localsrj   )r   Exprr   r   r   sympifysympy_functionsrz  )r   r   r   r  r   s   `    rg   ry  z'GraphModuleDeserializer._parse_sym_expr!	  sy     @D!	!	#&:#5#<!	ZZ!	F }}Id**Id.H.HI
 !t,,rf   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 )rl   r   r   r   ry  r   r~  create_symintnoder   rb   ra   r   r   r  r   r#  s        rg   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 rf   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  )rl   r   r   r   ry  r   r~  create_symfloatnoderr   r   r   rb   ra   r  s        rg   deserialize_sym_floatz-GraphModuleDeserializer.deserialize_sym_floati	  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 rf   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  )rl   r   ry  r   r~  create_symboolnoderr   r   r   rb   ra   )r   r   r  r   s       rg   deserialize_sym_boolz,GraphModuleDeserializer.deserialize_sym_boolx	  s    gg66Y''5D>>44T::VVy c4($':49;M;M:N%OPPJ 1!&&aggYO rf   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rj   r  rv   r  r   s     rg   rx   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>	  s     UC$2237Ure  c              3   @   K   | ]  }j                  |        y wrj   r  r  s     rg   rx   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>	  s     WC$2237Wre  )r   r   r   )fake_tensor_moder   r   rs   empty_stridedr   r   r   r   r   r   r   r   )r   r   s   ` rg   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+   rF  r  r  s     rg   deserialize_script_obj_metaz3GraphModuleDeserializer.deserialize_script_obj_meta	  s)     ## %%%//
 	
rf   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  rO  rM  r   r   r   rU  z"Unable to deserialize output node )r   ra  r  rF  r  rK  rO  rM  r   r   r   ra   )r   r  s     rg   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Orf   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                  r*|jN                  d   j.                  d   |j.                  d<   n,tK        d |jN                  d   D              |j.                  d<    j                  j0                  D ]`  }|j.                  jQ                  d      x}!tS        jT                  |d jV                   jX                  d       x}sR||j.                  d!<   b tG         jX                        dk7  r.tI        d"tG         jX                         d# jX                          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 rj   )r   rn   r   s    rg   <lambda>z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>	  s    t'C'CA'F rf   z$[deserialize_sym_int] %s (input): %sc                 &    j                  |       S rj   r  r  s    rg   r  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>	  s    (@(@(C rf   z&[deserialize_sym_float] %s (input): %sc                 &    j                  |       S rj   )r  r  s    rg   r  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>	  s    $*D*DQ*G rf   z%[deserialize_sym_bool] %s (input): %sc                 &    j                  |       S rj   )r  r  s    rg   r  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>	  s    )B)B1)E rf   z [deserialize_script_obj_meta] %sc                 &    j                  |       S rj   )r  r  s    rg   r  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>	  s    $*J*J1*M rf   z
[deserialize graph nodes]z[deserialize input] %s)r  r  r  rK  z Deserializing a constant symint z as an input)r   r   r   rU  rI  r  r  zInvalid input type zFailed deserializing node r-  z[deserialize output] %sr$   z5expected single output for single_tensor_return, got r   c              3      K   | ]9  }t        |t        j                  j                        r|j                  d    n| ; yw)r  N)rr   rs   r  rB   r  )rv   r  s     rg   rx   z<GraphModuleDeserializer.deserialize_graph.<locals>.<genexpr>
  s6      , $.c588==#AsJ,s   ?Are   T)r~  pendingsimplifyunbacked_bindingsz"expected no unbacked symbols, got : )-r  r  r9  rk   rb  r:  r<  r;  r>  r  r6  r   rl   rF  r  r  sync_fx_noderK  ra   r  r  r  deserialize_inputr  r8  rp  r1  deserialize_noder  r/  r0  r7  ro  r  r=  r  r   r   r  r  rn  r    _free_unbacked_symbols_with_pathr~  re  )r   r  rF  tensor_valuesym_int_valuesym_float_valuesym_bool_valuer  r  input_	node_nameplaceholder_nodeserialized_noder1  r  r7  r  output_noder   r  r  s   `                    rg   deserialize_graphz)GraphModuleDeserializer.deserialize_graph	  sb   		)* #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&1&6&6q&9&>&>u&EKU#&+ ,&++A., 'KU# JJ$$ 
	CDyy}}U++8%4%U%U"nn 11!& !  2C		-.
	C t$$%* 4S9N9N5O4PPRSWShShRij  zz_  $00AAWXaXlXlXnWops   -U!!	V*$VVr  r1  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                  ||       n|t        j                   j"                  j$                  u rt'        d      t)        |t        j*                  j,                        rl| 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?                  |       nt)        |t        j*                  jJ                  gtM                     r|j                  r|j                  }n- ||      r#|j                  d   jF                  j                  nd }| jO                  ||      \  }}| j                  j                  d||||      }| jI                  ||       n?t)        |tP              rd| ddz   dz   dz   nd}
t'        |
d| dtS        |       dz         |j<                  j?                  | j1                  |j2                               tT        jW                  d|j                  |jX                  |jZ                  |j\                  |j<                  j_                  d             |t        j                  j                  j`                  j                  u rzt)        |jZ                  d   x}t               s|j<                  d   }t)        |t        jb                        r| jd                  jg                  |jh                  jj                  d|       n|t        j                  j                  jl                  j                  u re|jZ                  d   j<                  d   }t)        |t        jn                        r/| jd                  jq                  |jh                  jj                         |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   )r2  r  r  rr   r  rs   r  )r1  r%   r  s      rg   _is_single_tensor_returnzJGraphModuleDeserializer.deserialize_node.<locals>._is_single_tensor_return0
  sG    ,V4FnnGw<1$ 
$$e&6&6* rf   r   r  z_deserialize nyi for torch._higher_order_ops.triton_kernel_wrap.triton_kernel_wrapper_functionalrB  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.r4  z" Unsupported target type for node r  r  z)[deserialize_node] %s: %s(%s, {%s}) -> %sr  )r  r  r  )9r   r  rs   opsr;  itemr!  rF  r7  rl   rK  deserialize_sym_op_inputsr6  r  create_nodedeserialize_sym_op_outputsra  rb  rc  ra   rr   rt   r  deserialize_hoo_inputsdeserialize_metadatars  rl  r  rB   rw   r  r<  r  rO  rP  r  deserialize_outputsru   r-  deserialize_inputsr&  r   r  r  r1  r  r]  rn  _assert_scalarrK   r~  guard_or_defer_runtime_assertr   r   sym_constrain_range_for_sizerQ   _constrain_range_for_size)r   r  r1  r  rF  r  fx_noder]  rs  r  _additional_msgr  r   r#  s                 rg   r  z(GraphModuleDeserializer.deserialize_node/
  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> 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 8rf   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  r1  r  rP  r  )r!  r  r1  r  r  r  r  r  r  r  zUnknown input spec )#r  r  r   r  r4   r  r  deserialize_argument_specr  r  r  rS   r  rF  r  r  r  r  r  r  r  r  r  r+   r  r  r  r  rU   r  r  r  deserialize_constant_inputrl   r   )r   r  s     rg   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!:;;rf   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  rP  r  r  r  r  r  r  zUnknown output spec )r  r  r   r  rD   r  r  r  r  r  r  rS   r  rF  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rU   r  r   )r   r  s     rg   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!;<<rf   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  r4  r  r  r  r  )r   r  r  r  s       rg   deserialize_signaturez-GraphModuleDeserializer.deserialize_signature  sd    		-.&&ADQA44Q7QCFCSCSTa$66q9T
 	
QTs   A;B 
rR  rW  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rj   )r   rr  s     rg   rx   z6GraphModuleDeserializer.deserialize.<locals>.<genexpr>c  s      @"#
1@s   r$   r   r  r  )r)  r  r  r^  r}   r~   r   )Or   r   r  r  r   ShapeEnvr~  r   r  rs   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  rz  r  r~   r  r  r  r   re  r   r}  r|  rk   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  rs  rn  r   r   rO  r  r  r  r^   r_  )r   rR  rW  r~   r   r  count_unbacked_symfloatcount_unbacked_symintunbacked_symfloat_prefixunbacked_symint_prefixrm   r  r*  r  r  r  r)  r  r  type_fieldss                        rg   deserializez#GraphModuleDeserializer.deserialize$  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^ ^^ ^!rF  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)ra  ra   rF  r  r   rb  )r   rF  r  s      rg   r  z$GraphModuleDeserializer.sync_fx_node  sv    4/// 5.T!UVV-4$$T*GLL  8D61K!LMM"::4@Urf   c                 ,     t         fd|D              S )Nc              3   T   K   | ]  }j                  |j                         ! y wrj   )r  r  )rv   inputr   s     rg   rx   zDGraphModuleDeserializer.deserialize_sym_op_inputs.<locals>.<genexpr>  s      K5T++EII6Ks   %()r   )r   r6  s   ` rg   r  z1GraphModuleDeserializer.deserialize_sym_op_inputs  s    KFKKKrf   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   )r2  r"  r6  rF  r!  r  r  r   r'   r&  ro  r.  keyword	iskeywordhas_default_valuer/  r   r  r5  r?  rl  r   )r   r1  r  schema_argsr	  argument_kindsactual_argsr  r]  r2  r  r!  is_positionals                rg   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r6  c                     g }i }|D ]d  }|j                   dk7  r)| j                  |j                        ||j                   <   ;|j                  | j                  |j                               f t	        |      |fS )zO
        For deserializing HOO inputs since HOOs do not have a schema.
        r4  )rF  r  r  ro  r   )r   r6  r  r]  r  s        rg   r  z.GraphModuleDeserializer.deserialize_hoo_inputs  st      	@F{{b &*&<&<VZZ&Hv{{#D226::>?		@
 dV$$rf   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 )!NrU  r  r  r  r  rC  zexpected GraphArgument, got rB  rP  r  r   r   r   rI  rS  r  rM  rO  rV  zUnknown dict type: r   r  )rX  rY  rW  rZ  r  r  ru  )rf  rl  rh  r{  c                     | j                   dk(  ry | j                   dk(  r#j                  | j                  j                     S t	        d       )NrU  r  Unhandled argument )r   ra  rl   rF  ra   )r6  r  r   s    rg    deserialize_optional_tensor_argszSGraphModuleDeserializer.deserialize_input.<locals>.deserialize_optional_tensor_args-  sJ    vv*#;.#;;AGGLLII,/B3%-HIIrf   r  r  r  )1rl   r   ra  r  rF  r   r  !_SERIALIZE_TO_TORCH_MEMORY_FORMATr  _SERIALIZE_TO_TORCH_LAYOUTr  rr   r1   r   rb   rf  r  r  r  r  r  register_moduler  r   r  r   r   r   rI  r  rS  rQ  rR  deserialize_sym_argumentr  rM  rO  r  rk   r  ra   r?  r  r   r   r  r~   rp  r  )r   r  rl   typ_	submodulerm   rn   r  resultdimsfloatsr  r  s   ``           rg   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   rI  r   rU  zUnhandled constant argument z to deserialize)
r   r   r   r   r   r&  rI  r   r   ra   )r   r  s     rg   r  z2GraphModuleDeserializer.deserialize_constant_inputB  s    88xszz?"XX#&&XX$s}}%%XX"$$XX" #?uO!TUUrf   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   rK  r   r   z Unknown symbolic argument type: )rr   rR   r   r   ra  rK  rP   r   rL   r   ra   )r   sym_args     rg   r  z0GraphModuleDeserializer.deserialize_sym_argumentP  s    g~.||x'~~%*33GOODD!12||z)'''*33GOODD1||y(&*33GOODD?yIJJrf   c                 j    | j                  |j                  d   j                  j                  |       y )Nr   )r  r7  rl   rK  )r   r  r  s      rg   r  z2GraphModuleDeserializer.deserialize_sym_op_outputsb  s)    /11!4::BBGLrf   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  TrU  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  )r7  r   r  rr   rl   rR   rL   rP   r  rs  r   generate_getitemr   r  ra  rF  )r  r  r  r  deserialized_metadatar   s        rg   #_deserialize_hop_with_single_returnzXGraphModuleDeserializer.deserialize_outputs.<locals>._deserialize_hop_with_single_returnq  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\\:rf   r  r  _unused)r  r7  r1  rP  r   r  r  rF  rr   rl   rR   rL   rP   rK  r  _renamer  _target_to_strdeserialize_multiple_outputs)r   r  r  r)  s   `   rg   r  z+GraphModuleDeserializer.deserialize_outputse  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Crf   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  rP  )rr   rS   rF  rR   rK  rP   r   r   r  r  r  r  r  ro  rb  r  r<  )r   r  r  r  r~  r(  rF  individual_outputs           rg   r'  z(GraphModuleDeserializer.generate_getitem  s     c>*88D^,;;D-.;;D =d3i[I  !JJ22cN	 3 
 	$ 1244T:; 	%%&;<rf   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  rM  )r  rf  rh  rX  rY  rZ  rW  rl  r  r  r  rU  rP  z Unimplemented node output type: )r  rr   rS   rR   rP   r'  r&   r   r   rb   rl   r  r  r  r  ro  generate_getitemsr  r<  NotImplementedError)	r   r  r  r  r(  r~  r  list_outputr/  s	            rg   r2  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rf   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  rs  r  r7  rr   rl   r?  r   r   rb   rS   r2  r  r   r  ra  rF  )r   r  r  r(  r  s        rg   r-  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\\2rf   rs  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  rg  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"   rs   r$   )r  rs   r   ri  rp  rO  rP  )rg  r  ro  r1  rF  r   s        rg   deserialize_meta_funczKGraphModuleDeserializer.deserialize_metadata.<locals>.deserialize_meta_func  s    F ++J7*;*A*A#*Fqr*J'"--g6*;*A*A#*Fqr*J'001BCCF/ 3vt,,,$VT2F	3
 Mrf   r  c                     | ||ffS rj   re   )r  r
  r  s      rg   import_nn_module_stackzLGraphModuleDeserializer.deserialize_metadata.<locals>.import_nn_module_stack1  s    T2J&rf   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  ro  r  r   )rs  r   startrT  r6  rI  endcs           rg   metadata_splitzDGraphModuleDeserializer.deserialize_metadata.<locals>.metadata_split5  s    q!1'1 (FCAvQaQca1f

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

8EF+,s8q=(I#c(T  
rf   c              3   4   K   | ]  }  |         y wrj   re   )rv   r  r;  rA  s     rg   rx   z?GraphModuleDeserializer.deserialize_metadata.<locals>.<genexpr>H  s#      # 't(<=#s   r  r  r  r  r  )
rn  r&  r  ri  r  ro  r   r   r   _deserialize_from_node)r   rs  r  r  r9  nn_module_stack_strr  source_fn_st_strr  source_fn_strrF  
target_strtorch_fn_str
custom_strfrom_node_strr;  rA  s   `              @@rg   r  z,GraphModuleDeserializer.deserialize_metadata  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
rf   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.
        Nr6  )rr   r?  r   r   rb   r   
_from_dict)r   rK  fn_dictr  s       rg   rC  z.GraphModuleDeserializer._deserialize_from_nodea  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  rP  r  rM  r  r  r4  )r  r  r   r  rS   r  rF  rR   r  rK  rP   rM  r  r  r  r  s     rg   r  z1GraphModuleDeserializer.deserialize_argument_specs  s    		2A666[ $$!++*:*:;;VV|#$$!,,*>*>??VV~%&&ANN,B,BCCVV&&&__))1G1G1J  &&Bd6L6LQ6OPPrf   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  r?   r6  r  r7  r   r	  r
  r  r  s       rg   !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  rQ  r  s      rg   r  z5GraphModuleDeserializer.deserialize_module_call_graph  sg     			56 +

  II  ::5??K

 
	
 

s   AA,)r   Nrj   )NN)Srb   rc   rd   dataclassesr
   r_  r   r	   r   rf  r&  rl  rp  r   r   r   r   r  ry  rQ   rs   r  rO   r  rK   r  rT   r   r   r+   r  r  r  rB   r  r0   r  r   r  r4   r  rD   r  r3   r4  r  r2   r  r  r   r   r   r   r   r  r  r  r  r?  r@   r  r&   r  r*   r  r  r  r  rS   rR   rP   r'  r2  r-  r  r   rC  r5  r  r?   rQ  r>   r  re   rf   rg   r^   r^     su   O O O( 8D>  0- -c 4 @D/-/-#&:#5#</-	/-bV ell0B .x EENN4J g $2F  
 
0
			
P%((--#2E2L P({% {EHHNN {zB1 B1h B14 B1H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  	!
rf   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)r_   Nexpected_opset_versionc                     i | _         |r| j                   j                  |       d| j                   vr,t        j                  j	                         | j                   d<   y y r:  )rU  r<  rs   r  r=  )r   rU  s     rg   r   z$ExportedProgramDeserializer.__init__  sR    68#!''../EF44427((2T2T2VD''/ 5rf   r  rz  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  rk   rn  r  )r   r  rz  r(  rm   rn   symbols          rg   deserialize_range_constraintsz9ExportedProgramDeserializer.deserialize_range_constraints  s    
 			56(..0 	DAq.22155v5		DaK,-!&)QST	 ! rf   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~   rG  z
[deserialize]: %s)$rr   r-   r   r   rb   rF  rC  rI   rD  ra   r(  rk   r   r   r"  min_valr   max_valr^   r  r)  rY  r^  r  r  r  r}   r  r   r~   rG  r   rI  rO  r  r  )r   r|   r}   r~   r   r[  versionrm   rn   r  resr(  r  s                rg   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rj   )rb   rc   rd   r  r&  r   r   r   r   r   r   rY  r-   rs   r  r   r   r   r  r  re   rf   rg   r_   r_     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

; 
		;rf   r_   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   )	rr   r   rl   r   base64	b64encoder   superr!  )r   r0  	__class__s     rg   r!  zEnumEncoder.default  sL    c4 99c5!##C(//88ws##rf   )rb   rc   rd   r!  __classcell__)ri  s   @rg   r   r     s    $ $rf   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rj   )r   r  s     rg   rx   z%_dataclass_to_dict.<locals>.<genexpr>  s     8q'*8s   Infinityz	-InfinityNaN)rr   rZ   r   r   rl   rS  is_dataclassr  rF  rP  r?  r   r  rk   r   r  r   isnan)r0  fr  rm   rn   s        rg   r   r     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r0  c                 j    t        j                  t        |       t        d      j	                  d      S )NF)r   	allow_nanr   )r   r   r   r   r   )r0  s    rg   _to_json_bytesrt     s+    ::(-;%PWW rf   Tr>  r|   r8  r?  r@  rA  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)Nr>  r]  )r   r   r]   r[   rr   r|   r-   r   r   rb   rt  r{   r}   r~   )	r|   r8  r   r?  r@  rA  serialized_program
json_bytesr   s	            rg   r[   r[   &  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 rj   )rr   r&  rP  r%   typing
ForwardRef_resolve_schema_cls__forward_arg__)r   resolveds     rg   r{  r{  G  sK    #s63-O#v(()"3#6#677Jrf   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 )globalnsre   )"r{  rr   r&  r   ry  
get_originr   r   
__origin__Uniontypes	UnionTyper   get_argsr  
issubclassrZ   r  rb   rj  rk  ri  rl  get_type_hintsvarsr%   r   rS  ro  r  rF  r?  rk   r   )r   dataty_argsr  _value
type_hints
field_typer  rq  rF  new_field_objd_typerh   v_typerm   rn   s                   rg   r   r   Q  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 re  )r   r   r   r   )r   r  artifact_strartifact_dictartifact_dataclasss        rg   _bytes_to_dataclassr    s3    !((1LJJ|,M+C?rf   FrZ  rU  c                :   t        | j                  t              s+t        dt	        | j                        j
                         t        t        | j                        }t        |      j                  || j                  | j                  | j                  |      S )Nzexpected bytes, got rZ  )rr   r|   r   r   r   rb   r  r-   r_   r  r}   r~   r   )r   rU  r[  serialized_exported_programs       rg   r  r    s     h//7"4(A(A#B#K#K"LM
 	
 #622# ''=>JJ##= K  rf   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 )Nr6  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|        ) NrU  r  r  r   rX  r   rY  rI  rZ  rS  r  rf  rM  rh  r  r  r  r  r   rW  rO  rl  rC  r{  r  r  r  r  rV  ru  z+Unknown input type to the ExportedProgram: )r   r  r  r  rf  rM  rh  rO  rl  r{  r  ru  r   ry  s    rg   _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Srf   c                     t        |t              s!t        dt        |      j                         t        j                  |  |             y )Nr1  )rr   r&   r   r   rb   r  tree_map)rq  r6  r  s     rg   for_argsz%_canonicalize_graph.<locals>.for_args  s>    !X& #:47;K;K:L!MNN=+,rf   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)rb   rc   rd   r?  r   r   re   rf   rg   Edgesr    s    s)OHrf   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|        )NrK  )r   r   r   Unknown argument type: r  rU  zUnknown optional tensor type: )rr   rS   rF  rR   rL   rP   r   rK  r   rC   r  r+   ry  s    rg   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Crf   c                 >     |       x}rj                  |       y y rj   )r   )r6  r   r  graph_inputss     rg   	add_inputz:_canonicalize_graph.<locals>.sort_nodes.<locals>.add_input  s%     #1# $$Q' $rf   c                 L     |       x}r|v rt        d|d      |<   y y )Nsymbol z already in def_table)r   )r6  r   	def_tabler  r~  s     rg   add_defz8_canonicalize_graph.<locals>.sort_nodes.<locals>.add_def  s<     #1#I~,wqe;P-QRR#&IaL $rf   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  ro  r  )	r6  r   r  r~   r  edgesr  r  r~  s	      rg   add_edgez9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_edge(  s     #1#I~	)L0"0")!.O P#  #A,C#JOO**3/#JNNa'N $rf   c                 ^     |       x}r"|v rt        d|d      t              |<   y y )Nr  z already in rank)r   r  )r6  r   r  ranks     rg   add_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_rank9  s@    QKq9(71%7G)HIId)Q  rf   c                 ,     |       }|r	|vr|   S y)Nr  re   )r6  r   r~   r  r  s     rg   get_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_rank?  s"    AQi'Awrf   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 rj   )ro  )r  r  rankss    rg   r  zc_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks.<locals>.<lambda>L  s    5<<#< rf   re   )r  r  r  r  s    @rg   	get_rankszQ_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranksJ  s    <a@rf   )r6  rF  r  heapqheappushr1  )	r~  r  r   r6  	args_rank
candidatesr  r  r8  s	        rg   add_candidatez>_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidateI  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  r7  r6  r  r   rk   r  r  r  heappopro  r   r  clear)r8  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   `             @@@@@@@@rg   
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!" 
rf   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  rl  new_name
name_tables      rg   r+  z8_canonicalize_graph.<locals>.rename_def.<locals>._renamet  so    3z?+,H:%$y<R%STT#+Jx v%$yN%KLL%zz(3F8Orf   rK  r  )rr   rS   rF  r9  rR   r   rK  r:  rP   r<  rL   r;  r+   r>  r   )r6  r+  r  r  s     rg   
rename_defz'_canonicalize_graph.<locals>.rename_defs  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#!>??rf   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|        )NrK  r  r  )rr   rS   rn  rF  rR   rP   r   rK  rL   rC   r  r+   r   )r6  r  s    rg   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#!>??rf   r   r  rC  _gr$   )	r6  r7  r8  r9  r:  r<  r;  r=  r>  )r&   r8  r  r   r7  r6  r  rs  r  r  sortedr9  rk   r  
itemgetterr:  r<  r;  r>  r   _canonicalize_graphrC  r  rF  r0   r=  )r  sorted_outputsr  r~   r  sorted_nodesr  r  r  rT  r  sorted_tensor_valuessorted_sym_int_valuessorted_sym_float_valuessorted_sym_bool_valuessorted_custom_obj_valuescounterr   r6  r  r  r  r  s   ` ``                @@@rg   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 *rf   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 rj   )r  )r  s    rg   r  zcanonicalize.<locals>.<lambda>  s    PQPUPU rf   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  r=  r     r  r   r     Unknown input type: )rr   r4   r   r   rb   r  r  r  r  r  r  r  r  r  rF  )r  r~  _argr  s       rg   
rank_inputz canonicalize.<locals>.rank_input  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!>??rf   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  r=  r  r   Unknown output type: )
rr   rD   r   r   rb   r  r  r  r  r  )r   r~  r  r  s       rg   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!?@@rf   c              3   &   K   | ]	  \  }}|  y wrj   re   rv   r~  r  s      rg   rx   zcanonicalize.<locals>.<genexpr>E  s     *Fa1*F   re   c              3   &   K   | ]	  \  }}|  y wrj   re   r  s      rg   rx   zcanonicalize.<locals>.<genexpr>M  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  rK  r   Unknown sym_int type: rM  r   Unknown sym_float type: )rU  r   r   r   rI  r  r  r  r  r  r  r  r  )rr   r4   r   r   rb   r  r  r  rF  r  rK  rM  r  r  r  r  r  )r  r  r   r   rq  t_custom_objtokreplace_tables          rg   replace_inputz#canonicalize.<locals>.replace_inputS  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!>??rf   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  rK  r   r  rM  r   r  )rU  r   r   r   rI  r  r  r  r  r  r  r  r  r  )rr   rD   r   r   rb   r  r  r  rF  r  rK  rM  r  r  r  r  r  r  r  r  )
r   r  r   r   rq  gur  r  r  s
           rg   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!?@@rf   r  )r  r  r  rE  )"rL  deepcopyr   r  r  r8  rk   r  r  r(  rI  r)  r  r  r  r  r6  r  r   r7  r  r   r   r&  r  r%  r  r-   r2   r3   r?  rF  rG  rH  )r  r~   r8  r(  rI  r  r  r  r  r  
sorted_insr  r  sorted_outsr  r  sorted_graphr  r  r  r  s                      @@rg   rP  rP    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
 $+((,,&& rf   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r3  ri  r   s    rg   r  zExtensionHandler.namespace      !S]]O3S"TUUrf   c                 2    t        | j                   d      Nz op_name() must be implementedr  r   rw   s     rg   r  zExtensionHandler.to_op_name      !S]]O3Q"RSSrf   rF  c                 2    t        | j                   d      r   r  )r   rF  s     rg   rk  zExtensionHandler.from_op_name  r  rf   c                 2    t        | j                   d      )Nz  op_schema() must be implementedr  r  s     rg   r0  zExtensionHandler.op_schema  r  rf   N)rb   rc   rd   r   classmethodr&  r  r  rk  rs   FunctionSchemar0  re   rf   rg   r  r    s     V# V V Ts T T T T T Ve22 V Vrf   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 rs   builtinszop_type module z, should not start with 'torch' or 'builtins'z
namespace z is already registeredN)r  r  r   r/  rr   r   rb   rc   r  r  rj  )r  r  s     rg   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;<rf   c                  <    t        t        j                               S rj   )r   r/  ri  re   rf   rg   r-  r-    s    (--/00rf   r/  rj  rj   (,  rf  rL  r   rS  r  r#  r  r   r  loggingr  r  rp  r/  r  ry  collectionsr   r   collections.abcr   r   r   r   
contextlibr	   r
   r   enumr   r   r   r   r   r   r   rs   torch.export.exported_programexportr|   r  torch._export.non_strict_utilsr   torch._export.verifierr   torch._subclasses.fake_tensorr   r   torch.fx._symbolic_tracer   torch.fx.experimentalr   torch.fx.tracebackr   torch.utilsr   r  torch.utils._pytreer   r   torch.utils._sympy.numbersr   torch.utils._sympy.symbolr   r   torch.utils._sympy.value_rangesr   torch.utils._tracebackr    torch.utils._tritonr!   r  r#   r4  r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   unionrZ   __all__	getLoggerrb   r  r  ra   r  ro   r   r   r   MetaTyperZ  r  uint8BYTEint8CHARuint16UINT16int16SHORTint32INTint64LONGfloat16HALFfloat32FLOATfloat64DOUBLE	complex32COMPLEXHALF	complex64COMPLEXFLOAT
complex128COMPLEXDOUBLEBOOLbfloat16BFLOAT16float8_e4m3fnFLOAT8E4M3FNfloat8_e5m2
FLOAT8E5M2float8_e4m3fnuzFLOAT8E4M3FNUZfloat8_e5m2fnuz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,  r2  r4  r   rA  rU  r  r  r\   r]   r^   r_   JSONEncoderr   r   rt  r[   r{  r   r  r  r  r   rP  r  r  r-  r/  rj  re   rf   rg   <module>r     s
         	      	    / B B % (  8 8   * * Q 0 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 I
 I
 I
X& 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*:%; ;< Arf   