
    sg1                       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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mZmZ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+ d d	l,m-Z-m.Z. d d
l/m0Z0 d dl1m2Z3 d dl4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: ddl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZh ddlimjZj ddlkmlZl g dZm ej                  eo      Zp G d deq      Zrdeeef   fdZsee-ete!j                  eue!j                  e%j                  f   ZvdZwe!j                  eZj                  e!j                  eZj                  e!j                  eZj                  e!j                  eZj                  e!j                   eZj                  e!j                  eZj                  e!j                  eZj
                  e!j                  eZj                  e!j                  eZj                  e!j                  eZj                  e!j                  eZj                  e!j                  eZj                  e!j                  eZj                   iZ ese      Ze!j&                  eOj(                  e!j*                  eOj,                  e!j.                  eOj0                  e!j2                  eOj4                  e!j6                  eOj8                  e!j:                  eOj:                  e!j<                  eOj>                  iZ ese      Ze!jD                  eQjF                  e!jH                  eQjJ                  e!jL                  eQjN                  e!jP                  eQjR                  iZ ese      Ze
jX                  e
jZ                  e
j\                  e
j^                  e
j`                  e
jb                  e!jd                  e!jf                  e!jh                  e!jj                  e!jl                  e!jn                  hZe
jr                  e
jt                  e
jv                  e
jx                  e
jz                  e
j|                  e!j~                  hZ ed eD              rJ  ed eD              rJ e G d d             Ze G d d             ZdeAd e!j                  fd!Zd"eete!j                  f   d e`fd#Zd"eeue!j                  f   d e\fd$Zd%e!j                  d ecfd&Zdaed'   ed(<   d)e-fd*Zd+ed,eud e-fd-Zd.ee   d efd/Zd0eeeef   eed1f   ef   fd2Zd3e j                  d4efd5Zd e j                  fd6Zd7ee j                  e:f   d eeeYf   fd8Zd9 Zd eufd:Zd;ed eufd<Ze G d= d>             Z G d? d@e۫      Ze G dA dBeܬC             Ze G dD dEeܬC             Ze G dF d'eܬC             Ze G dG dHeܬC             Z G dI dJej                        ZdK Z	 d]dLe%j                  dMeeeetf      d efdNZdO Z	 d]d.edPeeeetf      d e%j                  fdQZd eeEeeef   f   fdRZdSeBd eBfdTZ G dU dV      ZdWee   dXee   fdYZdZ Zi Zeee   ee   f   ed[<   i Zeeee   f   ed\<   y)^    N)contextmanager)	dataclassfield)Enum)AnyCallablecastDictfinalIteratorListOptionalSetTupleTypeUnion)SchemaVersion)load_verifier)FakeScriptObject)
FakeTensorFakeTensorMode)symbolic_shapes)_pytree)treespec_dumpstreespec_loads)int_oo)ValueRanges   )-ArgumentBufferMutationSpecConstantInputSpecConstantValueCustomObjArgumentDeviceExportedProgramGradientToParameterSpecGradientToUserInputSpecGraphGraphArgumentGraphModuleGraphSignature	InputSpecInputToBufferSpecInputToCustomObjSpecInputTokenSpecInputToParameterSpecInputToTensorConstantSpecLayoutLossOutputSpecMemoryFormatModuleCallEntryModuleCallSignatureNamedArgumentNodeOptionalTensorArgument
OutputSpecOutputTokenSpecRangeConstraint
ScalarTypeSCHEMA_VERSIONSymBoolSymBoolArgumentSymExprSymExprHintSymIntSymIntArgumentTensorArgument
TensorMetaTokenArgumentTREESPEC_VERSIONUserInputMutationSpecUserInputSpecUserOutputSpec)_Union   )remove_proxy_from_state_dict)	serializeGraphModuleSerializerExportedProgramSerializerGraphModuleDeserializerExportedProgramDeserializerc                       e Zd Zy)SerializeErrorN)__name__
__module____qualname__     P/var/www/html/venv/lib/python3.12/site-packages/torch/_export/serde/serialize.pyrU   rU   n   s    rZ   rU   dc                 j    | j                         D ci c]  \  }}|j                  | c}}S c c}}w N)itemsvalue)r\   kvs      r[   _reverse_maprc   r   s(    #$779-41aAGGQJ---s   /;c              #   d   K   | ](  }t        |t        j                  j                         * y wr^   
isinstancetorch_ops
OpOverload.0ops     r[   	<genexpr>rn      s!     Lz"ejj334L   .0c              #   d   K   | ](  }t        |t        j                  j                         * y wr^   rf   rk   s     r[   rn   rn      s!     Mz"ejj334Mro   c                   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)rV   rW   rX   bytes__annotations__rY   rZ   r[   rr   rr      s    rZ   rr   c                   6    e Zd ZU eed<   eed<   eed<   eed<   y)_SerializedProgramrs   rt   ru   rv   N)rV   rW   rX   r%   rx   rw   rY   rZ   r[   rz   rz      s    %%rZ   rz   returnc                     | j                    t        j                  | j                        S t        j                  | j                  | j                         S )N)typer}   index)r   rh   devicer}   )r\   s    r[   deserialize_devicer      s7    ww||((<<QVV17733rZ   sc                 v   t        | t        j                  t        j                  t
        f      rt        j                  |       rt        j                  t        |             S t        | t        j                  t        j                  f      sJ | j                  j                  (t        j                  t        t        |                   S t        j                  t        t        |       t        j                  | j                  j                                    S t        d|  dt        |        d      )Nas_intas_exprhintz,SymInt should be either symbol or int, got `` of type ``)rg   rh   rC   sympySymbolintr   is_concrete_intcreatenoder   rA   strrB   rU   r}   r   s    r[   serialize_sym_intr      s    !ellELL#67**1-==A//a%,,!=>>>vv{{"}}WSV_==}}#CF1C1C166;;1WX  :1#[a	QRS
 	
rZ   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   )rg   rh   r?   boolr   is_concrete_boolr   rA   r   rU   r}   r   s    r[   serialize_sym_boolr      ss    !emmT*+++A.>>$q'22>>'3q6*BCC<QC{4PQ7)STU
 	
rZ   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	        d      t        | j                           S c c}w c c}w )z.
    Extract a TensorMeta describing `t`.
    r~   r   )dtypesizesrequires_gradr   stridesstorage_offsetlayout)rF   _TORCH_TO_SERIALIZE_DTYPEr   shaper   r   r$   r   r}   r   stride_TORCH_TO_SERIALIZE_LAYOUTr   )r   r   s     r[   serialize_tensor_metar      s     '0-.WW5 #5oo188==?/0xxz:!"1%:(+)!((3 5 ;s   C
CrR   _CURRENT_DESERIALIZERfake_tensorc                     t        | t        j                  j                        }t	        |       }t        j                  t        |      t              j                  d      }t        ||ffS Nclsutf-8)rg   rh   nn	Parameterr   jsondumps_dataclass_to_dictEnumEncoderencode_reconstruct_fake_tensor)r   is_parametertensor_metatensor_meta_bytess       r[   _reduce_fake_tensorr     sY    k588+=+=>L'4K

;'[fWo  $&7%FFFrZ   serialized_tensor_metar   c                     t        j                  | j                  d            }t        t        |      }t
        J d       t
        j                  |      }|rt        j                  j                  |      }|S )Nr   z)Need access to current deserializer state)
r   loadsdecode_dict_to_dataclassrF   r   deserialize_tensor_metarh   r   r   )r   r   json_tensor_metar   r   s        r[   r   r     sq     zz"8"?"?"HI$Z1ABK 	)323)'??LKhh((5rZ   artifactc                 R   | yt         t        j                  vsJ d       	 t        j                  t         t               t        j                         }t        j                  | |       |j                         t        j                  t         = S # t        j                  t         = w xY w)NrZ   z0Refusing to stomp on existing FakeTensor reducer)
r   copyregdispatch_tablepickler   ioBytesIOrh   savegetvalue)r   buffers     r[   serialize_torch_artifactr   (  s     	'000:9:0/z#67 	

8V$ "":.G"":.s   AB B&
serialized.c                     t        | t        t        f      r| S t        |       dk(  ri S t	        j
                  |       }|j                  d       t        j                  |d      }t        |t        t        f      sJ |S )Nr   F)weights_only)	rg   dicttuplelenr   r   seekrh   load)r   r   r   s      r[   deserialize_torch_artifactr   >  si    *tUm,
:!	ZZ
#F
KKNzz&u5Hh...OrZ   valadjustc                    | t         j                  t        fv rt        j                  S | t         j                   t         fv rt        j                   S 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   mathinfrg   Integerr   logwarningr}   r   r   RuntimeError)r   r   s     r[   _sympy_int_to_intr   K  s    
uxx  xx
y6'""y#u}}%3x KK	Cy#v zz#	6	yy~4VH=>>rZ   c                     | t         j                  k(  rt        S | t         j                   k(  rt         S t        j                  |       S r^   )r   r   r   r   r   )r   s    r[   _int_to_sympy_intr   c  s6    
dhh
txxiw==rZ   range_constraintsc                     | j                         D ci c]C  \  }}t        |      t        t        |j                  d      t        |j
                  d            E c}}S c c}}w )Nr   r   )r_   r   r<   r   lowerupper)r   ra   rb   s      r[   serialize_range_constraintsr   l  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 )	rg   rh   ri   rj   _schemar}   _serialization_registry	op_schemar   )targets    r[   _get_schema_from_targetr   x  s^    &%**//0~~	f0	0&tF|4>>vFF
0f?
@@rZ   c                     t        |       }|j                  }t        |      dk(  xr' t        |d   j                  t
        j                        S )Nr   r   )r   returnsr   rg   	real_typerh   
TensorType)r   schemar   s      r[   _is_single_tensor_returnr     s@    $V,FnnGw<1SGAJ,@,@%BRBR!SSrZ   r   c                     t        |       }|j                  }t        |      dk7  ry|d   j                  }t	        |t
        j                        xr( t	        |j                         t
        j                        S )Nr   Fr   )	r   r   r   r   rg   rh   ListTypegetElementTyper   )r   r   r   return_types       r[   _is_single_tensor_list_returnr     sf    $V,FnnG
7|q!*&&Kk5>>2 z""$e&6&68 rZ   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<   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_valuesFis_single_tensor_returncustom_obj_valuesN)rV   rW   rX   r   listr   r   r   rx   r   r  r8   r   r  r
   r   rF   r  rC   r  r?   r  r   r  r#   rY   rZ   r[   r   r     s    "48FDN8#D9GT(^9d3E4:3+0+FM4Z(F(-d(CNDf%C*/*EOT#w,'E$)T)6;D6QtC!223QrZ   r   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)rg   r	  	TypeErrorrV   r}   __new__r   )metaclsnamebases	classdictbs        r[   r  zFinal.__new__  sQ     	WA!U#&4T UVV	W ||GT5$y/BBrZ   N)rV   rW   rX   r  rY   rZ   r[   r	  r	    s    CrZ   r	  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e
j                  j                     fdZdefdZde
j                  j                  deeef   fdZdej0                  defdZdee   fdZ	 d2dedee   fdZdee   fdZdefdZ defdZ!	 d2dee
jD                  jF                     de#fdZ$de%fdZ&de'fdZ(de'fdZ)dejT                  de*fdZ+dejX                  de,fdZ-d ej                  de.fd!Z/d"ej`                  de#fd#Z1d$ejd                  de2fd%Z3deej                     dee   fd&Z4de
j                  j                  dee#   fd'Z5de
j                  j                  dee#   fd(Z6d)ed*ede#fd+Z7de
j                  j                  dee%   fd,Z8d-e
j                  jr                  de:fd.Z;d/eeef   fd0Z<d-e
j                  jr                  de9fd1Z=y)3rP   graph_signaturemodule_call_graphc                 Z    t               | _        || _        || _        i | _        i | _        y r^   )r   graph_stater  r  custom_objsduplicate_getitem_nodes)selfr  r  s      r[   __init__zGraphModuleSerializer.__init__  s.    
 &<.!2=?79$rZ   c              #   r   K   | j                   }t               | _         	 d  || _         y # || _         w xY wwr^   )r  r   r  saveds     r[   save_graph_statez&GraphModuleSerializer.save_graph_state  s3       %<	%$DuDs   7+ 7	47r   c           
      $   |j                   dk(  sJ t        |j                  d   t        j                        ret        j                  t        |j                              }t        |j                  d         | j                  j                  |j                  <   nNt        |j                  d   t        j                        rt        d      t        |j                  d   t        t        t         t"        t%        d       f      r| j'                  |j                  d         }nt        |j                  d   t(        j*                        r|j                  d   j,                  }t        j                  t+        |j                  |            }| j/                  |j                  d         | j                  j0                  |j                  <   nt        d|j                  d          | j                  j2                  j5                  |       y )	Nplaceholderr   r  	as_tensorz*SymInt graph input is not implemented yet.r  	class_fqnas_custom_objz Unimplemented graph input type: )rm   rg   metarh   Tensorr   r   rE   r  r   r  r  rC   AssertionErrorr   r   r   floatr}   serialize_inputepr#   r%  serialize_script_obj_metar  r   append)r  r   graph_inputr%  s       r[   handle_placeholderz(GraphModuleSerializer.handle_placeholder  s   ww-'''dii&5"//N		4RSK8M		% 9D**4995 		%(%,,7 !MNN		%(3c5$t**MN..tyy/?@K		%("*>*>?		%(22I"///TYY)TK ..tyy/?@ ..tyy9 !#CDIIeDTCU!VWW&&{3rZ   c                    |j                   dk(  sJ t        |j                        dk(  sJ d       |j                  d   }t        |t        j
                  j                        r3d| j                  _        | j                  |      g| j                  _
        y t        |t        t        f      sJ |D cg c]  }| j                  |       c}| j                  _
        y c c}w )Noutputr   z"FX.Node's args should have one argr   T)rm   r   argsrg   rh   fxr8   r  r  r,  r   r   r  )r  r   	node_argsargs       r[   handle_outputz#GraphModuleSerializer.handle_output  s    ww("""499~"H$HH"IIaL	i/7;D4(,(<(<Y(G'HD$i%777MV'Wc(<(<S(A'WD$'Ws   3C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.)rg   r   rW   
startswithreplacerV   )r  r   modules      r[   serialize_operatorz(GraphModuleSerializer.serialize_operator  sr    fc"M)),7 &&..|[IFXQv/00''(&//):;;rZ   c           
         |j                   dk(  sJ |j                  t        j                  u ry |j                  j                  d      }|j                  t        v s@|j                  t        v s.|-t        |t        j                  t        j                  f      rt        |j                        dk(  sJ t        | j                  |j                        | j!                  |j                  |j"                        |j                  t        v st        |t        j                        r0t%        j&                  | j)                  |j*                  |            n/t%        j&                  | j-                  |j*                  |            g| j/                  |            }nt        |j                  t        j0                  j2                        rwt        | j                  |j                        | j5                  |j                  |j"                  |j                        | j7                  |      | j/                  |            }nt        |j                  t        j0                  j8                        rlt        | j                  |j                        | j;                  |j"                  |j                        | j=                  |      | j/                  |            }nCt?        |j                        t@        v rt?        |j                        t@        v sJ t?        |j                         d       t@        t?        |j                           }|jC                         }|jE                  |j                        }t        |tF              rt        |tF              sJ d|vrd|vsJ t        d	| d| | j5                  |j                  |j"                  |j                        | j7                  |      | j/                  |            }ntI        d
|j                   d      | jJ                  jL                  jO                  |       y )Ncall_functionr   r   
as_sym_intas_sym_bool)r   r   r   metadataz* is not supported in export serialization.:#zSerializing z is not supported)(rm   r   operatorgetitemr(  get_SYM_INT_OPS_SYM_BOOL_OPSrg   rh   rC   r?   r   kwargsr8   r>  serialize_sym_op_inputsr4  r   r   serialize_sym_int_outputr  serialize_sym_bool_outputserialize_metadatari   rj   serialize_inputsserialize_outputsHigherOrderOperatorserialize_hoo_inputsserialize_hoo_outputsr}   r   	namespace
to_op_namer   rU   r  r  r/  )r  r   meta_valex_nodehandlerrW  op_names          r[   handle_call_functionz*GraphModuleSerializer.handle_call_function  sG   ww/))) ;;(***99=='KK<'{{m+$Hu||U]]>[)\t{{#q(((..t{{;33DKKK
 |3z(ELL7Y OO#'#@#@H#U "$($B$B499h$W 006G UZZ%:%:;..t{{;,,T[[$))T[[Q..t4006G UZZ%C%CD..t{{;00DKKH2248006	G $++"99$(??  BDDUCV  WA  BB  B?-d4;;.?@G))+I((5Gi-*Wc2JJJi'Cw,>>>9+Qwi0,,T[[$))T[[Q..t4006	G !<}<M!NOO%%g.rZ   c                      y r^   rY   )r  r   s     r[   handle_get_attrz%GraphModuleSerializer.handle_get_attr)  s    rZ   c                     d }|j                   D ]c  }|j                  t        j                  u s
J | d       ||j                  d   k(  s<||}A|j
                  | j                  |j
                  <   e |S )Nz is not a getitem noder   )usersr   rH  rI  r4  r  r  )r  r   r   	user_nodeusers        r[   _output_node_at_indexz+GraphModuleSerializer._output_node_at_index,  s    	JJ 	MD;;("2"22Stf<R4SS2		!$$ $I ?HnnD00;	M rZ   c                 d    | j                  ||      }||j                   d| S |j                  S )N_unused_)rd  r  )r  r   r   rb  s       r[   _output_node_name_at_indexz0GraphModuleSerializer._output_node_name_at_index9  s9    ..tU;	ii[00>>!rZ   c           	      0   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	<   |S |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k(  sJ | \  }}t        |t              sJ t        |t              sJ |dz   |z   S )NrM   ,)rg   r   r   r   )r   pathtys      r[   export_nn_module_stackzHGraphModuleSerializer.serialize_metadata.<locals>.export_nn_module_stackG  sS    !#u-#c(a-??b!$,,,!"c***czB&rZ   rl  source_fn_stackr   r   torch_fncustomz-Failed to serialize custom metadata for node z with error )r(  rJ  r_   ST_DELIMITERjoinr>  r  r   r   	ExceptionrU   r  )r  r   retri  rj  ro  ra   rb   nn_module_listsource_fn_st	source_fnsource_fn_listrq  rr  es                  r[   rQ  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 
s
/  $CDII;l[\Z]^s$   E +#E&E+ +	F4FFscript_obj_metac                 D    t        |j                  |j                        S Nr$  )r#   r  r%  r  r|  s     r[   r.  z/GraphModuleSerializer.serialize_script_obj_metaj  s#     ! %%%//
 	
rZ   c           	         t        |t        j                  j                        r.|j                  j
                  D cg c]  }|j                   }}nH|t        v s
|t        v sJ t        t        j                  |      j                  j                               }g }t        ||      D ]0  \  }}|j                  t!        || j#                  |                   2 |S c c}w Nr  r7  )rg   rh   ri   rj   r   	argumentsr  rK  rL  r  inspect	signature
parameterskeyszipr/  r7   r,  )r  rm   r4  r7  
args_namesserialized_args	args_names          r[   rN  z-GraphModuleSerializer.serialize_sym_op_inputsr  s    b%**//0.0jj.B.BCs#((CJC%})<<<g//3>>CCEFJ!*d3 	NIs""9$2F2Fs2KL	  Ds   CNr   c           
      >   t        |t        j                  j                  gt	                     sJ |xs i }g }t        |      }t        |j                        D ]  \  }}|j                  |v rN|j                  t        |j                  | j                  ||j                     |j                                     b|j                  sR|t        |      k  rD|j                  t        |j                  | j                  ||   |j                                      |S r  )rg   rh   ri   rj   _registered_extension_typesr   	enumerater  r  r/  r7   r,  r}   
kwarg_onlyr   )r  r   r4  rM  r  r   i
schema_args           r[   rR  z&GraphModuleSerializer.serialize_inputs  s     &5::#8#8"Y;V;X"YZZZ2(0&v'7'78 	MAz&(&&!'__ 00
1H*//Z  **q3t9}&&!'__ 00a*//J %	( rZ   c                    |D cg c]  }t        d| j                  |              }}|j                  |j                         D cg c]!  \  }}t        || j                  |            # c}}       |S c c}w c c}}w )zM
        For serializing HOO inputs since HOOs do not have a schema.
         r  )r7   r,  extendr_   )r  r4  rM  ar   r  s         r[   rU  z*GraphModuleSerializer.serialize_hoo_inputs  s     

 	 ((+
 
 	  &||~D! 4T-A-A!-DE	
 
s   #A8&A=
c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S r^   )rg   r   rh   r5  r8   r  r  r  r  r7  s     r[   is_sym_int_argz$GraphModuleSerializer.is_sym_int_arg  sE    #s# 
sEHHMM* <D,,;;;	
rZ   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S r^   )rg   r   rh   r5  r8   r  r  r  r  s     r[   is_sym_bool_argz%GraphModuleSerializer.is_sym_bool_arg  sE    #t$ 
sEHHMM* =D,,<<<	
rZ   arg_typec           
      B    dd l mc m} |j                  |j                  ft        |t        j                  j                        r|j                  dk(  rt        |j                  t              sJ t        |j                  j                  |j                        }t        |t        j                        rt!        d      t        |t        j                  j"                        rU j%                         5   j'                  |      }d d d        t)        j*                  t-        |j                              S t!        d|j                   dt/        |              j1                  |      r4t)        j*                  t3        j*                  |j4                        	      S  j7                  |      r4t)        j*                  t9        j*                  |j4                        
      S t        |j:                  d   t<        j>                        rBt)        j*                  t?        |j4                  |j:                  d   j@                              S |j4                   jB                  v r9 jB                  |j4                     }t)        j*                  tE        |            S t)        j*                  tE        |j4                              S t        |      r9|jG                         }|J d       t)        j*                  tE        |            S t        |t        jH                        r3t)        j*                  t3        j*                  t        |            	      S t        |tJ              rt)        j*                  |      S t        |t              rt)        j*                  |      S t        |tL              rt)        j*                  |      S t        |tN              rt)        j*                  |      S |t)        j*                  d      S t        |tP        tR        f      rtU        |      dk(  r|t        |t        jV                        r|jY                         }t        |t        jZ                        sJ |jY                         }t        |t        jV                        r|jY                         }t        |t        j\                        rt)        j*                  g       S t        |t        j^                        rt)        j*                  g       S t        |t        j`                        rt)        j*                  g       S t        |t        jb                        rt)        j*                  g       S t        |t        jd                        rt)        j*                  g       S t!        d| d      tf        ji                  d       t)        j*                  g       S tk        d |D              rt)        j*                  tQ        |            S tk        d  |D              rt)        j*                  tQ        |            S tk        d! |D              rt)        j*                  tQ        |            S tk        d" |D              rt)        j*                  tQ        |            S tk        d# |D              rAt)        j*                  |D 	cg c]!  }	t3        j*                  t        |	            # c}	$      S tk         fd%|D              rg }
|D ]  }	t        |	t        j                  j                        r0|
jm                  t3        j*                  |	j4                               Wt        |	tL              sh|
jm                  t3        j*                  |	              t)        j*                  |
$      S tk         fd&|D              rg }
|D ]  }	t        |	t        j                  j                        r0|
jm                  t9        j*                  |	j4                               Wt        |	tJ              sh|
jm                  t9        j*                  |	              t)        j*                  |
'      S tk        d( |D              r^g }|D ]A  }	|	j                  dk(  rt!        d      |jm                  tE        |	j4                               C t)        j*                  |      S tk        d) |D              r,d* }t)        j*                  tQ        to        ||            +      S tk        fd,|D              r<t)        j*                  |D 	cg c]  }	tE        |	jG                                c}	      S tk        fd-|D              r.fd.}t)        j*                  tQ        to        ||            +      S t!        d/|D 	cg c]  }	t/        |	       c}	       t        |t        jp                        rt)        j*                  tr        |   0      S t        |t        jt                        r5t)        j*                  tw        |j.                  |jx                  1      2      S t        |t        jz                        rt)        j*                  t|        |   3      S t        |t        j~                        rt)        j*                  t        |   4      S t        |t        j                  j                        r|j                  d5      r|j                  d6      st!        d7| d8      d9tU         j                         }| j                  |<   |j                         j                         }t)        j*                  t?        ||            S t        |t        j                  j                  t        j                  j                  f      r%t)        j*                   j                  |      :      S t!        d;t/        |       d<|       # 1 sw Y   
xY wc c}	w c c}	w c c}	w )=Nr   get_attrz?getattr nodes containing tensors should not appear in the graph)r  graph)as_graphzUnsupported getattr attribute z with type: as_namerA  rC  r   r$  r&  r!  r"  zBuffer must have valid namer   	as_stringr   as_floatrY   as_none)as_bools)as_ints)	as_floats)
as_strings
as_tensorsz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                y wr^   )rg   r   rl   r  s     r[   rn   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>+  s     41:a&4   c              3   <   K   | ]  }t        |t                y wr^   )rg   r   r  s     r[   rn   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>-       5AZ3'5r  c              3   <   K   | ]  }t        |t                y wr^   )rg   r+  r  s     r[   rn   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>/  s     7aZ5)7r  c              3   <   K   | ]  }t        |t                y wr^   )rg   r   r  s     r[   rn   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>1  r  r  c              3   P   K   | ]  }t        |t        j                           y wr^   )rg   rh   rC   r  s     r[   rn   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>3  s     >QZ5<<0>s   $&)as_sym_intsc              3   @   K   | ]  }j                  |        y wr^   )r  rl   r  r  s     r[   rn   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>;  s     9T((+9   c              3   @   K   | ]  }j                  |        y wr^   )r  r  s     r[   rn   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>D  s     :T))!,:r  )as_sym_boolsc              3   d   K   | ](  }t        |t        j                  j                         * y wr^   )rg   rh   r5  r8   r  s     r[   rn   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>M  s     ?aZ588==1?ro   c              3   z   K   | ]3  }t        |t        j                  j                  t	        d       f       5 y wr^   )rg   rh   r5  r8   r}   r  s     r[   rn   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>W  s(     MAZEHHMM4:#>?Ms   9;c                     | t        j                  d      S t        | t        j                  j
                        r*t        j                  t        | j                              S t        d|        NrY   r  r!  r"  z!Unsupported list/tuple argument: )	r9   r   rg   rh   r5  r8   rE   r  rU   r  s    r[   serialize_optional_tensor_argszMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_argsY  s`    y5<<RHH#Auxx}}55<<&4!&&&A   -/PQRPS-TUUrZ   )as_optional_tensorsc              3   6   K   | ]  }t        |        y wr^   )rg   rl   r  inductor_tensor_bufferss     r[   rn   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>f  s     IZ#:;Is   c              3   R   K   | ]  }t        |g t        d                y wr^   )rg   r}   r  s     r[   rn   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>k  s-      JK
1D 7DdDEs   $'c                     | t        j                  d      S t        |       r.t        j                  t        | j	                                     S t        d|        r  )r9   r   rg   rE   get_namerU   )r  r  s    r[   r  zMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_argso  s\    y5<<RHH#A'>?5<<&4!**,&G   -/PQRPS-TUUrZ   z&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 )Ktorch._inductor.ir	_inductorirBufferReinterpretViewrg   rh   r5  r8   rm   r   r   getattrr  owning_moduler)  rU   r*   r  serialize_graphr   r   r)   r}   r  rD   r  r  r@   r(  r-  r#   r%  r  rE   r  rC   r   r   r+  r  r   r   OptionalTyper   r   BoolTypeIntType	FloatType
StringTyper   r   r   allr/  mapr   r   r   r$   r   memory_format!_TORCH_TO_SERIALIZE_MEMORY_FORMATr   r   _CScriptObject_has_methodr  _typequalified_nameri   rj   rT  r>  )r  r7  r  inductor_irattrr  
dedup_namearg_name	elem_typer  valuesr  r  custom_obj_namer%  r  s   `              @r[   r,  z%GraphModuleSerializer.serialize_input  s"	    	10 ''#

 c588==)vv#!#**c222syy66

CdELL1(Y   ehh&:&:;..0 ; $ 4 4T :;#??!.CJJe!L  )8LQUVZQ[P\]  $$S)-44SXXF  %%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'F)FF'??^-JKKU\\*
 ??n.C.CCPSH.UVVT"??3//S!??S11S!??#..U#??C00[??2..dE]+3x1}'!(E,>,>?#+#:#:#<%h??? ( 7 7 9I!)U-?-?@$-$<$<$>	!)U^^<';;#Iu}}='r::#Iu?'<<#Iu/?/?@'"==#Iu/?/?@'"== -/DYKu-UVV KKF
 $??b99 444S	::555tCy997377c;;555$s)<<>#>>
  PS T1!6!6s1v!F T  9S99 GA!!UXX]]3n&;&;AFF&KL#As+n&;&;1&EF	G
  6:::c:: IA!!UXX]]3o&<&<QVV&LM#At,o&<&<Q&GH	I
  F;;?3??	 BAttz),]  $$^%@AB  )<<MMMV  (,S1OQT-U(V  ISIIKNOaAJJL AO   OR V  (,S1OQT-U(V  %<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 #>tCykI_`h_i!jkkY; ;J !U`  P* >Ts   8p&p
!p?p
pc                     || j                   j                  vsJ t        |      | j                   j                  |<   t        |      S )Nr!  )r  r  r   rE   r  r  rY  s      r[   serialize_tensor_outputz-GraphModuleSerializer.serialize_tensor_output  sB    4++99999/DX/N&&t,4((rZ   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S Nr  )r  r  r   rD   r   r  s      r[   rO  z.GraphModuleSerializer.serialize_sym_int_output  sH    4++:::::0A(0K''-$$T22rZ   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S r  )r  r  r   r@   r   r  s      r[   rP  z/GraphModuleSerializer.serialize_sym_bool_output  sH    4++;;;;;1CH1M((.%%d33rZ   specc                 @   |j                   t        j                  j                  k(  r t	        |j
                  t        j                        rt	        |j
                  j                  t              r,t        j                  |j
                  j                        }n=t	        |j
                  j                  t              r+t        j                  |j
                  j                        }nt	        |j
                  j                  t              r+t        j                  |j
                  j                        }nt	        |j
                  j                  t              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}|j*                  J t	        |j
                  t        j,                        sJ t        j                  t/        t-        |j
                  j"                        |j*                              S |j                   t        j                  j0                  k(  r|j*                  J t	        |j
                  t        j,                        sJ |j2                  J t        j                  t5        t-        |j
                  j"                        |j*                  |j2                              S |j                   t        j                  j6                  k(  r}|j*                  J t	        |j
                  t        j,                        sJ t        j                  t9        t-        |j
                  j"                        |j*                              S |j                   t        j                  j:                  k(  r|j*                  J t	        |j
                  t        j<                        sJ t        j                  t?        t=        |j
                  j"                  |j
                  j@                        |j*                              S |j                   t        j                  jB                  k(  rdt	        |j
                  t        jD                        sJ t        j                  tG        tE        |j
                  j"                                    S tI        d|       )Nr   r   r  r  rY   r  zUnhandled constant input z to serializer  r`   )constant_inputr7  )
user_inputr!  r7  parameter_name)	parameter)r7  buffer_name
persistent)r   )r7  tensor_constant_name)tensor_constantr$  )r7  r  )
custom_objtokenUnknown argument kind: )%kindr-  	InputKind
USER_INPUTrg   r7  ConstantArgumentr`   r   r"   r   r   r   r+  rU   r,   r!   r  rJ   serialize_argument_spec	PARAMETERr   rE   r0   BUFFERr  r-   CONSTANT_TENSORr1   
CUSTOM_OBJr#   r.   r%  TOKENrG   r/   r*  )r  r  constant_specs      r[   serialize_input_specz*GraphModuleSerializer.serialize_input_spec  s   99///$((B$7$78dhhnnc2$1$8$8$OM5$1$8$8$PM4$1$8$8488>>$RM6$1$8$8$((..$QMXX^^+$1$8$8$DM(+DTXX^^DTTa)bcc ''#4!XX]]-$  !'', 88B  
 YY",,000;;***dhh(9(9:::##.&DHHMM:#';;  YY",,---;;***dhh(9(9:::??...##(&DHHMM: $#  YY",,666;;***dhh(9(9:::## 9&DHHMM:)-!  YY",,111;;***dhh(<(<===##/)!XX]]dhh6H6H %)KK	  YY",,,,,dhh(8(8999##$%488==9  !#:4&!ABBrZ   c                 *   |j                   t        j                  j                  k(  r9t	        j
                  t        | j                  |j                                    S |j                   t        j                  j                  k(  rdt        |j                  t        j                        sJ t	        j
                  t        t        |j                  j                                    S |j                   t        j                  j                  k(  r}|j                  J t        |j                  t        j                        sJ t	        j
                  t!        t        |j                  j                        |j                              S |j                   t        j                  j"                  k(  r}|j                  J t        |j                  t        j                        sJ t	        j
                  t%        t        |j                  j                        |j                              S |j                   t        j                  j&                  k(  r}|j                  J t        |j                  t        j                        sJ t	        j
                  t)        t        |j                  j                        |j                  	      
      S |j                   t        j                  j*                  k(  r}|j                  J t        |j                  t        j                        sJ t	        j
                  t-        t        |j                  j                        |j                  	            S |j                   t        j                  j.                  k(  rdt        |j                  t        j0                        sJ t	        j
                  t3        t1        |j                  j                                    S t5        d|       )Nr  )user_outputr!  )loss_output)r7  r  )buffer_mutationr  )gradient_to_parameter)r7  user_input_name)gradient_to_user_input)user_input_mutationr  r  )r  r-  
OutputKindUSER_OUTPUTr:   r   rK   r	  r7  LOSS_OUTPUTrg   rE   r3   r  BUFFER_MUTATIONr   r    GRADIENT_TO_PARAMETERr&   GRADIENT_TO_USER_INPUTr'   USER_INPUT_MUTATIONrI   r  rG   r;   r*  )r  r  s     r[   serialize_output_specz+GraphModuleSerializer.serialize_output_spec  s   99111$$*t/K/KDHH/UV  YY"--333dhh(9(9:::$$*~488==/QR  YY"--777;;***dhh(9(9:::$$ 2&DHHMM: $!  YY"--===;;***dhh(9(9:::$$&=&DHHMM:#';;'  YY"-->>>;;***dhh(9(9:::$$'>&DHHMM:$(KK(  YY"--;;;;;***dhh(9(9:::$$$9&DHHMM:$(KK%  YY"-----dhh(8(8999$$%%488==9  !#:4&!ABBrZ   sigc           	          t        |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j	                  |       c}      S c c}w c c}w Ninput_specsoutput_specs)r+   r%  r  r&  r   )r  r!  r   s      r[   serialize_signaturez)GraphModuleSerializer.serialize_signature5  sQ    ?BO!2215OADAQAQRA$44Q7R
 	
ORs
   AA!
xc                 D   t        |t        j                        r*t        j                  t        |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      )Nr!  r"  r  rA  r$  r&  TODO)rg   r-  rE   r   r   r  rD   r  r,  r`   r#   r%  r*  r  r(  s     r[   r	  z-GraphModuleSerializer.serialize_argument_spec;  s    a**+??^-HII2,,-??n.C.CAFF.STT2../''002//0??/QVVq{{S  !((rZ   module_call_signaturec           	      0   t        |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j                  |       c}t	        |j
                  t              t	        |j                  t                    S c c}w c c}w N)r   r   in_specout_spec)r6   r   r	  r   r   r/  rH   r0  r  r,  r(  s      r[   serialize_module_call_signaturez5GraphModuleSerializer.serialize_module_call_signatureI  s     #9N9U9U45,,Q/ :O9V9V45,,Q/ ##8#@#@BRS#$9$B$BDTU	
 		
s
   BB
c           	          |D cg c]@  }t        |j                  |j                  r| j                  |j                        nd       B c}S c c}w N)fqnr  )r5   r5  r  r2  r  r  entrys      r[   serialize_module_call_graphz1GraphModuleSerializer.serialize_module_call_graphW  sR     +

  II  88I

 
	
 

s   AAc                    |j                   dk(  r:t        |j                  t        j                  j
                  gt                     sJ t        |j                        }|j                  }t        |      dk(  rg S |j                  d   }t        |j                        r_g }t        |      D ]8  \  }}| j                  ||      }|j                  | j                  ||             : t!        j"                  |      gS t        |      dk(  r| j%                  |j&                  |      gS g }	t        t)        ||            D ]B  \  }\  }}
|\t        |
j*                  t        j,                  t        j.                  f      sJ |	j                  t!        j"                  d             ht        |t0              rjt        |
j*                  t        j,                  t        j.                  f      sJ | j                  ||      }|	j                  | j%                  ||             t        |t2              rt        |
j*                  t        j4                        r2t        |
j*                  j7                         t        j.                        sJ | j9                  ||      }|J g }t        |      D ];  \  }}|	| j                  ||      }|j                  | j                  ||             = |	j                  t!        j"                  |             t        |t:        t<        f      r5| j                  ||      }|	j                  | j%                  ||             t?        dtA        |       d	|jC                                 |	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.
        r@  r   r   r  r   rY   r  zUnhandled output type z from node )"rm   rg   r   rh   ri   rj   r  r   r   r   r(  r   r  rg  r/  r  r   r   serialize_outputr  r  r   r  r   r   r  r   r   rd  r   rC   
ValueErrorr}   format_node)r  r   r   r   rY  tensor_argsidxr(  r  output_argumentsreturn_schemarb  r4  r  msub_user_node_nameuser_node_names                    r[   rS  z'GraphModuleSerializer.serialize_outputsf  s&   & ww/)juzzG\G\F}_z_|F}.~~~(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 #	&C&$|!!++e.@.@%BRBR-S  
 !''(CDD*-!-"9"9E<N<NPUP`P`;abbb66tSA ''(=(=dD(IJD$'!!++U^^ !++::<e>N>N 
 !66tSA	 ,,,%dO UDAqy )-)H)HTU)V&KK < <=OQR ST	U
 !''4(HID3-0!%!@!@s!K ''(=(=nd(ST ,T$ZLDDTDTDVCWX C#	J  rZ   c                    |j                   d   }t        |t              rt        |      dk(  r\t        |d   t        j
                        sJ | j                  |d      }t        j                  | j                  ||d         g      gS g }t        |      D ]  \  }}| j                  ||      }t        |t              r|J g }t        |      D ]j  \  }	}
t        |
t        j
                        st        dt        |
       d      | j                  ||	      }|j                  | j                  ||
             l |j                  t        j                  |             ||j                   n|j                    d| }|j                  | j#                  ||              |S | j#                  |j                   |      gS )zN
        For serializing HOO outputs since HOOs do not have a schema.
        r   r   r   r  z Serialize list output with type z nyirf  )r(  rg   r   r   rh   r)  rg  r   r   r  r  rd  r  rU   r}   r/  r  r:  )r  r   rY  r  r   r  element_meta_valrb  tensorsjrA  s              r[   rV  z+GraphModuleSerializer.serialize_hoo_outputs  s    99U#h& 8}!!(1+u||<<<66tQ? D4P4PQUW_`aWb4c3deffG'0': R## 66tQ?	.5$000 G )*: ; N1)!U\\:"03STXYZT[S\\`1a"bb#>>y!Lt'C'CD!'LMN NN8??g#FG
 %0 " $		{(1#6  NN4#8#8?O#PQ-R0 N))$))X>??rZ   r  rY  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        j                        r&t        j                  | j                  ||            S t        d|       )NrY   r  r"  rA  rC  zUnable to serialize output )r   r   rg   rh   r)  r  r   rC   rO  r?   rP  rU   r  s      r[   r:  z&GraphModuleSerializer.serialize_output  s    ??2..h-??66tXF  3"56??88xH  %--0?? ::4J 
 :8*EFFrZ   c                    |j                   d   }i }|j                  D ]H  }|j                  t        j                  u sJ d| d| d       |j
                  ||j                  d   <   J t        |      D ]  \  }}||vs|j
                   d| ||<     g }t        |      D ])  \  }}	|j                  | j                  ||   |	             + |S )Nr   z
User node z of z is incorrectr   rf  )
r(  ra  r   rH  rI  r  r4  r  r/  r  )
r  r   rY  idx_to_namerc  r>  _arg_listr  rE  s
             r[   _handle_getitem_usersz+GraphModuleSerializer._handle_getitem_users  s    99U#JJ 	2Dx///:D6dV=9:/(,		K		!%		2  ) 	?FC +%&*ii[#>C 	? #,X#6 	AOO,,[^=MN	
 rZ   graph_modulec                    t        |t        j                  j                        sJ |j                  j
                  D ]"  }	  t        | d|j                         |       $ t        | j                  j                  | j                  j
                  | j                  j                   | j                  j"                  | j                  j$                  | j                  j&                  | j                  j(                  | j                  j*                        S # t        $ r:}t        d| d|j                          dt        j                                |d }~ww xY w)Nhandle_zFailed serializing node z in graph: 
 Original exception )r   r  r  r  r  r  r   r  )rg   rh   r5  r*   r  r  r  rm   ru  rU   r<  	traceback
format_excr(   r  r   r  r  r  r  r   r  )r  rN  r   r{  s       r[   r  z%GraphModuleSerializer.serialize_graph  s8   ,(<(<=== &&,, 	D2y1248	 ##**""((**88++:: ,,<<"..@@$$,,$($4$4$L$L	
 		
  $.tfK@P@P@R?SSijsj~j~  kA  jB  Cs   D	E5EEr(  c                     i }|j                  d      x}r	 t        j                  |      |d<   |S |S # t        $ r}t	        d|       |d }~ww xY w)Nrr  z9Failed to serialize custom metadata for graph with error )rJ  r   r   ru  rU   )r  r(  rv  rr  r{  s        r[   serialize_graph_module_metadataz5GraphModuleSerializer.serialize_graph_module_metadata3  sj    XXh''6' $

6 2H 
s
  $OPQsSs   3 	AAAc                     | j                  |      }t        || j                  | j                        | j	                  | j
                        | j                  |j                              S )N)r  r  r  rE  )r  r*   r'  r  r8  r  rU  r(  )r  rN  r  s      r[   rO   zGraphModuleSerializer.serialize?  s^    $$\2..t/C/CD">>t?U?UV99,:K:KL	
 	
rZ   r^   )>rV   rW   rX   r-  ExportGraphSignaturer   r5   r  r   r  rh   r5  r8   r1  r8  r   r>  r]  r_  r   rd  rg  r
   rQ  r#   r.  r7   rN  r   rR  rU  r   r  r  r  r   r,  rE   r  rD   rO  rP  r,   r  r:   r   r+   r'  ArgumentSpecr	  r6   r2  r8  rS  rV  r:  rM  r*   r(   r  rU  rO   rY   rZ   r[   rP   rP     s   	:00	:   2 23	: % %4uxx}} 4.
X%((-- 
X	<C 	<=/ =/~HUXX]]4K " "(uxx}} (c3h (T
!33
	
43F " 	  
 
m	 DD4G &
T 

d 
 <@`l%ehh&7&78`l	`lD) )
3. 3
4> 4
JC JC) JCX6C"-- 6CJ 6Cp
r'>'> 
> 
) )X )
%'%;%;
	

!%b&8&8!9
	o	
V ehhmm V X V p.@%((-- .@DN .@`GS GC GH G.%((-- D<P 2
EHH,@,@ 
U 
*
DcN 

ehh&:&: 
{ 
rZ   rP   )	metaclassc                   N    e Zd Zddeeeef      fdZdej                  de
fdZy)rQ   Nopset_versionc                     i | _         |r| j                   j                  |       d| j                   vr,t        j                  j	                         | j                   d<   y y Naten)r[  updaterh   r  _get_max_operator_version)r  r[  s     r[   r  z"ExportedProgramSerializer.__init__L  sQ    -/%%m4+++).)K)K)MDv& ,rZ   rs   r{   c           
         |j                          t        |j                  |j                        }|j	                  |j
                        }t        |j                        }i }|j                  j                         D ]
  \  }}|||<    |j                  j                         D ]  \  }}||vsJ |||<    t        || j                  |t        t        d   t        d         |j                  D 	cg c]  }	|	j                    c}	t"        j$                        }
t'        |
       t)        |j*                  d      }t-        |
t/        |      t/        |      t/        |j0                              S c c}	w )zS
        Args:
            exported_program: Exported Program to serialize
        r   r   )majorminorrN  r[  r   schema_version	verifierstorch_versionF)in_place)validaterP   r  r  rO   rN  r   r   r  r_   ru   r%   r[  r   r>   rf  dialectrh   __version__canonicalizerN   rt   rz   r   rv   )r  rs   gm_serializerserialized_graph_moduleserialized_range_constraintsru   ncr   rb   serialized_epnew_state_dicts               r[   rO   z#ExportedProgramSerializer.serializeS  ss   
 	!!#-,,.>.P.P
 #0"9"9:J:W:W"X'B..(
$ 	!--335 	DAqIaL	$..446 	DAqI%%%IaL	 (0,,:($Q'$Q' +;*D*DEQqyyE++

 	]# 6''%
 "$^4$Y/$%5%D%DE	
 	
 Fs   1E0r^   )rV   rW   rX   r   r
   r   r   r  r-  r%   rz   rO   rY   rZ   r[   rQ   rQ   J  s7    NhtCH~&> N1
"*<*< 1
AS 1
rZ   rQ   c                      e Zd Zej                   G d d             Zd:dZeded   fd       Z	de
fdZde
fd	Zd
edeeej                  f   fdZd
edeeej$                  f   fdZdedefdZdedej0                  fdZdeeej8                  j:                  ef      fdZdedej8                  j>                  fdZ dede!ddfdZ"de#dejF                  fdZ$de%dejJ                  fdZ&de'dejP                  fdZ)	 	 d;de*dee+e
ejX                  f   e-f   dee+e
e.f   e-f   d eee/e/ejX                  d!f   e+e
e.f   f   e-f      d"ee+e
e0jb                  f      defd#Z2d$e
d%ej8                  j:                  fd&Z3d' Z4defd(Z5d)e6e7   fd*Z8d+e9de.fd,Z:d+e;de.fd-Z<d. Z=ded%ej8                  j:                  fd/Z>ded%ej8                  j:                  fd0Z?ded%ej8                  j:                  ddfd1Z@d2e+e
e
f   de+e
e.f   fd3ZAd4e9dej                  fd5ZCd6eDdej                  fd7ZEd8e6eF   de6ej                     fd9ZGy)<rR   c                      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ej                   ej"                  j$                  f   f   ed<   eeeej                   eej(                  f   f   ed<   eeeej                   df   eeef   f      ed<   y	)
GraphModuleDeserializer.ResultrN  r  r  names_to_symbolsrt   ru   .rv   N)rV   rW   rX   rh   r5  r*   rx   r-  rW  r   r5   r
   r   r   r   r   r)  r   r   r   r  r   r   r   rY   rZ   r[   Resultrv    s    hh****** 2 233sELL011eELL%((2D2D$DEEFFU5<<1A5CUCU#UVVWW uU\\3->'?c3h'O!PQQrZ   rx  r{   Nc                     i | _         i | _        t        j                  j	                         | _        t        j                  j                         | _        y r^   )	serialized_name_to_nodeserialized_name_to_metarh   r5  r(   r  r   Moduler=  )r  s    r[   r  z GraphModuleDeserializer.__init__  s6    AC$<>$XX^^%
hhoo'rZ   c              #     K   | j                   | j                  | j                  | j                  f}t        j
                  j                         | _         t        j                  j                         | _        i | _        i | _        	 d  |\  | _         | _        | _        | _        y # |\  | _         | _        | _        | _        w xY wwr^   )	r  r=  rz  r{  rh   r5  r(   r   r|  r  s     r[   save_graph_modulez)GraphModuleDeserializer.save_graph_module  s      JJKK((((	
 XX^^%
hhoo'')$')$	 
,,
,,s   BCB& 
C&CCserialized_targetc                 h    |j                  d      \  }}|dd  }t        |   }|j                  |      S )NrF  r   )split_deserialization_registryfrom_op_name)r  r  rW  r\  r[  s        r[   deserialize_extension_operatorz6GraphModuleDeserializer.deserialize_extension_operator  s=    .44S9	7abM	+I6##G,,rZ   c                 H   |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   rh   rG  )r;  rH  r  rh   r  hasattrr  )r  r  r=  serialized_target_namesr   r  s         r[   deserialize_operatorz,GraphModuleDeserializer.deserialize_operator  s    ''
 F&7&=&=c&B12&F#))'2F&7&=&=c&B12&F#))#.667HII$$+ 	/D64((( .		/
 rZ   r   c           
         |j                   }|j                  dk(  r|j                  d }n1|j                  j                  dk(  sJ |j                  j                   }|j                  | j                  v r| j                  |j                     }nt        j                  |j                  i | j                  | j                        }|j                  |j                  D ci c]$  }|t        j                  |j                  d      & c}      }t        |t
        j                        r|| j                  j                  vr|| j                  |j                  <   || j                  j                  ||       | j                   j#                  |j                        x}r| j                  j%                  ||j&                  |j(                         n|| j                  |j                  <   |j                  }|D ]  }|j                  | j                  vr|| j                  |j                  <   | j                   j#                  |j                        x}s\| j                  j%                  ||j&                  |j(                          | j                  j+                  ||      S |j                  dk(  rt        |t,              sJ |S t/        d|j                   d	|j                          c c}w )
Nr   r   localsT)integer)compiler_mincompiler_maxr   zSymInt has invalid field type  with value )r`   r}   r   r   symbol_name_to_symbolr   sympifysympy_functionssubsfree_symbolsr   r  rg   	shape_env
var_to_valadd_var_to_valsymbol_name_to_rangerJ  constrain_symbol_ranger   r   create_symintnoder   rU   )r  r   r   r   symvrr  s          r[   deserialize_sym_intz+GraphModuleDeserializer.deserialize_sym_int  sv   gg66Yxxxx}}000xx~~||t99900>mmLLQd22Qd6P6PQ hhDGDTDTUqQQVVT::U c5<<0S@Y@Y5Y?BD..s||<'55c4@!66::3<<HHrH==)+)+ >  @CD..s||<#&#3#3L) 66)C)CCABD66qvv>!%!:!:!>!>qvv!FF2F NNAA !-/XX-/XX B 	 >>33Cd3CCVVxc3'''J 0QWWIN M Vs   ")K1c           
         |j                   }|j                  dk(  rt        j                  |j                        }|j
                  D ]l  }t        |t        j                        rt        |      | j                  vs6| j                  t        j                  t        t        |                         n t        j                  |j                  | j                        }| j                  j                  |      S |j                  dk(  rt        |t               sJ |S t#        d|j                   d|j                          )Nr   r   r  r   zSymBool has invalid field type r  )r`   r}   r   r  r   r  rg   Numberr   r  r  rC   r   rA   r  create_symboolnoder   rU   )r  r   r   exprr  s        r[   deserialize_sym_boolz,GraphModuleDeserializer.deserialize_sym_bool  s    gg66Y==.D(( W"35C(B(BB,,V]]73s8CT-UVW ==d6P6PQD>>44T::VVy c4(((J 1!&&aggYO rZ   r   c                 N     j                   5  t        t        t        j                  t         fd|j                  D              t         fd|j                  D              t        |j                        t        |j                                 cd d d        S # 1 sw Y   y xY w)Nc              3   @   K   | ]  }j                  |        y wr^   r  rl   r   r  s     r[   rn   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>,  s     UC$2237Ur  c              3   @   K   | ]  }j                  |        y wr^   r  r  s     r[   rn   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>-  s     WC$2237Wr  )r   r   )fake_tensor_moder	   r   rh   empty_stridedr   r   r   r   r   _SERIALIZE_TO_TORCH_DTYPEr   )r  r   s   ` r[   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 r~  )r-  r#   r  r%  r  s     r[   deserialize_script_obj_metaz3GraphModuleDeserializer.deserialize_script_obj_meta3  s)     ## %%%//
 	
rZ   c                    |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y t        d|       )Nr#  rB  rD  r   r  z"Unable to deserialize output node )	r}   rz  r#  r  rB  r  rD  r   rU   )r  r3  s     r[   deserialize_graph_outputz0GraphModuleDeserializer.deserialize_graph_output;  s    ;;+%//0@0@0E0EFF[[L(//0A0A0I0IJJ[[M)//0B0B0J0JKK[[H$== [[I% #EfX!NOOrZ   serialized_graphc           	         |j                   j                         D ]%  \  }}| j                  |      }|| j                  |<   ' |j                  j                         D ]#  \  }}| j                  |      | j                  |<   % |j                  j                         D ]#  \  }}| j                  |      | j                  |<   % |j                  j                         D ]#  \  }}| j                  |      | j                  |<   % t        |j                        D ]  \  }}	|	j                  dv rK|	j                  j                  }
| j                  j!                  |
      }|
|_        | j#                  |
|       _|	j                  dv rg| j$                  j&                  |   j(                  j                  }
| j                  j!                  |
      }| j+                  |	      |j,                  d<   t/        d|	        |j0                  D ]0  }	 | j3                  |j4                        }| j7                  ||       2 g }|j>                  D ]"  }|jA                  | jC                  |             $ |jD                  rtG        |      dk(  sJ |d   }ntI        |      }| j                  jK                  |      }|jD                  r5|jL                  d   j,                  d   |j,                  d<   | j                  S tI        d	 |jL                  d   D              |j,                  d<   | j                  S # t8        $ r)}t/        d| dt;        j<                                |d }~ww xY w)
N)r#  rB  r'  )r   r  r   r  r  r   zInvalid input type zFailed deserializing node rQ  r   r   c              3      K   | ]9  }t        |t        j                  j                        r|j                  d    n| ; yw)r   N)rg   rh   r5  r8   r(  )rl   r7  s     r[   rn   z<GraphModuleDeserializer.deserialize_graph.<locals>.<genexpr>  s6      , $.c588==#AsJ,s   ?A)'r  r_   r   r{  r  r  r  r  r  r  r  r   r}   r`   r  r  r   sync_fx_noder  r%  r7  deserialize_inputr(  rU   r  r  r   deserialize_noderu  rR  rS  r   r/  r  r  r   r   r3  r4  )r  r  r  tensor_valuerY  sym_int_valuesym_bool_valuer|  r  input_	node_nameplaceholder_nodeserialized_noder   r{  r   r3  output_nodes                     r[   deserialize_graphz)GraphModuleDeserializer.deserialize_graphI  sc   "2"@"@"F"F"H 	:D,33LAH19D((.	: $4#B#B#H#H#J 	YD-151I1I-1XD((.	Y %5$D$D$J$J$L 	 D.151J1J2D((.	
 &6%G%G%M%M%O 	!D/151Q1Q2D((.	 ##3#:#:; 	EIAv{{JJ"LL--	#'::#9#9)#D  )2 %!!)-=> !  !NN66q9==BB	#'::#9#9)#D /3/E/Ef/M %%e,$':6(%CDD'	E,  055 	O22?3I3IJ%%ov>	 &.. 	BFNN488@A	B 33w<1$$$ajGGnGjj''033&1&6&6q&9&>&>u&EKU# zz ', ,&++A., 'KU#
 zz5  $00AAWXaXlXlXnWops   -L..	M 7$MM r  r   c                    |t         v s9|t        v s1|t        j                  j                  j
                  j                  k(  rq|j                  d   j                  j                  }| j                  |j                        }| j                  j                  d||i |      }| j                  ||       nt        |t        j                   j"                        r| j%                  |j                        \  }}t'        |j                        dk(  r<t)        |j                  d   d      r#|j                  d   j*                  j,                  nd }| j                  j                  d||||      }| j/                  ||       |j0                  j3                  | j5                  |j6                               nt        |t        j                   j8                  gt;                     rwt=        |      r#|j                  d   j*                  j,                  nd }| j?                  ||      \  }}| j                  j                  d||||      }| j/                  ||       ntA        d| dtC        |             |j0                  j3                  | j5                  |j6                               |jD                  dvrd|j0                  vri |j0                  d<   y y y )	Nr   r@  r   r#  z!Unsupported target type for node z: )r   r3  rj  )#rL  rK  rh   opsr^  itemdefaultr   r`   r  deserialize_sym_op_inputsr   r  create_nodedeserialize_sym_op_outputsrg   ri   rT  deserialize_hoo_inputsr   r  r#  r  deserialize_outputsr(  r_  deserialize_metadatarE  rj   r  r   deserialize_inputsrU   r}   rm   )r  r  r   r  r4  fx_noderM  s          r[   r  z(GraphModuleDeserializer.deserialize_node  ss   m#%,,444"**1-33;;D11/2H2HIDjj,,_fdBPTUG++OWE

 > >?667M7MNLD& ../14O33A6D  ''*4499 	  jj,,vtG $$_g>LL 9 9/:R:R ST!6!6 W9T9V WX ,F3  ''*4499 
  226?KLD&jj,,vtG $$_g> 3O3DBtF|nU  	D55o6N6NOP::66;LT[T`T`;`.0GLL*+ <a6rZ   r  c           	      j   |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*                  |j,                  j                  j                  |j,                  j                  j.                  	      |j,                  j0                        S |j                   d
k(  rbt        j                  t        j                  j2                  t        j4                  |j6                  j                  j                        d       S |j                   dk(  r|t        j                  t        j                  j                  t        j8                  |j:                  j                  | j=                  |j:                  j>                              d       S tA        d|       )Nr  r  r7  r   r  r!  r   )r  r7  r   r  r   r  r$  r  r  r  zUnknown input spec )!r}   r-  r,   r  r  deserialize_argument_specr  r7  r
  rE   r  r  r  r  r   r  r  r  r   r  r  r#   r  r%  r  r  rG   r  r  r  deserialize_constant_inputr`   r*  )r  r  s     r[   deserialize_input_specz.GraphModuleDeserializer.deserialize_input_spec  s   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!:;;rZ   oc                    |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,                  j(                        S |j                   d	k(  rbt        j                  t        j                  j.                  t        j0                  |j2                  j                  j                        d       S t5        d
|       )Nr  r  r  r!  r  r  r  r  r  zUnknown output spec )r}   r-  r:   r  r  r  r  r7  r  rE   r  r  r  r  r  r  r  r  r  r  r  r  r  r  rG   r  r*  )r  r  s     r[   deserialize_output_specz/GraphModuleDeserializer.deserialize_output_spec  sd   66]"==]]..221==3D3DE 
 VV}$==]]..%%1==+<+<+A+AB 
 VV((==]]22%%1+<+<+@+@+E+EF((44 
 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!;<<rZ   r!  c           	          t        j                  |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j                  |       c}      S c c}w c c}w r#  )r-  rW  r%  r  r&  r  )r  r!  r  r  s       r[   deserialize_signaturez-GraphModuleDeserializer.deserialize_signature,  sW    &&ADQA44Q7QCFCSCSTa$66q9T
 	
QTs   A&A+
rn  serialized_state_dictru   rv   .r  c           	      >   t         J | a 	 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                  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                  t        j                  j                  j                  j6                  t        j                  j                  j                  j8                  t        j                  j                  j                  j:                  t        j                  j                  j                  j<                  t        j                  j                  j                  j>                  d| _         i | _!        tE        |      | _#        | jI                  |jJ                        | _%        i | _&        |ru|jO                         D ]b  \  }}|jP                  }|jR                  dk\  rtU        d|      }t        jV                  tY        |      |jR                        | jL                  |<   d |t[        |      dkD  rtE        |      | _.        nd | _.        | j_                  |j`                         | jc                  |jd                        }	tg        jh                  | jj                  | j`                        }
i }|jl                  jo                  d      x}rtq        jr                  |      |d<   ||
_:        tv        jy                  |
| jJ                  |	| jB                  tE        |      | jF                  | j\                        d a S # d a w xY w)NT)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IdentityrM   r   rr  )rN  r  r  rw  rt   ru   rv   )=r   r   ShapeEnvr  r   r  rh   utils_sympy	functionsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   ru   r  r  r  r_   r   r   maxr   r   r   rv   r  r  deserialize_module_call_graphr  r-  _create_graph_module_for_exportr=  rE  rJ  r   r   r(  rR   rx  )r  rn  r  ru   rv   r  ra   r  r   r  rN  r(  rr  s                r[   deserializez#GraphModuleDeserializer.deserialize2  s    %,,, $K	),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78O8Y8YZDN )+D%#1779 sEArHHExx1} #Au3B3N3NO`afOgikiqiq3rD--a0	s )c..AA.E&@&P#&*#""#:#@#@A $ B B'99! ==TZZL D099==hGGvG!%F!3X $L*11).."3!%!;!;56KL..#22 2  %)!D!s   X	X Xr  r  c                     || j                   v rt        d| d      ||_        || j                   |<   d|j                  vsJ | j                  |   |j                  d<   y )NzNode z& has already been deserialized before.r   )rz  rU   r  r(  r{  )r  r  r  s      r[   r  z$GraphModuleDeserializer.sync_fx_node  sg    4/// 5.T!UVV-4$$T*GLL((("::4@UrZ   c                 ,     t         fd|D              S )Nc              3   T   K   | ]  }j                  |j                         ! y wr^   )r  r7  )rl   inputr  s     r[   rn   zDGraphModuleDeserializer.deserialize_sym_op_inputs.<locals>.<genexpr>  s      K5T++EII6Ks   %()r   )r  r   s   ` r[   r  z1GraphModuleDeserializer.deserialize_sym_op_inputs  s    KFKKKrZ   c                    t        |      j                  }|j                  D ci c](  }|j                  | j	                  |j
                        * }}g }i }|D ]n  }|j                          xr |j                   }	|	r|j                  ||j                            D|j                  |v sS||j                     ||j                  <   p t        |      |fS c c}w r^   )
r   r  r   r  r  r7  has_default_valuer  r/  r   )
r  r   r  schema_argsr  actual_argsr4  rM  r  is_positionals
             r[   r  z*GraphModuleDeserializer.deserialize_inputs  s    -f5?? )//
 JJ..uyy99
 
 % 	KJ0022P:;P;P7P  K
89??k1.9*//.JF:??+	K T{F""
s   -Cr   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.
        r  )r  r  r7  r/  r   )r  r   r4  rM  r  s        r[   r  z.GraphModuleDeserializer.deserialize_hoo_inputs  st      	@F{{b &*&<&<VZZ&Hv{{#D226::>?		@
 dV$$rZ   inpc                     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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+        j,                        S |d
k(  rj.                  S |dk(  rj0                  S |dk(  rj2                  S |dk(  rj4                  S |dk(  r j7                  j8                        S |dk(  r j7                  j:                        S t        |t<              rt?        |      dk(  rg S |dk(  r3g }|D ]*  }|jA                   j                  |j                            , |S |dv rt=        |      S |dv r|D cg c]  } j7                  |       c}S |dk(  r fd}t=        tC        ||            S tE        d       |dk(  rhjF                  j                   j                  v r# j                  jF                  j                     S  jH                  jF                  j                     S |dk(  r jK                  jL                        S tE        d       # 1 sw Y   SxY wc c}w )Nr  r#  r  r  r  r  r  r!  r  r   r  r   r  rB  rD  r   r  )r  r  r  r  )r  r  r  c                     | j                   dk(  ry | j                   dk(  r#j                  | j                  j                     S t	        d       )Nr  r#  Unhandled argument )r}   rz  r`   r  rU   )r  r  r  s    r[    deserialize_optional_tensor_argszSGraphModuleDeserializer.deserialize_input.<locals>.deserialize_optional_tensor_args  sJ    vv*#;.#;;AGGLLII,/B3%-HIIrZ   r  r'  r  )'r`   r}   rz  r#  r  r  r  !_SERIALIZE_TO_TORCH_MEMORY_FORMATr  _SERIALIZE_TO_TORCH_LAYOUTr  rg   r)   r~  r  r  r-  r  r=  register_moduler  r   r  r   r  r   r  deserialize_sym_argumentrB  rD  r  r   r/  r  rU   r'  ru   r  r  )r  r  r`   typ_	submoduleresultr7  r  s   ``      r[   r  z)GraphModuleDeserializer.deserialize_input  s3   		xx9 [ //0B0BCC%%,S-?-?@@''4S5I5IJJ[ -cmm<<Ze]333'') X&&u{{3>>t{{DJJW	X KK''

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

ZZ *  
 [ %cmm44X::Z<<Y;;[ == \!00@@]"00AAt$5zQ	%  JCMM$">">sxx"HIJKKE{"88FK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!<==sX XF Ms   8AM+MM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  r  r   r  zUnhandled constant argument z to deserialize)
r}   r   r   r+  r  r   r  r   r   rU   )r  r  s     r[   r  z2GraphModuleDeserializer.deserialize_constant_input  s    88xszz?"XX#&&XX$s}}%%XX"$$XX" #?uO!TUUrZ   c                 j   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   r  r   z Unknown symbolic argument type: )	rg   rD   r}   r   rz  r  r@   r   rU   )r  sym_args     r[   r
  z0GraphModuleDeserializer.deserialize_sym_argument  s    g~.||x'~~%*33GOODD1||y(&*33GOODD?yIJJrZ   c                 j    | j                  |j                  d   j                  j                  |       y )Nr   )r  r   r`   r  r  r  r  s      r[   r  z2GraphModuleDeserializer.deserialize_sym_op_outputs  s)    /11!4::BBGLrZ   c                    t        |j                        dk(  ry t        |j                        dk(  rP|j                  d   j                  dk(  r4| j                  |j                  d   j                  j
                  |       y t        |j                        dk(  rat        |j                  d   j                  t        t        f      r4| j                  |j                  d   j                  j                  |       y | j                  ||       y )Nr   r   r#  )r   r   r}   r  r#  r  rg   r`   rD   r@   r  deserialize_multiple_outputsr  s      r[   r  z+GraphModuleDeserializer.deserialize_outputs   s    &&'1,''(A-''*//;>o55a8BBGGQ(()Q.:##A&,,~.O4
 o55a8>>FFP))/7CrZ   c                      j                  |j                        dt        j                  j                  dt
        t        t        f   dt        f fddt        j                  j                  f fdg }t        |j                        dk(  rwt        |j                  d   j                  t              sJ t        |j                  d   j                  d   t              sJ  |||j                  d   j                         n |||j                         t        |      |j                   d<   | j"                  |j$                  <   y )	Nr  r7  r>  c                    t        |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@  r!  )rg   rE   r  rD   r  r*  r}   r  r  rH  rI  r  r/  r{  r(  r_  )rY  r  r7  r>  r  individual_outputdeserialized_metadatar  s         r[   generate_getitemzNGraphModuleDeserializer.deserialize_multiple_outputs.<locals>.generate_getitem7  s     #~.xxC0{{$A$s)M  !%

 6 6  #	 !7 ! d$56OOD88>? ""))*?@rZ   c                    t        |      D ]  \  }}t        |t              r|j                  }t        |t        t
        f      r | |||       Dt        |t        t        f      ry	j                  j                  dt        j                  ||f      }| j                  g         | d   ||       |j                  j                         | d   |j                  d<   t        d|        y )Nr@  r   z Unimplemented node output type: )r  rg   r   r`   rE   rD   r  r   r  r  rH  rI  r/  r(  r_  NotImplementedError)
rY  r  r4  r>  r7  list_outputr  r  generate_getitemsr  s
         r[   r  zOGraphModuleDeserializer.deserialize_multiple_outputs.<locals>.generate_getitemsQ  s    %dO XSc8,))CcNN#CD$XwSAdE]3"&**"8"8' (( ##K
 OOB'%hrlKE$$++,AB.6rlK$$U+-0PQTPU.VWW!XrZ   r   r   r   )r  rE  rh   r5  r8   r   rE   rD   r   r   r   rg   r`   r  r  r   r(  rz  r  )r  r  r  rY  r  r  r  s   `   @@@r[   r  z4GraphModuleDeserializer.deserialize_multiple_outputs2  s'    !% 9 9/:R:R S	AXX]]	A ~~56	A 		A4	X 	X 	X2 !&&'1,o55a8>>EEEo55a8>>qA>RRRh1H1H1K1V1VWh1H1HI $HoU5<$$W\\2rZ   rE  c                 d    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<   |S )Nri  r  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:  rM   rh   r   )r;  rh   r   r  r  r  r  )r  r=  r  r   r  r  s        r[   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
 MrZ   rj  c                     | ||ffS r^   rY   )keyrm  rn  s      r[   import_nn_module_stackzLGraphModuleDeserializer.deserialize_metadata.<locals>.import_nn_module_stack  s    T2J&rZ   c                 \    t        j                  dd|       } t        j                  d|       S )Nz\(.*?\)r  z(?<!\()\s*,\s*(?!\())resubr  )rE  s    r[   metadata_splitzDGraphModuleDeserializer.deserialize_metadata.<locals>.metadata_split  s&    66*b(;xx 7BBrZ   c              3   4   K   | ]  }  |         y wr^   rY   )rl   r  r$  r(  s     r[   rn   z?GraphModuleDeserializer.deserialize_metadata.<locals>.<genexpr>  s#      # 't(<=#s   rp  rl  rq  rr  )	rJ  r   r   r  rs  r/  r   r   r   )r  rE  rv  ri  r!  nn_module_stack_strrj  source_fn_st_strrx  source_fn_strr  
target_strtorch_fn_str
custom_strr$  r(  s   `             @@r[   r  z,GraphModuleDeserializer.deserialize_metadatav  sP    ",,}55;5!,C	S 	& #+,,/@"AAA'C # #/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
rZ   r(  c                    |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 )Nr#  r!  rB  r'  r  r  )r}   r-  rE   r#  r  rD   rB  r  r  r'  r  r+  s     r[   r  z1GraphModuleDeserializer.deserialize_argument_spec  s    66[ $$!++*:*:;;VV|#$$!,,*>*>??VV&&&AOO,@,@H^H^_`Habb&&Bd6L6LQ6OPPrZ   r,  c           	      0   t        j                  |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j                  |       c}t        |j                        t        |j                              S c c}w c c}w r.  )r-  r6   r   r  r   r   r/  r0  r1  s      r[   !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	
 		
s   BB
r  c           	          |D cg c]J  }t        j                  |j                  |j                  r| j	                  |j                        nd       L c}S c c}w r4  )r-  r5   r5  r  r2  r6  s      r[   r  z5GraphModuleDeserializer.deserialize_module_call_graph  sX     +

  II  ::5??K

 
	
 

s   AA)r{   N)NN)HrV   rW   rX   dataclassesr   rx  r  r   r   r~  r   r  r  rC   r   r   rh   r  r?   r   r  rF   r   r   r#   r-  r  r   r5  r8   r  r(   r  r   r  r,   r  r:   r  r+   rW  r  r*   r
   r)  rw   r   r   r   r   r  r  r  r  r   r7   r  r   r  r"   r  r
  r  r  r  r  rX  r  r6   r2  r5   r  rY   rZ   r[   rR   rR     s   R R R( 8D>  *- -c ,AV Ac5<<6G0H AFg %emm8K2L , 

0
			
P(5PSAS;T2U PI% IEHHNN IV41 41h 414 41l2<	 2<bll 2<h,= ,= ,=\
 
B<S<S 
 cgQUV)!,V)  %T#u||*;%<e%CDV) c3h./	V)
 !uU5<<3D-EtCQTH~-U'VX]']!^_V) 'tC1L1L,L'MNV) 
V)pA Auxx}} AL#$ #&%T--@ %J>X J># J>XVm V VKM$ M MD4 D%((-- D$B=#B=.3hhmmB=	B=H=T#s(^ =S#X =~Q8 Q Q
%8
			

!%o!6
	b  	!
rZ   c                   ^   e Zd Zddeeeef      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ed	eeeej                   f   ef   d
eeeej                   f   ef   deeeeej                   df   eeef   f   ef      dej                  f
dZy)rS   Nexpected_opset_versionc                     i | _         |r| j                   j                  |       d| j                   vr,t        j                  j	                         | j                   d<   y y r]  )r6  r_  rh   r  r`  )r  r6  s     r[   r  z$ExportedProgramDeserializer.__init__  sR    68#!''../EF44427((2T2T2VD''/ 5rZ   r  r  r{   c                     i }|j                         D ]7  \  }}|j                  |      x}r|||<   t        j                  d| d       9 |S )NzSymbol z2 did not appear in the graph that was deserialized)r_   rJ  r   r   )r  r  r  r   ra   rb   symbols          r[   deserialize_range_constraintsz9ExportedProgramDeserializer.deserialize_range_constraints  sg    
 (..0 	]DAq.22155v5,-!&)gaS(Z[\		]
 ! rZ   rs   rt   ru   rv   .c                 n   t        |t              sJ |j                  }|j                  t        d   k7  r>|j                  dk(  r|j
                  dk(  s t        d|j                   dt         d      |j                  j                         D ci c]B  \  }}|t        j                  t        |j                        t        |j                              D }}}t               j                  |j                   ||||      }	| j#                  ||	j$                        }
t'        j                  |	j                   |	j                   j(                  |	j*                  |	j,                  |
|	j.                  |	j0                  |	j2                  |j4                  D cg c]  }t7        |       c}	      S c c}}w c c}w )Nr   zSerialized schema version z+ does not match our current schema version r:  )	rootr  r  rt   r   r  rv   ru   rf  )rg   r%   re  rb  r>   rc  rU   r   r_   r   r   r   min_valmax_valrR   r  rN  r:  rw  r-  r  r  rt   r  rv   ru   rf  r   )r  rs   rt   ru   rv   versionra   rb   r  resr   s              r[   r  z'ExportedProgramDeserializer.deserialize  s    *O<<<"11 ==N1--w}}7Igmm_`N` ,-=-L-L,M N==K<LAO  )::@@B	 
 1 **!!)),.?		.J  
  
 $%[ --$ 	 !>>   

 !!!!""((MM~~/!33--mm1A1K1KLA}Q'L

 
	
+ 
< Ms   AF,F2r^   )rV   rW   rX   r   r
   r   r   r  r   r   r   r   r:  r%   r   rh   r)  rw   r   r   r-  r  rY   rZ   r[   rS   rS     s   WxS#X/G W!"3(C(C#CD!  $C$56! 
ellK'	(	!$ cg0
)0
 $sELL015890
 c5<</0%78	0

 !uU5<<3D-EtCQTH~-U'VX]']!^_0
 
		0
rZ   rS   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   )	rg   r   r`   rw   base64	b64encoder   superr  )r  obj	__class__s     r[   r  zEnumEncoder.default'	  sL    c4 99c5!##C(//88ws##rZ   )rV   rW   rX   r  __classcell__)rH  s   @r[   r   r   &	  s    $ $rZ   r   c           
         t        | t              r!| j                  t        | j                        iS t        j                  |       rmt        j                  |       D ci c]N  }|j                  t        | |j                        *|j                  t        t        | |j                              P 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 | S c c}w c c}w c c}}w )Nc              3   2   K   | ]  }t        |        y wr^   )r   )rl   r(  s     r[   rn   z%_dataclass_to_dict.<locals>.<genexpr>;	  s     8q'*8s   )rg   rL   r}   r   r`   r4  is_dataclassfieldsr  r  r  r  r   r   r_   )rG  fr(  ra   rb   s        r[   r   r   /	  s   #v,SYY788		!	!#	& !'',
II%'#qvv*>*F FF&wsAFF';<<
 	

 
C	/23!"1%33	C	8C888	C	58YY[ATQ%a((AA

 4 Bs   AD>E"Ers   r[  c                 H   t        |      j                  |       }t        |j                  t              sJ t        j                  t        |j                        t              }|j                  d      }t        ||j                  |j                  |j                        }|S r   )rQ   rO   rg   rs   r%   r   r   r   r   r   rr   rt   ru   rv   )rs   r[  serialized_programjson_program
json_bytesr   s         r[   rO   rO   B	  s     3=AKK (99?KKK::->>?[L $$W-J!%%$$))	H OrZ   c           	      &   t        | t              rJ d|  d       t        j                  |       t        j                  k(  rWt        d       t        j                  |       v r7|y t        j                  |       }t        |      dk(  sJ t        |d   |      S t        | t
              rt        | t              rt        |t              sJ t        |      dk(  sJ t        t        |j                                     }t        t        |j                                     }t        |t              sJ | j                   |   } | j"                  di |t        ||      iS t%        j&                  |       rk | di |}t        j(                  |       }t%        j*                  |       D ]4  }|j,                  }	t        ||	   t/        ||	            }
t1        ||	|
       6 |S t        |t2              rBt        |      dk(  r|S t        j                  |       d   }|D cg c]  }t        ||       c}S t        |t              rFt        j                  |       d   }|j5                         D ci c]  \  }}|t        ||       c}}S |S c c}w c c}}w )NzUnresolved class type: 'z'.rM   r   r   rY   )rg   r   typing
get_originr   r}   get_argsr   r   
issubclassrL   r   nextiterr  r  rx   r   r4  rL  get_type_hintsrM  r  r  setattrr  r_   )r   dataty_argsr  _value
field_typerG  
type_hintsrN  r  new_field_objd_typer\   v_typera   rb   s                   r[   r   r   X	  s6   #s#G'?uB%GG#-$t*PS@T2T<//#&7|q   !'!*d33	C	:c6#:$%%%4yA~~T$))+&'d4;;=)*%%%%((/
szzLU$6z6$JKLL		!	!#	&kDk**3/
##C( 	.A66D.z$/?dASTMC}-	. 
	D$	t9>K%a(7;<!"61-<<	D$	%a(=AZZ\JTQ%fa00JJK	 = Ks   J+Jr6  c                 0   t        | j                  t              sJ | j                  j                  d      }t	        j
                  |      }t        t        |      }t        |      j                  || j                  | j                  | j                        S rC  )rg   rs   rw   r   r   r   r   r%   rS   r  rt   ru   rv   )r   r6  exported_program_strexported_program_dictserialized_exported_programs        r[   r  r  {	  s     h//777#44;;GD JJ';<"4_F["\#$:;	'##	

rZ   c           	          dt         fdfd fd} |j                        }t        |      t        j                        k(  sJ 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                  }d}|D ]  }|j                  D ]  }|j
                  }|j                   d	k(  st#        |j$                  j&                  j                  |j$                  j&                  j                  |j$                  j&                        \  |j$                  _        }d
| |j$                  _        |dz  }  t+         |||
||j,                        fS )Nr  c                    | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   d	k(  ry | j                   d
k(  r| 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y | j                   dk(  ry t        d|        )Nr  r#  r  r   r  r  r  r  r  rB  r  r  r  r  r  r   r  rD  r  r  r  r'  r  z+Unknown input type to the ExportedProgram: )	r}   r#  r  rB  r  rD  r  r  r*  r  s    r[   _get_argumentz*_canonicalize_graph.<locals>._get_argument	  s   66YVV{";;VV|#<<VVxVVy VVz!VV{"VV{"VV|#VV|#<<VV}$== VV''VV))VV{"VV{"VVy VVz!VV}$== VV~%>>!VVz!VV,,(((VV&VV}$ #Nqc!RSSrZ   c                 b    t        |t              sJ t        j                  |  |             y r^   )rg   r   pytreetree_map)rN  r  rj  s     r[   for_argsz%_canonicalize_graph.<locals>.for_args	  s&    !X&&&=+,rZ   c                 ,    t          G d d             }t               i i g i g }dt        t           fdD ]  }fd} ||        t	               D ]2  \  }fd}|j
                  D ]  } ||         |g d      <   4 t	               D ]2  \  }fd}	|j                  D ]  } |	|j                          4 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 sJ    j                  D ]E  }|   }|j                  dkD  sJ |xj                  dz  c_
        |j                  dk(  s> ||       G    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)rV   rW   rX   r   r   rx   rY   rZ   r[   Edgesrq  	  s    s)OHrZ   rt  r{   c                    | y t        | t              r| j                  S 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        d|        )Nr  )r   r   Unknown argument type: r#  r  zUnknown optional tensor type: )
rg   rE   r  rD   r@   r}   r  r*  r9   r#  r  s    r[   r  z9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_name	  s    y!^,vvA@A66Y&99$VV44(+B1#)FGGA5666[(;;+++VVy((+I!)MNN$'>qc%BCCrZ   c                 >     |       x}rj                  |       y y r^   )add)r  r   r  graph_inputss     r[   	add_inputz:_canonicalize_graph.<locals>.sort_nodes.<locals>.add_input	  s%     #1# $$Q' $rZ   c                 2     |       x}r|vsJ |<   y y r^   rY   )r  r   	def_tabler  r>  s     r[   add_defz8_canonicalize_graph.<locals>.sort_nodes.<locals>.add_def	  s.     #1#I---#&IaL $rZ   r   c                      |       x}rG|vr|v sJ y |   }|   j                   j                            xj                  dz  c_        y y )Nr   )rr  r/  rs  )r  r   srcr|  edgesr  ry  r>  s      r[   add_edgez9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_edge
  sa     #1#	) L000#A,C#JOO**3/#JNNa'N $rZ   c                 D     |       x}r|vsJ t              |<   y y r^   )r   r  r   r  ranks     r[   add_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_rank
  s0    QKq}$}d)Q  rZ   c                 $     |       x}r|   S y)Nr  rY   r  s     r[   get_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_rank
  s    QKqAwrZ   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 r^   )r/  )r(  r  rankss    r[   <lambda>zc_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks.<locals>.<lambda>
  s    5<<#< rZ   rY   )r  r  rn  r  s    @r[   	get_rankszQ_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks
  s    <a@rZ   )r   r  r7  heapqheappushr   )	r>  r  r   r  	args_rank
candidatesrn  r  r  s	        r[   add_candidatez>_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate
  s[    
 :D=A[[I!&&)AEE"23IIINN:Y'DE Js   %A&r   )r   setr   r   r  r   r   r7  r   r_   rs  r   r  heappopr/  rr  clear)r  rt  rv  r  rz  r   r}  r  rc  r  r  r  r{  rK  r  r|  r  r  r  ry  r>  r  rn  sorted_inputss   `             @@@@@@@@r[   
sort_nodesz'_canonicalize_graph.<locals>.sort_nodes	  sI   		 	 
	 "%$&	"$IK
!	D8C= 	D,  	#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%<<c
 ($Kuuqy y
55A:!$'( #JOO!!# *o! 
rZ   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        d|        )Nc                 n    dt               }| vsJ || <   | |v sJ |j                  |       ||<   |S )NrK  )r   pop)r  r  new_name
name_tables      r[   _renamez8_canonicalize_graph.<locals>.rename_def.<locals>._renameA
  sR    3z?+,H:---#+Jx v%%%%zz(3F8OrZ   r  rv  )rg   rE   r  r  rD   r}   r  r  r@   r  r*  )r  r  r  r  s     r[   
rename_defz'_canonicalize_graph.<locals>.rename_def@
  s    	 9a(QVVU%8%89AF>*vv"#AIIu/C/CD	 #?+vv"#AIIu/D/DE	 # !#:1#!>??rZ   c                    | y t        | t              r,j                  | j                  | j                        | _        y t        | t              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        d|        )Nr  r#  rv  )rg   rE   rJ  r  rD   r}   r  r@   r9   r#  r*  )r  r  s    r[   replace_usez(_canonicalize_graph.<locals>.replace_useV
  s    9a(^^AFFAFF3AF>*vv"&NN199aii@	 #?+vv"&NN199aii@	 #12vv$#->>!++2B2BAKKDTDT#U  % !#:1#!>??rZ   r   r#  r  _gr   )r   r   r  r  r  r  r  )r   r  r   r   r   r7  rE  r  r   sortedr  r_   rH  
itemgetterr  r  r}   _canonicalize_graphr  r  r  r(   r  )r  sorted_outputsr  r  sorted_nodesr  r  r  rp  r  sorted_tensor_valuessorted_sym_int_valuessorted_sym_bool_valuescounterr   r  rK  rj  rn  r  s   ` `              @@@r[   r  r  	  sx   0T 0Tf-pd ekk*L|EKK 0000 "$J@,@"   Q   $ 	$AZ#	$$  ) 	)A[!%%(	))  !a !  	

  u':':'@'@'BH[H[\]H^ _` u##))+1D1DQ1GH "u$$**,(2E2Ea2HI
 G  	AAvv#&9JJ$$++QZZ-=-=-E-EqzzGWGW'#

 ! %'wi.

1	 *,. % = =E *rZ   r-  c                 r   t        j                  |       } t        t        | j                  j                         t        j                  d                  }t        t        | j                  j                         t        j                  d                  }t        | j                  j                  d       }| j                  j                  }| j                  j                  }t        |j                        t        |j                        k(  sJ t        |j                         t        |j"                        k(  sJ dt$        t&        t(        t*           t&        f   fd}dt$        t&        t(        t*           t&        f   fd}t        t-        t/        |j                  |j                              |      }t        |      dkD  rt/        d |D         \  }	}
nd}	d}
t        t-        t/        |j                   |j"                              |      }t/        d	 |D         \  }}t1        |	||      \  }fd
}fd}|
D ]
   |        |D ]
   |        t3        t5        |t7        t9        |
      t9        |            |      ||| j:                  | j<                  | j>                        S )a,  
    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.

    Returns:
        ExportedProgram: The canonicalized exported program.
    r   r  c                     | j                   S r^   )r5  )r(  s    r[   r  zcanonicalize.<locals>.<lambda>
  s    PQPUPU rZ   r{   c                 2   | \  }\  }}t        |t              s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|       )Nr     r  r   r   rM   r      r     r  r   r     Unknown input type: )rg   r,   r}   r  r  r   r  r   r  r  r  r  r  r*  )r  r>  r7  r  s       r[   
rank_inputz canonicalize.<locals>.rank_input
  s   [c4$	***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!>??rZ   c                    | \  }\  }}t        |t              s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	d |fS |j                  d
k(  rdd |fS |j                  dk(  rdd |fS t        d|       )Nr  r  r  r  r   r  r  r  r  r  rM   r  r   Unknown output type: )rg   r:   r}   r  r  r  r  r*  )outr>  r7  r  s       r[   rank_outputz!canonicalize.<locals>.rank_output
  s    [c4$
+++99%dC<YY-'dC<YY++d**66;;YY11d00??DDYY22dC<YY//dC<YY'!dC< #8!?@@rZ   c              3   &   K   | ]	  \  }}|  y wr^   rY   rl   r>  r  s      r[   rn   zcanonicalize.<locals>.<genexpr>
  s     *Fa1*F   rY   c              3   &   K   | ]	  \  }}|  y wr^   rY   r  s      r[   rn   zcanonicalize.<locals>.<genexpr>
  s     (EvsA(Er  c                    t        t              s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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y j                  dk(  r+j                  j                  }|j                     |_        y j                  dk(  ry t        d       )Nr  r#  rB  r  r   Unknown sym_int type: )r  r   r   r  r  r'  r  r  r   r   r  r  r  )rg   r,   r}   r  r7  r#  r  rB  r  r*  r  r   r   r  )r  r7  r   r   tokreplace_tabler  s        r[   replace_inputz#canonicalize.<locals>.replace_input
  s   $	***99$//%%Cxx;&MM&qvv.\)NN66Y& -aii 8AIVVx'(+A!)EFF   $';C5%ABBYY+%""A"166*AFYY("A"166*AFYY++$$((A"166*AFYY,&YY'!**..C$SXX.CHYY** #7v!>??rZ   c                    t        t              s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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(  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#  rB  r  r   r  )r  r   r  r  r  r  r  r  r  r  r  r  )rg   r:   r}   r  r7  r#  r  rB  r  r*  r  r  r  r  r  r  r  )	r  r7  r   r   gur  r  r  s	          r[   replace_outputz$canonicalize.<locals>.replace_output   s   $
+++99%""&&Cxx;&MM&qvv.\)NN66Y& -aii 8AIVVx'(+A!)EFFKK$';C5%ABB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!?@@rZ   r$  )r  r  r  rd  ) copydeepcopyr   r  r[  r_   rH  r  r   rN  r  r  r  r   r   r%  r   r&  r   r   r   r   r  r  r  r%   r*   r+   r  re  rf  rg  )r-  r[  r   r  r  r  r  r  
sorted_insr  r%  sorted_outsr  r&  sorted_graphr  r  r  r  s                    @@r[   rl  rl  
  s_   & 
r	B 0 0 6 6 8h>Q>QRS>TUVMVB$8$8$>$>$@hFYFYZ[F\]^r@@oV))IOO!!Eu||I$9$9 ::::u}}Y%;%;!<<<<@5hsmS!89 @(AE#x}c"9: A( #ellI$9$9:;J :%(*F:*F%G"{#emmY%;%;<=;K $'(E(E#F NL"5~u#L-+@Z(AT  d  t  $ -!,/ 0
 $+((,,&& rZ   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r  rH  r   s    r[   rW  zExtensionHandler.namespacee      !S]]O3S"TUUrZ   c                 2    t        | j                   d      Nz op_name() must be implementedr  r   rm   s     r[   rX  zExtensionHandler.to_op_namei      !S]]O3Q"RSSrZ   r  c                 2    t        | j                   d      r  r  )r   r  s     r[   r  zExtensionHandler.from_op_namem  r  rZ   c                 2    t        | j                   d      )Nz  op_schema() must be implementedr  r  s     r[   r   zExtensionHandler.op_schemaq  r  rZ   N)rV   rW   rX   __doc__classmethodr   rW  rX  r  rh   FunctionSchemar   rY   rZ   r[   r  r  a  s     V# V V Ts T T T T T Ve22 V VrZ   r  op_typeextension_handlerc                 b   t        |t              sJ d| d       | t        vs
J |  d       t        | t              sJ | j
                  j                  d      s| j
                  j                  d      rJ |j                         t        vsJ |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.rh   builtinsN)	rW  r  r   rg   r}   rW   r;  rW  r  )r  r  s     r[   register_extensionr  v  s    
 ')9:r>]^o]ppq<rr:11VgY>U3VV1gt$$$""--g6':L:L:W:WXb:cdd&&(0IIII'8G$?P/99;<rZ   c                  <    t        t        j                               S r^   )r   r   r  rY   rZ   r[   r  r    s    $$& rZ   r   r  r^   )rD  r  r   r4  r  r  r   r   loggingr   rH  r&  rT  rR  
contextlibr   r   r   enumr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   rh   torch.export.exported_programexportrs   r-  torch._export.serde.schemar   torch._export.verifierr   "torch._library.fake_class_registryr   torch._subclasses.fake_tensorr   r   torch.fx.experimentalr   torch.utilsr   rl  torch.utils._pytreer   r   torch.utils._sympy.numbersr   torch.utils._sympy.value_rangesr   r   r   r    r!   r"   r#   r$   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   unionrL   r  rN   __all__	getLoggerrV   r   r   rU   rc   r   r   MetaTypers  uint8BYTEint8CHARint16SHORTint32INTint64LONGfloat16HALFfloat32FLOATfloat64DOUBLE	complex32COMPLEXHALF	complex64COMPLEXFLOAT
complex128COMPLEXDOUBLEBOOLbfloat16BFLOAT16r   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  mulrx  r'  floordivmodpowsym_int	sym_floatsym_itesym_maxsym_minsym_sqrtrK  eqnelegeltgtsym_notrL  anyrr   rz   r   r   r   r   r)  r   r   rx   r   rw   r   r   r   r   Exprr   r   r   r   r   r   r   r   r}   r	  rP   rQ   rR   rS   JSONEncoderr   r   rO   r   r  r  rl  r  r  r  r   r  rY   rZ   r[   <module>r3     s         	     	   % (       * * 4 0 ? D 1 ) > - 7. . . . . . . . . . . .^  0 g!	\ 	.DdO . U\\48L8LL
  
KK	JJ
	KK!!	KK	KK	MM:??	MM:##	MM:$$	OOZ++	OOZ,,	j..	JJ
	NNJ'' " ))BC  
f&&	f&&	f&&	f&&	f&&	MM6>>	MM6>>  **DE  
\::	22	L77	<66	% ! %11R$S ! LLLLLLLLLL	MM	OO	MM	MM	MM	NN" KKKKKKKKKKKK	MM L|LL LLM}MM MM      4& 4U\\ 4
sELL01 
f 
$	
%emm 34 	
 	
U\\ j  >B x 9: AGZ G!15 /x} / /,
5c3hsCxRW1W+X 
?5:: ?s ?0ejj 	ELL+56		#
	AT T	# 	$ 	 R R RCD C `
e `
 `
F 9
% 9
 9
x R
 R
 R
j E
E E
 E
P$$"" $* /3((DcN+ , J 8< $T#s(^4 &I
5$sCx. !IXD_ D DNV V*Q#YQ,-Q DF d3i.>)??@ E?A 4T*:%; ;< ArZ   