
    rh2                    f   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mZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZmZm Z  d dl!Z!d dl"Z"d dl#m$c m%Z& d dl'm(Z( d d	l)m*Z* d d
l+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z4 d dl5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ ddlAmBZB ddlCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZu ddlvmwZw g dZx e	j                  ez      Z{ G d de|      Z}de~eef   fdZe e,ee"j                  ee"j                  ee"j                  e&j                  f   ZdZdZi e"j                  edj                  e"j                  edj                  e"j                  edj                  e"j                  edj                  e"j                  edj                  e"j                   edj"                  e"j$                  edj&                  e"j(                  edj*                  e"j,                  edj.                  e"j0                  edj2                  e"j4                  edj6                  e"j8                  edj:                  e"j                  edj<                  e"j>                  edj@                  e"jB                  edjD                  e"jF                  edjH                  Z ee      Ze"jN                  eXjP                  e"jR                  eXjT                  e"jV                  eXjX                  e"jZ                  eXj\                  e"j^                  eXj`                  e"jb                  eXjb                  e"jd                  eXjf                  iZ ee      Ze"jl                  eZjn                  e"jp                  eZjr                  e"jt                  eZjv                  e"jx                  eZjz                  iZ ee      Zej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  e
j                  e"j                  ej                  ej                  ej                  ej                  ej                  ej                  e"j                  e"j                  e"j                  e"j                  e"j                  e"j                  ej                  ej                  hZ ed eD              rJ e G d d              Ze G d! d"             ZdeId#e"j                  fd$Zd%e e"j                  e"j                  e"j                  e!j                  f   fd&Zd%e ee"j                  f   d#emfd'Zd%e ee"j                  f   d#ekfd(Zd%e ee"j                  f   d#egfd)Zd*e"j                  d#epfd+Zdaed,   ed-<   d.e,fd/Zd0ed1ed#e,fd2Zefd3ee   d4ed#efd5Zd6e e~eef   eed7f   ef   fd8Zd9e!j                  d:ed#ee   fd;Zd9ee   d#e!j                  fd<Zd=e!j                  d>e<fd?Zd@e~e!j                  e>f   d#e~eecf   fdAZdB Ze G dC dD             Z G dE dFe      Ze G dG dHeI             Ze G dJ dKeI             Ze G dL d,eI             Ze G dM dNeI             Z G dO dPej                        ZdQ ZdRed#efdSZdefdTe&j                  dUee~eef      d4ed#efdVZ dW Z	 dhdXdYd3edZee~eef      d#e&j                  fd[Zd#eeMe~eef   f   fd\Z	 dhd]eJd^eee      d#eJfd_Z G d` da      Zdbee   dcee   fddZde Zi Z	e~ee   ee   f   edf<   i Z
e~eee   f   edg<   y)i    N)
namedtupleOrderedDict)IterableIterator)contextmanager)	dataclassfield)Enum)	AnnotatedAnyCallablecastfinalOptionalUnion)&_enable_graph_inputs_of_type_nn_module)load_verifier)
FakeTensorFakeTensorMode)_ConstantAttributeType)symbolic_shapes)_pytree)treespec_dumpstreespec_loads)int_oo)
prefix_strSymT)ValueRanges)CapturedTraceback   )remove_proxy_from_state_dict   )2ArgumentArgumentKindBufferMutationSpecConstantValueCustomObjArgumentDeviceExportedProgramGradientToParameterSpecGradientToUserInputSpecGraphGraphArgumentGraphModuleGraphSignature	InputSpecInputToBufferSpecInputToConstantInputSpecInputToCustomObjSpecInputTokenSpecInputToParameterSpecInputToTensorConstantSpecLayoutLossOutputSpecMemoryFormatModuleCallEntryModuleCallSignatureNamedArgumentNamedTupleDefNodeOptionalTensorArgument
OutputSpecOutputTokenSpecRangeConstraint
ScalarTypeSCHEMA_VERSIONSchemaVersionSymBoolSymBoolArgumentSymExprSymExprHintSymFloatSymFloatArgumentSymIntSymIntArgumentTensorArgument
TensorMetaTokenArgumentTREESPEC_VERSIONUserInputMutationSpecUserInputSpecUserOutputSpec)_Union)	serializeGraphModuleSerializerExportedProgramSerializerGraphModuleDeserializerExportedProgramDeserializerc                       e Zd Zy)SerializeErrorN)__name__
__module____qualname__     p/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/_export/serde/serialize.pyr\   r\   j   s    ra   r\   dc                 j    | j                         D ci c]  \  }}|j                  | c}}S c c}}w N)itemsvalue)rc   kvs      rb   _reverse_maprj   n   s(    #$779-41aAGGQJ---s   /;c              #   d   K   | ](  }t        |t        j                  j                         * y wre   )
isinstancetorch_ops
OpOverload).0ops     rb   	<genexpr>rs      s!     Hz"ejj334H   .0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)r]   r^   r_   bytes__annotations__r`   ra   rb   rv   rv      s    ra   rv   c                   6    e Zd ZU eed<   eed<   eed<   eed<   y)_SerializedProgramrw   rx   ry   rz   N)r]   r^   r_   r)   r|   r{   r`   ra   rb   r~   r~      s    %%ra   r~   returnc                     | j                    t        j                  | j                        S t        j                  | j                  | j                         S )N)typer   index)r   rn   devicer   )rc   s    rb   deserialize_devicer      s7    ww||((<<QVV17733ra   sc                     t        | t        j                  t        j                  t        j                  f      r| j
                  j                  } t        j                  j                  j                  |       S re   )rm   rn   rL   rF   rJ   nodeexprsympyprintingreprsreprr   s    rb   _print_sympyr      sG    !ellEMM5>>BCFFKK>>$$Q''ra   c                 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 ``)rm   rn   rL   r   Symbolintr   is_concrete_intcreater   r   rH   r   rI   r\   r   r   s    rb   serialize_sym_intr      s    !ellELL#67**1-==A//a%,,!=>>>vv{{"}}W\!_-EFF}}#$Q(//qvv{{C  :1#[a	QRS
 	
ra   c                 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_floatr   r   z0SymFloat should be either symbol or float, got `r   r   )rm   rn   rJ   r   r   floatr   is_concrete_floatr   r   r   rH   r   rI   r\   r   r   s    rb   serialize_sym_floatr     s    !ennellE:;,,Q/??E!H55a%..%,,!?@@@vv{{"w|A/GHH#$Q(//E  >qcTRSWIUVW
 	
ra   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   )rm   rn   rF   boolr   is_concrete_boolr   rH   r   r\   r   r   s    rb   serialize_sym_boolr     ss    !emmT*+++A.>>$q'22>>'<?*KLL<QC{4PQ7)STU
 	
ra   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)rO   _TORCH_TO_SERIALIZE_DTYPEr   shaper   r   r(   r   r   r   stride_TORCH_TO_SERIALIZE_LAYOUTr   )r   r   s     rb   serialize_tensor_metar   #  s     '0-.WW5 #5oo188==?/0xxz:!"1%:(+)!((3 5 ;s   C
CrY   _CURRENT_DESERIALIZERfake_tensorc                     t        | t        j                  j                        }t	        |       }t        j                  t        |      t              j                  d      }t        ||ffS )Nclsutf-8)rm   rn   nn	Parameterr   jsondumps_dataclass_to_dictEnumEncoderencode_reconstruct_fake_tensor)r   is_parametertensor_metatensor_meta_bytess       rb   _reduce_fake_tensorr   5  sY    k588+=+=>L'4K

;'[fWo  $&7%FFFra   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_dataclassrO   r   deserialize_tensor_metarn   r   r   )r   r   json_tensor_metar   r   s        rb   r   r   >  sq     zz"8"?"?"HI$Z1ABK 	)323)'??LKhh((5ra   artifactpickle_protocolc                 V   | 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)Nra   z0Refusing to stomp on existing FakeTensor reducer)r   )
r   copyregdispatch_tablepickler   ioBytesIOrn   savegetvalue)r   r   buffers      rb   serialize_torch_artifactr   N  s      	'000:9:0/z#67 	

8V_E "":.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)	rm   dicttuplelenr   r   seekrn   load)r   r   r   s      rb   deserialize_torch_artifactr   f  sk     *tUm,
:!	ZZ
#F
KKNzz&u5Hh...Ora   valadjustc                 z   | t         j                  t        fv ry | t         j                   t         fv ry t        | t         j                        rt        |       S t        j                  dt        |       | |       |dk(  rt        j                  |       S |dk(  rt        j                  |       S t        d|       )NztExport constraints cannot be non-integer expressions. Found type %s, and value %s. We will attempt to %s this value.floorceilzGot invalid adjustment )r   oor   rm   Integerr   logwarningr   mathr   r   RuntimeError)r   r   s     rb   _sympy_int_to_intr   u  s    
uxx  
y6'""#u}}%3x KK	 	S	 zz#	6	yy~4VH=>>ra   c                     | |S | t          t         fv r| S | t        j                  k(  rt         S | t        j                   k(  rt          S t        j                  |       S re   )r   r   infr   r   )r   defaults     rb   _int_to_sympy_intr     sT    
{
w

dhh
txxiw==ra   symsym_typec                 P    t        t        |       t        t        |         d        S re   )r   strr   r   )r   r   s     rb   _symbol_indexr     s#    s3xJx013455ra   range_constraintsc                     | j                         D ci c]C  \  }}t        |      t        t        |j                  d      t        |j
                  d            E c}}S c c}}w )Nr   r   )rf   r   rB   r   lowerupper)r   rh   ri   s      rb   serialize_range_constraintsr     s_     &++-
 Aq	 	Aaggv.aggw/
 	
  s   AA c                     t        | t        j                  j                        r| j                  S t        |       t        v r!t        t        |          j                  |       S t        dt        |              )NzCannot find schema for )	rm   rn   ro   rp   _schemar   _serialization_registry	op_schemar   )targets    rb   _get_schema_from_targetr    s^    &%**//0~~	f0	0&tF|4>>vFF
0f?
@@ra   c                   @   e Zd ZU  ee      Zee   ed<    ee      Zee   ed<    ee      Z	ee
   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<   d	Zeed
<    ee      Zeeef   ed<   y)
GraphState)default_factoryinputsoutputsnodestensor_valuessym_int_valuessym_bool_valuessym_float_valuesFis_single_tensor_returncustom_obj_valuesN)r]   r^   r_   r	   listr	  r#   r|   r
  r  r>   r   r  r   rO   r  rL   r  rF   r  rJ   r  r   r  r'   r`   ra   rb   r  r    s    "48FDN8#D9GT(^9d3E4:3+0+FM4Z(F(-d(CNDf%C*/*EOT#w,'E,1$,Gd3=)G$)T)6;D6QtC!223Qra   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)rm   r  	TypeErrorr]   r   __new__r   )metaclsnamebases	classdictbs        rb   r  zFinal.__new__  sQ     	WA!U#&4T UVV	W ||GT5$y/BBra   N)r]   r^   r_   r  r`   ra   rb   r  r    s    Cra   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	 d6dedee   fdZdee   fdZdefdZ defdZ!defdZ"defdZ#d6dee   de$fdZ%de&fdZ'de(fdZ)de*fdZ+de(fdZ,d ejZ                  de-fd!Z.d ej^                  de/fd"Z0d#ej                  de1fd$Z2d%ejf                  de$fd&Z4d' Z5d(ejl                  de6fd)Z7deej                     dee   fd*Z8de
j                  j                  dee$   fd+Z9de
j                  j                  dee$   fd,Z:d-ed.ede$fd/Z;de
j                  j                  dee&   fd0Z<d1e
j                  jz                  de>fd2Z?d3eeef   fd4Z@d1e
j                  jz                  de=fd5ZAy)7rW   graph_signaturemodule_call_graphc                 h    t               | _        || _        || _        i | _        i | _        i | _        y re   )r  graph_stater  r  custom_objsduplicate_getitem_nodestreespec_namedtuple_fields)selfr  r  s      rb   __init__zGraphModuleSerializer.__init__  s6    
 &<.!2=?79$DF'ra   c              #   r   K   | j                   }t               | _         	 d  || _         y # || _         w xY wwre   )r!  r  r%  saveds     rb   save_graph_statez&GraphModuleSerializer.save_graph_state  s3       %<	%$DuDs   7+ 7	47r   c           
          |j                   dk(  sJ |j                  d   }t        j                  d|j                  |       t        |t        j                        r2t        j                  | j                  |j                  |            }nLt        |t        j                        r2t        j                  | j                  |j                  |            }n t        |t        j                        rt        d      t        |t        t         t"        t$        t'        d       f      r| j)                  |      }nt        |t*        j,                        rj|j.                  }t        j                  t-        |j                  |            }| j1                  |      | j2                  j4                  |j                  <   nt        d	|j                  d          | j2                  j6                  j9                  |       y )
Nplaceholderr   z[handle_placeholder] %s: %s	as_tensor
as_sym_intz,SymFloat graph input is not implemented yet.r  	class_fqnas_custom_objz Unimplemented graph input type: )rr   metar   debugr  rm   rn   Tensorr#   r   serialize_tensor_outputrL   serialize_sym_int_outputrJ   AssertionErrorr   r   r   r   r   serialize_inputepr'   r2  serialize_script_obj_metar!  r  r	  append)r%  r   r   graph_inputr2  s        rb   handle_placeholderz(GraphModuleSerializer.handle_placeholder  sy   ww-'''ii		/C@c5<<("//66tyy#FK U\\*"//88CHK U^^, !OPPc4eT$Z@A..s3KR112I"///TYY)TK
 ..s3 ..		 !#CDIIeDTCU!VWW&&{3ra   c                    |j                   dk(  sJ t        |j                        dk(  sJ d       |j                  d   }t        j	                  d|j
                  |       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   z[handle_output] %s: %sT)rr   r   argsr   r6  r  rm   rn   fxr>   r!  r  r;  r
  r   r  )r%  r   	node_argsargs       rb   handle_outputz#GraphModuleSerializer.handle_output  s    ww("""499~"H$HH"IIaL			*DIIyAi/7;D4(,(<(<Y(G'HD$i%777MV'Wc(<(<S(A'WD$'Ws   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.)rm   r   r^   
startswithreplacer]   )r%  r  modules      rb   serialize_operatorz(GraphModuleSerializer.serialize_operator
  sr    fc"M)),7 &&..|[IFXQv/00''(&//):;;ra   c           	          |j                   dk(  sJ |j                  j                  d      }t        j	                  d|j
                  |j                  |j                  |j                  |       |j                  t        j                  u ry |j                  t        v s;|t        |t        j                  t        j                  t        j                   f      rt#        |j                        dk(  sJ t%         j'                  |j                         j)                  |j                  |j                         j+                  |j
                  |      g j-                  |            }n1t        |j                  t        j.                  j0                        rwt%         j'                  |j                         j3                  |j                  |j                  |j                         j5                  |       j-                  |            }nt        |j                  t        j.                  j6                        rdt8        fd}|j                  t        j:                  j<                  u rvt?        |j                        }|j                  d   j
                  }tA        |jB                  jD                  |      sJ tG        |jB                  jD                  |      }|jH                  |d<   d |d<   g }|d	   t        |d	   tJ              ry|d	   D ]l  }	t        |	t        jL                  j$                        r5t        |	j                  j                  dd       tN        jP                        r\|jS                  |	       n ||d	<    fd
}
t%         j'                  |j                         jU                  ||j                         |
|       j-                  |      d      }nt%         j'                  |j                         jU                  |j                  |j                         jW                  |       j-                  |       ||            }nCtY        |j                        tZ        v rtY        |j                        tZ        v sJ tY        |j                         d       tZ        tY        |j                           }|j]                         }|j_                  |j                        }t        |t`              rt        |t`              sJ d|vrd|vsJ t%        d| d|  j3                  |j                  |j                  |j                         j5                  |       j-                  |            }ntc        d|j                   d       jd                  jf                  jS                  |       y )Ncall_functionr   z-[handle_call_function] %s: %s(%s, {%s}) -> %sr   )r  r	  r
  metadatar   c                     t        | j                  t        j                  j                        sJ | j
                  j                  dd       }|d uxr t        |t        j                        S )Nr   )rm   r  rn   ro   HigherOrderOperatorr5  getr7  )r   meta_vals     rb   _is_hop_single_tensor_returnzPGraphModuleSerializer.handle_call_function.<locals>._is_hop_single_tensor_return:  sO    !$++uzz/M/MNNN99==5t+R
8U\\0RRra   r"   r    c                     | j                   j                  dd       }g }t        |      D ]8  \  }}j                  | |      }|j	                  j                  ||             : t        j                  |      gS )Nr   
as_tensors)r5  rS  	enumerate_output_node_name_at_indexr>  r8  r#   r   )r   rT  tensor_argsidxr5  r  r%  s         rb   serialize_tensor_list_outputzPGraphModuleSerializer.handle_call_function.<locals>.serialize_tensor_list_output]  sw    #yy}}UD9H"$K%.x%8 U	T#>>tSI#**4+G+Gd+STU %OO{CDDra   F)r  r	  r
  rP  is_hop_single_tensor_returnz* is not supported in export serialization.:#zSerializing z is not supported)4rr   r5  rS  r   r6  r  r  rC  kwargsoperatorgetitem_SYM_OPSrm   rn   rL   rF   rJ   r   r>   rM  serialize_sym_op_inputsserialize_outputserialize_metadataro   rp   serialize_inputsserialize_outputsrR  r   _higher_order_opsaoti_call_delegater  hasattrgraphowning_modulegetattr	aoti_pathr   rD  r<  r'   r>  serialize_hoo_inputsserialize_hoo_outputsr   r  	namespace
to_op_namer   r\   r!  r  )r%  r   rT  ex_noderU  serializable_argslowered_module_namelowered_moduleserializable_weight_nodesweight_noder]  handlerrs  op_names   `             rb   handle_call_functionz*GraphModuleSerializer.handle_call_function  s   ww/)))99=='		;IIKKIIKK	
 ;;(***;;(" 8ellEMM5>>%RSt{{#q(((..t{{;33DKKK..tyy(CD006	G UZZ%:%:;..t{{;,,T[[$))T[[Q..t4006G UZZ%C%CDSd S {{e55HHH$(O! ,099Q<+<+<#tzz779LMMM!()A)ACV!W'5'?'?!!$ (,!!$,.)$Q'3
%a((9 (9'; F &k588==Aj',,00=r?S?SG %188EF ,E%a(E 224;;?445FT8>!44T:05 224;;?44TYYL 66t<!44T:0LT0R $++"99 T[[!%<<Pt{{#$$NOP< .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.ra   c                 D    t         j                  d|j                         y )Nz[handle_get_attr] %s)r   r6  r  )r%  r   s     rb   handle_get_attrz%GraphModuleSerializer.handle_get_attr  s    		($))4ra   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  rb  rc  rC  r  r#  )r%  r   r   	user_nodeusers        rb   _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 ra   c                 d    | j                  ||      }||j                   d| S |j                  S )N_unused_)r  r  )r%  r   r   r  s       rb   rZ  z0GraphModuleSerializer._output_node_name_at_index  s9    ..tU;	ii[00>>!ra   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 )Nr    ,)rm   r   r   r   )r   pathtys      rb   export_nn_module_stackzHGraphModuleSerializer.serialize_metadata.<locals>.export_nn_module_stack  sS    !#u-#c(a-??b!$,,,!"c***czB&ra   r  source_fn_stackr   r"   torch_fncustomz-Failed to serialize custom metadata for node z with error )r5  rS  rf   ST_DELIMITERjoinrM  r  r   r   	Exceptionr\   r  )r%  r   retr  r  r  rh   ri   nn_module_listsource_fn_st	source_fnsource_fn_listr  r  es                  rb   rg  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                 p    t         j                  d|       t        |j                  |j                        S )Nz[serialize_script_obj_meta] %sr1  )r   r6  r'   r  r2  r%  r  s     rb   r=  z/GraphModuleSerializer.serialize_script_obj_meta  s2     			2OD  %%%//
 	
ra   c           	         t        |t        j                  j                        r.|j                  j
                  D cg c]  }|j                   }}n@|t        v sJ t        t        j                  |      j                  j                               }g }t        ||      D ]?  \  }}|j                  t        || j!                  |      t"        j$                               A |S c c}w )Nr  rF  kind)rm   rn   ro   rp   r  	argumentsr  rd  r  inspect	signature
parameterskeyszipr>  r<   r;  r$   
POSITIONAL)r%  rr   rC  rF  
args_namesserialized_args	args_names          rb   re  z-GraphModuleSerializer.serialize_sym_op_inputs  s    b%**//0.0jj.B.BCs#((CJC>!>g//3>>CCEFJ!*d3 	NIs""",,S1%00	  Ds   C%Nr  c           
         d }g }t        |t        j                  j                  j                        r|d   }|d   }|j                  ||      }n=t        |t        j                  j                  gt                     sJ t        |      }|J |xs i }t        |j                        D ]  \  }}	|	j                  |v r]|j                  t        |	j                  | j                  ||	j                     |	j                         t"        j$                               q|	j&                  sa|t)        |      k  rS|j                  t        |	j                  | j                  ||   |	j                         t"        j*                               ތ |S )Nr   r"   r  )rm   rn   rj  	torchbindCallTorchBindschemaro   rp   _registered_extension_typesr  rY  r  r  r>  r<   r;  r   r$   KEYWORD
kwarg_onlyr   r  )
r%  r  rC  ra  r  r  objmethodi
schema_args
             rb   rh  z&GraphModuleSerializer.serialize_inputs  sl    fe55??MMNq'C!WF]]3/F..O1L1NO   -V4F!!!2&v'7'78 	MAz&(&&!'__ 00":??3Z__ *11  **q3t9}&&!'__ 00a*//J)44 -	0 ra   c                 B   |D cg c]-  }t        d| j                  |      t        j                        / }}|j	                  |j                         D cg c]0  \  }}t        || j                  |      t        j                        2 c}}       |S c c}w c c}}w )zM
        For serializing HOO inputs since HOOs do not have a schema.
         r  )r<   r;  r$   r  extendrf   r  )r%  rC  ra  ar	  r  s         rb   rq  z*GraphModuleSerializer.serialize_hoo_inputs  s     	
  T11!4<;R;R
 
 	  &||~ D! ,,Q/%--		
 !
s   2B5B
c                 \    t        |      t        u xs t        |t        j                        S re   )r   r   rm   rn   rL   r%  rF  s     rb   is_inductor_sym_int_argz-GraphModuleSerializer.is_inductor_sym_int_arg+  s#    
 CyC@:c5<<#@@ra   c                     t        |      t        u xsH t        |t        j                  j
                        xr" |j                  | j                  j                  v S re   )	r   r   rm   rn   rD  r>   r  r!  r  r  s     rb   is_sym_int_argz$GraphModuleSerializer.is_sym_int_arg2  sG    CyC 
sEHHMM* <D,,;;;	
ra   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S re   )rm   r   rn   rD  r>   r  r!  r  r  s     rb   is_sym_float_argz&GraphModuleSerializer.is_sym_float_arg8  sE    #u% 
sEHHMM* >D,,===	
ra   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S re   )rm   r   rn   rD  r>   r  r!  r  r  s     rb   is_sym_bool_argz%GraphModuleSerializer.is_sym_bool_arg>  sE    #t$ 
sEHHMM* =D,,<<<	
ra   arg_typec           
      h    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  j;                  |      r4t)        j*                  t=        j*                  |j4                              S t        |j>                  d   t@        jB                        rBt)        j*                  tC        |j4                  |j>                  d   jD                              S |j4                   jF                  v r9 jF                  |j4                     }t)        j*                  tI        |            S t)        j*                  tI        |j4                              S t        |      r9|jK                         }|J d       t)        j*                  tI        |            S t        ||jL                        rv|jK                         }|J d       |jO                         }|jQ                         jS                         }	| jT                  |<   t)        j*                  tC        ||	            S t        |t        jV                        r3t)        j*                  t3        j*                  t        |            	      S t        |t        jX                        r3t)        j*                  t9        j*                  t        |            
      S t/        |      tZ        u rt)        j*                  |      S t/        |      t        u rt)        j*                  |      S t/        |      t\        u rt)        j*                  |      S t/        |      t^        u rt)        j*                  |      S |t)        j*                  d      S t        |t`        tb        f      r#te        |      dk(  r|t        |t        jf                        r|ji                         }t        |t        jj                        sJ |ji                         }
t        |
t        jf                        r|
ji                         }
t        |
t        jl                        rt)        j*                  g       S t        |
t        jn                        rt)        j*                  g       S t        |
t        jp                        rt)        j*                  g       S t        |
t        jr                        rt)        j*                  g       S t        |
t        jt                        rt)        j*                  g       S t!        d|
 d      tv        jy                  d       t)        j*                  g       S t{        d  |D              rt)        j*                  ta        |            S t{        d! |D              rt)        j*                  ta        |            S t{        d" |D              rt)        j*                  ta        |            S t{        d# |D              rt)        j*                  ta        |            S t{         fd$|D              rg }|D ]  }t        |t        jV                        r/|j}                  t3        j*                  t        |                   Lt/        |      t\        u s^|j}                  t3        j*                  |              t)        j*                  |%      S t{        d& |D              rAt)        j*                  |D cg c]!  }t9        j*                  t        |            # c}'      S t{         fd(|D              rg }|D ]  }t        |t        j                  j                        r0|j}                  t3        j*                  |j4                               Wt/        |      t\        u si|j}                  t3        j*                  |              t)        j*                  |%      S t{         fd)|D              rg }|D ]  }t        |t        j                  j                        r0|j}                  t9        j*                  |j4                               Wt        |t^              sh|j}                  t9        j*                  |              t)        j*                  |'      S t{         fd*|D              rg }|D ]  }t        |t        j                  j                        r0|j}                  t=        j*                  |j4                               Wt        |tZ              sh|j}                  t=        j*                  |              t)        j*                  |+      S t{        d, |D              r^g }|D ]A  }|j                  dk(  rt!        d      |j}                  tI        |j4                               C t)        j*                  |      S t{        d- |D              r,d. }t)        j*                  ta        t        ||            /      S t{        fd0|D              r<t)        j*                  |D cg c]  }tI        |jK                                c}      S t{        fd1|D              r.fd2}t)        j*                  ta        t        ||            /      S t!        d3|D cg c]  }t/        |       c}       t        |t        j                        rt)        j*                  t        |   4      S t        |t        j                        r5t)        j*                  t        |j.                  |j                  5      6      S t        |t        j                        rt)        j*                  t        |   7      S t        |t        j                        rt)        j*                  t        |   8      S t        |t        j                  j                        r|j                  d9      r|j                  d:      st!        d;| d<      d=te         jT                         }| jT                  |<   |jQ                         jS                         }	t)        j*                  tC        ||	            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 )ANr   get_attrz?getattr nodes containing tensors should not appear in the graph)r  rm  )as_graphzUnsupported getattr attribute z with type: as_namer/  as_sym_floatas_sym_boolr   r1  r3  r  r-  zBuffer must have valid namer   	as_stringr   r   Tas_none)as_bools)as_ints)	as_floats)
as_stringsrW  zEmpty list with type z nyi.zUnsure how to serialize the given empty list, as we don't know what is the type of this argument. Serializing it as a tensor list by default.c              3   >   K   | ]  }t        |      t        u   y wre   )r   r   rq   r  s     rb   rs   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     0q47d?0   c              3   >   K   | ]  }t        |      t        u   y wre   )r   r   r  s     rb   rs   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>       1T!W^1r  c              3   >   K   | ]  }t        |      t        u   y wre   )r   r   r  s     rb   rs   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     3!T!W%3r  c              3   >   K   | ]  }t        |      t        u   y wre   )r   r   r  s     rb   rs   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  r  r  c              3   @   K   | ]  }j                  |        y wre   )r  rq   r  r%  s     rb   rs   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     BT11!4B   )as_sym_intsc              3   P   K   | ]  }t        |t        j                           y wre   )rm   rn   rJ   r  s     rb   rs   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     @qZ5>>2@s   $&)as_sym_floatsc              3   @   K   | ]  }j                  |        y wre   )r  r  s     rb   rs   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     9T((+9r  c              3   @   K   | ]  }j                  |        y wre   )r  r  s     rb   rs   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     ;!T**1-;r  c              3   @   K   | ]  }j                  |        y wre   )r  r  s     rb   rs   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     :T))!,:r  )as_sym_boolsc              3   d   K   | ](  }t        |t        j                  j                         * y wre   )rm   rn   rD  r>   r  s     rb   rs   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     ?aZ588==1?rt   c              3   z   K   | ]3  }t        |t        j                  j                  t	        d       f       5 y wre   )rm   rn   rD  r>   r   r  s     rb   rs   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s(     MAZEHHMM4:#>?Ms   9;c                     | t        j                  d      S t        | t        j                  j
                        r*t        j                  t        | j                              S t        d|        NTr  r  r-  z!Unsupported list/tuple argument: )	r?   r   rm   rn   rD  r>   rN   r  r\   r  s    rb   serialize_optional_tensor_argszMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_args  s`    y5<<TJJ#Auxx}}55<<&4!&&&A   -/PQRPS-TUUra   )as_optional_tensorsc              3   6   K   | ]  }t        |        y wre   )rm   rq   r  inductor_tensor_bufferss     rb   rs   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     IZ#:;Is   c              3   R   K   | ]  }t        |g t        d                y wre   )rm   r   r  s     rb   rs   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s-      JK
1D 7DdDEs   $'c                     | t        j                  d      S t        |       r.t        j                  t        | j	                                     S t        d|        r  )r?   r   rm   rN   get_namer\   )r  r  s    rb   r  zMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_args  s\    y5<<TJJ#A'>?5<<&4!**,&G   -/PQRPS-TUUra   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 )Ptorch._inductor.ir	_inductorirBufferReinterpretViewrm   rn   rD  r>   rr   r  r   ro  rm  rn  r7  r\   r.   r*  serialize_graphr#   r   r-   r   r  rM   r  r  rK   r  rG   r5  r<  r'   r2  r#  rN   r  TorchBindObjectget_real_obj_typequalified_namer"  rL   rJ   r   r   r   r  r   r   OptionalTypegetElementTypeListTypeBoolTypeIntType	FloatType
StringType
TensorTyper   r   allr>  mapr   r   r   r(   r   memory_format!_TORCH_TO_SERIALIZE_MEMORY_FORMATr   r   _CScriptObject_has_methodro   rp   rR  rM  )r%  rF  r  inductor_irattrrm  
dedup_namearg_namearg_valr2  	elem_typevaluesr  r  r  custom_obj_namer  s   `               @rb   r;  z%GraphModuleSerializer.serialize_inputE  s   0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  &&s+!1!8!8!J  %%c* / 6 6sxx H  CHHUOR-A-AB"3 XX%1J1J# 
 T999!99#((C
Z1PQQSXX1NOO45
 ||~H'F)FF'??^-JKK[889 ||~H'F)FF'&&(G668I)0DX&??1B8Y1WXXU\\*
 ??n.C.CCPSH.UVVU^^,
 ??-44SXF  #Y$??3//#Y#??S11#Y#??#..#Y%??C00[??400dE]+3x1}'!(E,>,>?#+#:#:#<%h??? ( 7 7 9I!)U-?-?@$-$<$<$>	!)U^^<';;#Iu}}='r::#Iu?'<<#Iu/?/?@'"==#Iu/?/?@'"== -/DYKu-UVV KKF
 $??b990C00S	::1S11tCy993s33c;;1S11$s)<<BcBB  GA!!U\\2n&;&;CF&KLaCn&;&;1&EF	G
  6::@C@@TW"Xq#3#:#:3q6#J"X  9S99 GA!!UXX]]3n&;&;AFF&KLaCn&;&;1&EF	G
  6::;s;; KA!!UXX]]3&6&=&=aff&MN#Au-&6&=&=q&IJ	K
  V<<:c:: IA!!UXX]]3o&<&<QVV&LM#At,o&<&<Q&GH	I
  F;;?3??	 BAttz),]  $$^%@AB  )<<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 -d3i[8NxjY c; ;B #Yr  P* >Ts   8z"&z%!z*z/
z"c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        |      S )Nr  )r!  r  r   rN   r%  r  rT  s      rb   r8  z-GraphModuleSerializer.serialize_tensor_outputL  sB    4++99999/DX/N&&t,4((ra   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S Nr  )r!  r  r   rM   r   r  s      rb   r9  z.GraphModuleSerializer.serialize_sym_int_outputQ  sH    4++:::::0A(0K''-$$T22ra   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S r   )r!  r  r   rK   r   r  s      rb   serialize_sym_float_outputz0GraphModuleSerializer.serialize_sym_float_outputV  sH    4++<<<<<2Eh2O))$/&&t44ra   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S r   )r!  r  r   rG   r   r  s      rb   serialize_sym_bool_outputz/GraphModuleSerializer.serialize_sym_bool_output[  sH    4++;;;;;1CH1M((.%%d33ra   specc                 t   t         j                  d|       |j                  t        j                  j
                  k(  r$t        |j                  t        j                        rt        |j                  j                        t        u r,t        j                  |j                  j                        }n@t        |j                  j                        t        u r+t        j                  |j                  j                        }nt        |j                  j                        t        u r+t        j                  |j                  j                        }nt        |j                  j                        t         u r+t        j                  |j                  j                        }nP|j                  j                  t        j                  d      }n#t#        d|j                  j                   d	      t%        j                  t'        |j                  j(                  |
            S t%        j                  t+        | j-                  |j                                    S |j                  t        j                  j.                  k(  r}|j0                  J t        |j                  t        j2                        sJ t%        j                  t5        t3        |j                  j(                        |j0                              S |j                  t        j                  j6                  k(  r|j0                  J t        |j                  t        j2                        sJ |j8                  J t%        j                  t;        t3        |j                  j(                        |j0                  |j8                              S |j                  t        j                  j<                  k(  r}|j0                  J t        |j                  t        j2                        sJ t%        j                  t?        t3        |j                  j(                        |j0                              S |j                  t        j                  j@                  k(  r|j0                  J t        |j                  t        jB                        sJ t%        j                  tE        tC        |j                  j(                  |j                  jF                        |j0                              S |j                  t        j                  jH                  k(  rdt        |j                  t        jJ                        sJ t%        j                  tM        tK        |j                  j(                                    S tO        d|       )Nz[serialize_input_spec] %sr   r   r  r   Tr  zUnhandled constant input z to serializer  rg   )constant_inputrF  )
user_inputr  rF  parameter_name)	parameter)rF  buffer_name
persistent)r   )rF  tensor_constant_name)tensor_constantr1  )rF  r  )
custom_objtokenUnknown argument kind: )(r   r6  r  r<  	InputKind
USER_INPUTrm   rF  ConstantArgumentr   rg   r   r&   r   r   r   r   r\   r0   r2   r  rS   serialize_argument_spec	PARAMETERr  rN   r5   BUFFERr/  r1   CONSTANT_TENSORr6   
CUSTOM_OBJr'   r3   r2  TOKENrP   r4   r:  )r%  r%  constant_specs      rb   serialize_input_specz*GraphModuleSerializer.serialize_input_spec`  s   		-t499///$((B$7$78'3.$1$8$8$OM$((..)T1$1$8$8$PM$((..)S0$1$8$8488>>$RM$((..)U2$1$8$8$((..$QMXX^^+$1$8$8$FM(3DHHNN3C=Q  !''#;!XX]]-$  !'',1M1Mdhh1WX  YY",,000;;***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Bra   c                 V   t         j                  d|       |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                  t1        t        |j                  j                        |j"                  
            S |j                  t        j                  j2                  k(  rdt        |j                  t        j4                        sJ t        j                  t7        t5        |j                  j                                    S t9        d|       )Nz[serialize_output_spec] %sr)  )user_outputr  )loss_output)rF  r.  )buffer_mutationr+  )gradient_to_parameter)rF  user_input_name)gradient_to_user_input)user_input_mutationr3  r5  )r   r6  r  r<  
OutputKindUSER_OUTPUTr@   r   rT   r9  rF  LOSS_OUTPUTrm   rN   r8   r  BUFFER_MUTATIONr  r%   GRADIENT_TO_PARAMETERr*   GRADIENT_TO_USER_INPUTr+   USER_INPUT_MUTATIONrR   r>  rP   rA   r:  )r%  r%  s     rb   serialize_output_specz+GraphModuleSerializer.serialize_output_spec  s   		.599111$$*t/K/KDHH/UV  YY"--333dhh(9(9:::$$*~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Bra   sigc           	          t         j                  d       t        |j                  D cg c]  }| j	                  |       c}|j
                  D cg c]  }| j                  |       c}      S c c}w c c}w )Nz
[serialize_signature]input_specsoutput_specs)r   r6  r/   rT  r@  rU  rP  )r%  rQ  r   s      rb   serialize_signaturez)GraphModuleSerializer.serialize_signature  s^    		+,?BO!2215OADAQAQRA$44Q7R
 	
ORs   A1A6
xc                    t        |t        j                        r*t        j                  t        |j
                              S t        |t        j                        r4t        j                  t        j                  |j
                              S t        |t        j                        r4t        j                  t        j                  |j
                              S t        |t        j                        r| j                  |j                        S t        |t        j                        r5t        j                  t        |j
                  |j                              S t        d      )	Nr  r-  r  r/  r  r1  r3  TODO)rm   r<  rN   r#   r   r  rM   rK   r8  r;  rg   r'   r2  r:  r%  rW  s     rb   r9  z-GraphModuleSerializer.serialize_argument_spec  s    a**+??^-HII2,,-??n.C.CAFF.STT2../??0@0G0GPQPVPV0WXX2../''002//0??/QVVq{{S  !((ra   c                 F      fdt        |t              } |       |S )Nc           	      B   | j                   y | j                   t        u st        j                  | j                         rt        j                  | j
                     j                  }|j                  v rej                  |   j                  }|| j
                  j                  k7  r`t        d| j
                   d| j
                  j                   d| d      t        | j
                  j                        j                  |<   | j                  D ]
  } |        y )Nz%The given TreeSpec's namedtuple type z was found to have field names z6 but somehow previously was found to have field names rI  )field_names)r   r   pytreeis_namedtuple_classSUPPORTED_SERIALIZED_TYPEScontextserialized_type_namer$  r]  _fieldsr\   r=   children_specs)tsrb  r]  childr%  store_namedtuple_fieldss       rb   rg  zIGraphModuleSerializer.serialize_treespec.<locals>.store_namedtuple_fields   s   wwww*$(B(B277(K'-'H'HJJ(&& % (4+J+JJ"&"A"A,#!k   #bjj&8&88,CBJJ< P==?ZZ=O=O<P QTT_S``ac  &"**2D2DE 33, ** /'./ra   )r   rQ   )r%  treespecserialized_treespecrg  s   `  @rb   serialize_treespecz(GraphModuleSerializer.serialize_treespec  s&    	/2 -X7GH)""ra   module_call_signaturec           	         t         j                  d|       t        |j                  D cg c]  }| j	                  |       c}|j
                  D cg c]  }| j	                  |       c}| j                  |j                        | j                  |j                        |j                  x}r|      S d       S c c}w c c}w )Nz$[serialize_module_call_signature] %sr	  r
  in_specout_specforward_arg_names)
r   r6  r;   r	  r9  r
  rj  rn  ro  rp  r%  rk  rW  namess       rb   serialize_module_call_signaturez5GraphModuleSerializer.serialize_module_call_signature  s     			8:OP"9N9U9U45,,Q/ :O9V9V45,,Q/ ++,A,I,IJ,,-B-K-KL.@@@@ $
 	
 
 	
s   B<C
c           	          t         j                  d       |D cg c]@  }t        |j                  |j                  r| j                  |j                        nd       B c}S c c}w )Nz
[serialize_module_call_graph]fqnr  )r   r6  r:   rv  r  rs  r%  r  entrys      rb   serialize_module_call_graphz1GraphModuleSerializer.serialize_module_call_graph/  sa     			34 +

  II  88I

 
	
 

s   AA"c                 B   dt         dt        fd}|j                  dk(  r:t        |j                  t
        j                  j                  gt                     sJ t        |j                        }|j                  }t        |      dk(  rg S |j                  d   } ||j                        r_g }t        |      D ]8  \  }}| j                  ||      }	|j                  | j!                  |	|             : t#        j$                  |      gS t        |      dk(  r| j'                  |j(                  |      gS g }
t        t+        ||            D ]L  \  }\  }}|\t        |j,                  t
        j.                  t
        j0                  f      sJ |
j                  t#        j$                  d	
             ht        |t2              rjt        |j,                  t
        j.                  t
        j0                  f      sJ | j                  ||      }	|
j                  | j'                  |	|             t        |t4              rt        |j,                  t
        j6                        r2t        |j,                  j9                         t
        j0                        sJ | j;                  ||      }|J g }t        |      D ];  \  }}|	| j                  ||      }|j                  | j!                  ||             = |
j                  t#        j$                  |             t        |t<        t>        t@        tB        f      r5| j                  ||      }|
j                  | j'                  ||             'tE        dtG        |       d|jI                                 |
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   c                     t        |       }|j                  }t        |      dk7  ry|d   j                  }t	        |t
        j                        xr( t	        |j                         t
        j                        S )Nr"   Fr   )	r  returnsr   	real_typerm   rn   r  r  r  )r  r  r|  return_types       rb   _is_single_tensor_list_returnzNGraphModuleSerializer.serialize_outputs.<locals>._is_single_tensor_list_returnS  sg    ,V4FnnG7|q !!*..Kk5>>: z**,e.>.>@ ra   rO  r   r   rW  r"   Tr  zUnhandled output type z from node )%r   r   rr   rm   r  rn   ro   rp   r  r  r|  r   r5  rY  rZ  r>  r8  r#   r   rf  r  r  r}  r  r  r   r  r  r  r  r   rL   r   rJ   
ValueErrorr   format_node)r%  r   r  r  r|  rT  r[  r\  r5  r  output_argumentsreturn_schemar  rC  r  msub_user_node_nameuser_node_names                     rb   ri  z'GraphModuleSerializer.serialize_outputs?  sO   (		# 		$ 		 ww/)jKK%**//P2M2OP/
 	
 
 )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  
 !''(EFD*-!!++e.@.@%BRBR-S   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x"@A!%!@!@s!K ''(=(=nd(ST ,T$ZLDDTDTDVCWX G%	N  ra   c                    |j                   d   }t        |t              r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   z Serialize list output with type z nyirW  r  )r5  rm   r   rY  r  r  rn   r7  r\   r   rZ  r>  r8  r#   r   r  rf  )r%  r   rT  r
  r  element_meta_valr  tensorsjr  r  s              rb   rr  z+GraphModuleSerializer.serialize_hoo_outputs  sZ    99U#h&G'0': R## 66tQ?	.5$000 G )*: ; N1)!U\\:"0"B47)4 P#   $>>y!Lt'C'CD!'LMN NN8??g#FG
 %0 " $		{(1#6  NN4#8#8?O#PQ1R4 N))$))X>??ra   r  rT  c                    |t        j                  d      S t        |t        j                        r&t        j                  | j                  ||            S t        |t        t        j                  f      r&t        j                  | j                  ||            S t        |t        t        j                  f      r8t        |t              rJ t        j                  | j                  ||            S t        |t        t        j                  f      r&t        j                  | j                  ||            S t        d|       )NTr  r-  r  r/  r  zUnable to serialize output )r#   r   rm   rn   r7  r8  r   rF   r$  r   rL   r9  r   rJ   r"  r\   r  s      rb   rf  z&GraphModuleSerializer.serialize_output  s   ??400h-??66tXF  4"78?? ::4J  3"56!(D111??88xH  5%.."9:??!<<T8L 
 :8*EFFra   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"   r  )
r5  r  r  rb  rc  r  rC  rY  r>  r8  )
r%  r   rT  idx_to_namer  r\  _arg_listr  r  s
             rb   _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	
 ra   graph_modulec                 ,   t        |t        j                  j                        sJ t        j                  d|j                  d             |j                  j                  D ]"  }	  t        | d|j                         |       $ t!        | j"                  j$                  | j"                  j                  | j"                  j&                  | j"                  j(                  | j"                  j*                  | j"                  j,                  | j"                  j.                  | j"                  j0                  | j"                  j2                  	      S # t        $ r:}t        d| d|j                          dt        j                                |d }~ww xY w)	Nz[serialize_graph]

%sF)print_outputhandle_zFailed serializing node z in graph: 
 Original exception )	r	  r  r  r  r  r  r  r
  r  )rm   rn   rD  r.   r   r6  print_readablerm  r  ro  rr   r  r\   r  	traceback
format_excr,   r!  r	  r  r  r  r  r  r
  r  )r%  r  r   r  s       rb   r  z%GraphModuleSerializer.serialize_graph  si   ,(<(<===		%|'B'BPU'B'V	
 !&&,, 	D2y1248	 ##**""((**88++::!-->> ,,<<"..@@$$,,$($4$4$L$L

 
	
  $.tfK@P@P@R?SSijsj~j~  kA  jB  Cs   'E	F5FFr5  c                     i }|j                  d      x}r1t        j                  d|       	 t        j                  |      |d<   |S |S # t
        $ r}t        d|       |d }~ww xY w)Nr  z%
[serialize_graph_module_metadata] %sz9Failed to serialize custom metadata for graph with error )rS  r   r6  r   r   r  r\   )r%  r5  r  r  r  s        rb   serialize_graph_module_metadataz5GraphModuleSerializer.serialize_graph_module_metadata  sy    XXh''6'II>G $

6 2H 
s
  $OPQsSs   A	 		A&A!!A&c                    t         j                  d       | j                  |      }t        || j	                  | j
                        | j                  | j                        | j                  |j                        | j                        S )Nz
[serialize])rm  r  r  rP  r$  )r   r6  r  r.   rV  r  ry  r  r  r5  r$  )r%  r  rm  s      rb   rV   zGraphModuleSerializer.serialize*  ss    		/"$$\2..t/C/CD">>t?U?UV99,:K:KL'+'F'F
 	
ra   re   )Br]   r^   r_   r<  ExportGraphSignaturer  r:   r&  r   r*  rn   rD  r>   r@  rG  r   rM  r}  r  r   r  rZ  r   rg  r'   r=  r<   re  r   rh  rq  r   r  r  r  r  r#   r;  rN   r8  rM   r9  rK   r"  r$  r0   r@  r@   rP  r/   rV  ArgumentSpecr9  rj  r;   rs  ry  ri  rr  rf  r  r.   r,   r  r  rV   r`   ra   rb   rW   rW     s:   
G00
G   2 23
G % %4uxx}} 48X%((-- X	<C 	<s/ s/j5HUXX]]4K " ")uxx}} )c3h )V
!33
	
43F * 	--
 
m	-^D4G ,Ad A
T 

t 

d 
EXc] Eh EN) )
3. 3
5<L 5
4> 4
KC KC) KCZ7C"-- 7CJ 7Cr
r'>'> 
> 
) )X ) #@
%'%;%;
	
$
!%b&8&8!9
	o	
 f ehhmm f X f P$@%((-- $@DN $@LGS GC GH G:%((-- D<P 2
EHH,@,@ 
U 
4DcN 

ehh&:&: 

{ 

ra   rW   )	metaclassc                   V    e Zd Zdefdeeeef      defdZde	j                  defdZy)rX   Nopset_versionr   c                     i | _         |r| j                   j                  |       d| j                   vr+t        j                  j	                         | j                   d<   || _        y Naten)r  updatern   r  _get_max_operator_versionr   )r%  r  r   s      rb   r&  z"ExportedProgramSerializer.__init__9  sV    
 .0%%m4+++).)K)K)MDv&.ra   rw   r   c           
      >   |j                          t        |j                  |j                        }|j	                  |j
                        }t        |j                        }|j                  j                         }|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-                                      t/        |j0                  d      }
t3        |	t5        |
| j6                        t5        || j6                        t5        |j8                  | j6                              S c c}w )zS
        Args:
            exported_program: Exported Program to serialize
        r   r"   )majorminorr  r  r   schema_version	verifierstorch_versionF)in_place)validaterW   r  r  rV   r  r   r   r"  copyry   rf   r)   r  rE   rD   r  dialectrn   __version__canonicalizesetr  r!   rx   r~   r   r   rz   )r%  rw   gm_serializerserialized_graph_moduleserialized_range_constraintsry   nr   ri   serialized_epnew_state_dicts              rb   rV   z#ExportedProgramSerializer.serializeF  s   
 	!!#-,,.>.P.P
 #0"9"9:J:W:W"X'B..(
$ %2$=$=$B$B$D	$..446 	DAqI%%%IaL	 (0,,:($Q'$Q' +;*D*DEQqyyE++

 	]C	(8$9: 6''%
 "$^T5I5IJ$Y0D0DE$ //1E1E	
 	
 Fs   "F)r]   r^   r_   DEFAULT_PICKLE_PROTOCOLr   r   r   r   r&  r<  r)   r~   rV   r`   ra   rb   rX   rX   7  sH     376/S#X// /1
"*<*< 1
AS 1
ra   rX   c                      e Zd Zej                   G d d             ZdCdZeded   fd       Z	de
fdZde
fd	Z	 dDd
e
deeeeef      dej&                  fdZdedeeej*                  f   fdZdedeeej0                  f   fdZdedeeej4                  f   fdZdedefdZdede j>                  fdZ!deeejD                  jF                  ef      fdZ$de%dejD                  jJ                  fdZ&de#de'ddfdZ(de)de jR                  fdZ*de+de jV                  fdZ,de-de j\                  fd Z/	 	 dEd!e0d"ee1e
ejd                  f   e3f   d#ee1e
e4f   e3f   d$eee5e5ejd                  d%f   e1e
e4f   f   e3f      d&ee1e
e6jn                  f      defd'Z8d(e
d)ejD                  jF                  fd*Z9d+ Z:de#fd,Z;d-e<e=   fd.Z>d/e?de4fd0Z@d/eAde4fd1ZBd2 ZCde#d)ejD                  jF                  fd3ZDde#d)ejD                  jF                  fd4ZEd)ejD                  jF                  d5eeFeGeHf   d6ed7e1e
e4f   fd8ZId)ejD                  jF                  d7e1e
e4f   fd9ZJde#d)ejD                  jF                  ddfd:ZKd;e1e
e
f   de1e
e4f   fd<ZLd=e?de j                  fd>ZNd?eOde j                  fd@ZPdAe<eQ   de<e j                     fdBZRy)FrY   c                   Z   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f   ed<   eeeej                   df   eeef   f      ed<   y	)
GraphModuleDeserializer.Resultr  r  r  names_to_symbolsrx   ry   .rz   N)r]   r^   r_   rn   rD  r.   r|   r<  r  r  r:   r   r   r   r   r   r7  r   r   r   r   r   r   r`   ra   rb   Resultr  |  s    hh****** 2 233sELL011eELL%((2D2D$DEEFF3344 uU\\3->'?c3h'O!PQQra   r  r   Nc                     i | _         i | _        t        j                  j	                         | _        t        j                  j                         | _        y re   )	serialized_name_to_nodeserialized_name_to_metarn   rD  r,   rm  r   ModulerL  )r%  s    rb   r&  z GraphModuleDeserializer.__init__  s6    AC$<>$XX^^%
hhoo'ra   c              #     K   | j                   | j                  | j                  | j                  | j                  f}t
        j                  j                         | _         t
        j                  j                         | _        i | _        i | _        t               | _        	 d  |\  | _         | _        | _        | _        | _        y # |\  | _         | _        | _        | _        | _        w xY wwre   )rm  rL  r  r  unbacked_symbolsrn   rD  r,   r   r  r  r(  s     rb   save_graph_modulez)GraphModuleDeserializer.save_graph_module  s      JJKK((((!!
 XX^^%
hhoo'')$')$365		 
,,%
,,%s   BC, C $"C,#C))C,serialized_targetc                 h    |j                  d      \  }}|dd  }t        |   }|j                  |      S )Nr_  r"   )split_deserialization_registryfrom_op_name)r%  r  rs  r|  r{  s        rb   deserialize_extension_operatorz6GraphModuleDeserializer.deserialize_extension_operator  s=    .44S9	7abM	+I6##G,,ra   c                    |j                  d      rt        }|j                  d      dd  }n||j                  d      rt        }|j                  d      dd  }nP|j                  d      rt        }|j                  d      dd  }n$|j                  d      r| j                  |      S |S |}|D ]  }t        ||      s|c S t        ||      }  |S )N	_operatorrI  r"   rn   r   r`  )rJ  rb  r  rn   r   r  rl  ro  )r%  r  rL  serialized_target_namesr  r  s         rb   deserialize_operatorz,GraphModuleDeserializer.deserialize_operator  s    ''
 F&7&=&=c&B12&F#))'2F&7&=&=c&B12&F#))&1F&7&=&=c&B12&F#))#.667HII$$+ 	/D64((( .		/
 ra   r   r   c           	          	 ddt         j                  dt        t        t        t
        t        f      dt         j                  f fd}t        j                  |i  j                   j                        } |||      S )z
        Parses and does bottom-up processing of sympy.Expr nodes,
        populating ShapeEnv & caching symbols as needed.
        r   r   r   c                 r   | j                   s| j                  s| j                  r| S t        |       }| j                  D ]  }j                  |        |j                  v rj                  |   } nx| j                  |<   t        | t        j                        rOt        j                  | t        j                  t        j                  f      rj                  j!                  |        |4| j"                  j$                  vrj"                  j'                  | |       j(                  j+                  |      x}r2j"                  j-                  | |j.                  |j0                         t        | t        j                        r-t3        j4                  d      j"                  j6                  | <   | S )N)compiler_mincompiler_maxr"   )skip)
is_Integeris_Float
is_Booleanr   rC  _parse_sym_exprsymbol_name_to_symbolrm   r   r   r   symbol_is_typer   UNBACKED_INTUNBACKED_FLOATr  add	shape_env
var_to_valadd_var_to_valsymbol_name_to_rangerS  constrain_symbol_ranger   r   r   extractvar_to_stack)r   r   r   rF  vrr%  s        rb   _process_sym_exprzBGraphModuleDeserializer._parse_sym_expr.<locals>._process_sym_expr  sd    ~~
 s888 .C((-. t99944X>C;>D..x8!#u||49W9Wd//1D1DE: --11#6#4>>3L3L(LNN11#t<2266x@@2@NN99%'XX%'XX :  c5<<07H7P7PVW7XDNN//4Jra   )localsre   )
r   Exprr   r   r   r   r   sympifysympy_functionsr  )r%  r   r   r  r   s   `    rb   r  z'GraphModuleDeserializer._parse_sym_expr  s|     HL!	!	#+E#tU2B,C#D!	ZZ!	F }}Id**Id.H.HI
 !t,,ra   r   c                    |j                   }|j                  dk(  ry|j                  d }n1|j                  j                  dk(  sJ |j                  j                   }| j                  |j                  |      }| j
                  j                  ||      S |j                  dk(  rt        |      t        u sJ |S t        d|j                   d|j                          )Nr   r   r   zSymInt has invalid field type  with value )	rg   r   r   r  r   r  create_symintnoder   r\   r%  r   r   r   r   s        rb   deserialize_sym_intz+GraphModuleDeserializer.deserialize_sym_int  s    gg66Yxxxx}}000xx~~&&s||T:C>>33Cd3CCVVx9###J 0QWWIN ra   c                    |j                   }|j                  dk(  r]|j                  r|j                  j                  nd }| j	                  |j
                  |      }| j                  j                  ||      S |j                  dk(  rt        |t              sJ |S t        d|j                   d|j                          )Nr   r   r   z SymFloat has invalid field type r  )rg   r   r   r   r  r   r  create_symfloatnoderm   r   r\   r  s        rb   deserialize_sym_floatz-GraphModuleDeserializer.deserialize_sym_float  s    gg66Y(+388$$dD&&s||T:C>>55c5EEVVz!c5)))J 2166(,qwwiP ra   c                 4   |j                   }|j                  dk(  r6| j                  |j                        }| j                  j                  |      S |j                  dk(  rt        |t              sJ |S t        d|j                   d|j                          )Nr   r   zSymBool has invalid field type r  )	rg   r   r  r   r  create_symboolnoderm   r   r\   )r%  r   r   r   s       rb   deserialize_sym_boolz,GraphModuleDeserializer.deserialize_sym_bool  s    gg66Y''5D>>44T::VVy c4(((J 1!&&aggYO ra   r   c                 d     j                   5  t        t        t        j                  t         fd|j                  D              t         fd|j                  D              t        |j                        t        |j                     |j                              cd d d        S # 1 sw Y   y xY w)Nc              3   @   K   | ]  }j                  |        y wre   r  rq   r   r%  s     rb   rs   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>+  s     UC$2237Ur  c              3   @   K   | ]  }j                  |        y wre   r  r  s     rb   rs   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>,  s     WC$2237Wr  )r   r   r   )fake_tensor_moder   r   rn   empty_stridedr   r   r   r   r   _SERIALIZE_TO_TORCH_DTYPEr   r   )r%  r   s   ` rb   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 )Nr1  )r<  r'   r  r2  r  s     rb   deserialize_script_obj_metaz3GraphModuleDeserializer.deserialize_script_obj_meta3  s)     ## %%%//
 	
ra   c                 p   |j                   dk(  r#| j                  |j                  j                     S |j                   dk(  r#| j                  |j                  j
                     S |j                   dk(  r#| j                  |j                  j
                     S |j                   dk(  r#| j                  |j                  j
                     S |j                   dk(  r|j                  S |j                   dk(  r|j                  S |j                   dk(  r|j                  S |j                   dk(  ry t        d	|       )
Nr.  r0  r  r  r   r   r   r  z"Unable to deserialize output node )r   r  r.  r  r0  r  r  r  r   r   r   r\   )r%  rB  s     rb   deserialize_graph_outputz0GraphModuleDeserializer.deserialize_graph_output;  s
   ;;+%//0@0@0E0EFF[[L(//0A0A0I0IJJ[[M)//0B0B0J0JKK[[N*//0C0C0K0KLL[[H$== [[J&??"[[I%>>![[I% #EfX!NOOra   serialized_graphc           	         t         j                  d       |j                  j                         D ]S  \  }}t         j                  d||       | j	                  |      }t         j                  d||       || j
                  |<   U |j                  j                         D ]S  \  }}t         j                  d||       | j                  |      }t         j                  d||       || j
                  |<   U |j                  j                         D ]S  \  }}t         j                  d||       | j                  |      }t         j                  d||       || j
                  |<   U |j                  j                         D ]S  \  }}	t         j                  d||	       | j                  |	      }
t         j                  d	||
       |
| j
                  |<   U |j                  j                         D ]9  \  }}t         j                  d
|       | j                  |      | j
                  |<   ; t         j                  d       t        |j                        D ]  \  }}t         j                  d|       |j                   dv rK|j"                  j$                  }| j&                  j)                  |      }||_        | j+                  ||       v|j                   dk(  r}|j"                  j                   dk(  rK|j"                  j,                  }| j&                  j)                  |      }||_        | j+                  ||       t/        d|j"                   d      |j                   dv ro| j0                  j2                  |   j4                  j$                  xs d| }| j&                  j)                  |      }| j7                  |      |j8                  d<   t/        d|        |j:                  D ]0  }	 | j=                  |j>                        }| jA                  ||       2 g }|jH                  D ]8  }t         j                  d|       |jK                  | jM                  |             : |jN                  rtQ        |      dk(  sJ |d   }ntS        |      }| j&                  jU                  |      }|jN                  r*|jV                  d   j8                  d   |j8                  d<   n,tS        d |jV                  d   D              |j8                  d<   | j&                  j:                  D ]`  }|j8                  jY                  d      x}!t[        j\                  |d| j^                  | j`                  d      x}sR||j8                  d<   b tQ        | j`                        dk(  sJ | j&                  S # tB        $ r)}t/        d| dtE        jF                                |d }~ww xY w) Nz
[deserialize_graph]z([deserialize_tensor_meta] %s (input): %sz)[deserialize_tensor_meta] %s (output): %sz$[deserialize_sym_int] %s (input): %sz%[deserialize_sym_int] %s (output): %sz&[deserialize_sym_float] %s (input): %sz'[deserialize_sym_float] %s (output): %sz%[deserialize_sym_bool] %s (input): %sz&[deserialize_sym_bool] %s (output): %sz [deserialize_script_obj_meta] %sz
[deserialize graph nodes]z[deserialize input] %s)r.  r4  r0  r  z Deserializing a constant symint z as an input)r   r   r   r  r  rF  r   zInvalid input type zFailed deserializing node r  z[deserialize output] %sr"   r   c              3      K   | ]9  }t        |t        j                  j                        r|j                  d    n| ; yw)r   N)rm   rn   rD  r>   r5  )rq   rF  s     rb   rs   z<GraphModuleDeserializer.deserialize_graph.<locals>.<genexpr>  s6      , $.c588==#AsJ,s   ?Ar`   T)r  pendingsimplifyunbacked_bindings)1r   r6  r  rf   r   r  r  r  r  r  r  r  r  r   rY  r	  r   rg   r  rm  r,  sync_fx_noder  r\   r  rT  rF  deserialize_inputr5  r  r  r  deserialize_noder  r  r  r
  r>  r  r  r   r   rB  rC  rS  r    _free_unbacked_symbols_with_pathr  r  )r%  r  r  tensor_valuerT  sym_int_valueint_valsym_float_value	float_valsym_bool_valuebool_valr  r  input_	node_nameplaceholder_nodeserialized_noder  r  r
  rB  output_noder   r   r  s                            rb   deserialize_graphz)GraphModuleDeserializer.deserialize_graphO  s   		)* #3"@"@"F"F"H 	:D,II@$U33LAHIIA4R19D((.		: $4#B#B#H#H#J 	9D-II<dMR..}=GII=tWM18D((.		9 &6%F%F%L%L%N 	;!D/II>oV22?CIII?yQ1:D((.		; %5$D$D$J$J$L 	: D.II=t^T00@HII>hO19D((.		: &6%G%G%M%M%O 	!D/II8/J151Q1Q2D((.	 			/0"#3#:#:;  	EIAvII.7{{<<"LL--	#'::#9#9)#D  )2 %!!)-=>,<<$$	1 & 4 4I'+zz'='=i'H$ -6$)%%i1AB(:6<<.U   !  !NN66q9==BBOA3i	#'::#9#9)#D /3/E/Ef/M %%e,$':6(%CDDA 	EF  055 	O22?3I3IJ%%ov>	 &.. 	BFII/8NN488@A	B 33w<1$$$ajGGnGjj''033&1&6&6q&9&>&>u&EKU#&+ ,&++A., 'KU# JJ$$ 
	CDyy}}U++8%4%U%U"nn 11!& !  2C		-.
	C 4(()Q...zzS  $00AAWXaXlXlXnWops   4-V55	W'>$W""W'r  r  c           
         dt         fd}|t        v s1|t        j                  j                  j
                  j                  k(  rq|j                  d   j                  j                  }| j                  |j                        }| j                  j                  d||i |      }| j                  ||       n[t        |t        j                   j"                        rS| j%                  |j                        \  }}| j'                  |j(                        }g ||j+                         D ]R  }	t        |	t        j,                  j.                        s(|	j0                  dk(  s8|	j2                  j5                  |       T t7        |j                        dk(  rIt9        |j                  d   d      r0t;        |dd	      r#|j                  d   j<                  j>                  nd }| j                  j                  d||||      }| jA                  ||       |j2                  j5                  |       nt        |t        j                   jB                  gtE                     rt ||      r#|j                  d   j<                  j>                  nd }| jG                  ||      \  }}| j                  j                  d||||      }| jA                  ||       n?t        |tH              rd
| ddz   dz   dz   nd}
tK        |
d| dtM        |       dz         |j2                  j5                  | j'                  |j(                               tN        jQ                  d|j>                  |jR                  |jT                  |jV                  |j2                  jY                  d             |j0                  dvrd|j2                  vri |j2                  d<   y y y )Nr   c                     t        |       }|j                  }t        |      dk(  xr' t        |d   j                  t
        j                        S )Nr"   r   )r  r|  r   rm   r}  rn   r  )r  r  r|  s      rb   _is_single_tensor_returnzJGraphModuleDeserializer.deserialize_node.<locals>._is_single_tensor_return  sG    ,V4FnnGw<1$ 
$$e&6&6* ra   r   rO  r  r"   r.  r^  TzWe failed to resolve z to an operator. z\If it's a custom op/custom triton op, this is usally because the custom op is not registeredzU when deserializing. Please import the custom op to register it before deserializing.z+ Otherwise, please file an issue on github.r  z" Unsupported target type for node z: rI  z)[deserialize_node] %s: %s(%s, {%s}) -> %sr   )r,  rB  r  )-r   rd  rn   opsr  itemr   r
  rg   r  deserialize_sym_op_inputsr	  rm  create_nodedeserialize_sym_op_outputsrm   ro   rR  deserialize_hoo_inputsdeserialize_metadatarP  r  rD  r>   rr   r5  r  r   rl  ro  r.  r  deserialize_outputsrp   r  deserialize_inputsr   r\   r   r   r6  r  rC  ra  rS  )r%  r  r  r  r  rC  fx_nodera  rP  rW  _additional_msgs              rb   r  z(GraphModuleDeserializer.deserialize_node  sv   	 	 hyy~~""**+ #**1-33;;D11/2H2HIDjj,,_fdBPTUG++OWE

 > >?667M7MNLD&001I1IJH.t.fmmo. ,a/ADDJ4F FFMM(+," ../14O33A6DO-JDQ  ''*4499   jj,,vtG $$_g>LL)UZZ**K-H-JK
 ,F3  ''*4499 
  226?KLD&jj,,vtG $$_g> fc* ,F83DEtumn DD   !66Gr$v,WXYZ 
 	D55o6N6NOP		7LLNNLLNNLLU#	
 JJ77!5  LL! 6 8ra   r  c           	         t         j                  d|       |j                  dk(  rSt        j                  t        j
                  j                  | j                  |j                  j                        d       S |j                  dk(  rvt        j                  t        j
                  j                  t        j                  |j                  j                  j                        |j                  j                        S |j                  dk(  rt        j                  t        j
                  j                  t        j                  |j                   j                  j                        |j                   j"                  |j                   j$                        S |j                  dk(  rvt        j                  t        j
                  j&                  t        j                  |j(                  j                  j                        |j(                  j*                        S |j                  d	k(  rt        j                  t        j
                  j,                  t        j.                  |j0                  j                  j                  |j0                  j                  j2                  
      |j0                  j4                        S |j                  dk(  rbt        j                  t        j
                  j6                  t        j8                  |j:                  j                  j                        d       S |j                  dk(  r|t        j                  t        j
                  j                  t        j<                  |j>                  j                  | jA                  |j>                  jB                              d       S tE        d|       )Nz[deserialize_input_spec] %sr*  r  rF  r  r-  r  r   )r  rF  r  r/  r1  r2  r1  r4  r(  r'  zUnknown input spec )#r   r6  r   r<  r0   r6  r7  deserialize_argument_specr*  rF  r:  rN   r-  r  r,  r;  r   r.  r/  r<  r1  r0  r=  r'   r2  r2  r  r>  rP   r4  r8  r(  deserialize_constant_inputrg   r:  )r%  r  s     rb   deserialize_input_specz.GraphModuleDeserializer.deserialize_input_spec)  s   		/366\!<<\\,,221<<3C3CD 
 VV{"<<\\++%%1;;??+?+?@{{11 
 VVx<<\\((%%188<<+<+<=xx++88..	  VV((<<\\11%%1+<+<+@+@+E+EF((== 
 VV|#<<\\,,(())..!,,:J:J:T:T ||33  VVw<<\\''$$!''++*:*:; 
 VV''<<\\,,''))..99!:J:J:P:PQ   !#6qc!:;;ra   oc                    t         j                  d|       |j                  dk(  rSt        j                  t        j
                  j                  | j                  |j                  j                        d       S |j                  dk(  rbt        j                  t        j
                  j                  t        j                  |j                  j                  j                        d       S |j                  dk(  rvt        j                  t        j
                  j                  t        j                  |j                  j                  j                        |j                  j                         S |j                  dk(  rvt        j                  t        j
                  j"                  t        j                  |j$                  j                  j                        |j$                  j&                        S |j                  dk(  rvt        j                  t        j
                  j(                  t        j                  |j*                  j                  j                        |j*                  j,                        S |j                  d	k(  rvt        j                  t        j
                  j.                  t        j                  |j0                  j                  j                        |j0                  j,                        S |j                  d
k(  rbt        j                  t        j
                  j2                  t        j4                  |j6                  j                  j                        d       S t9        d|       )Nz[deserialize_output_spec] %srB  r)  rC  r  rD  rE  rG  rH  r4  zUnknown output spec )r   r6  r   r<  r@   rI  rJ  r*  rB  rF  rK  rN   rC  r  rL  rD  r.  rM  rE  r,  rN  rG  rF  rO  rH  r>  rP   r4  r:  )r%  r-  s     rb   deserialize_output_specz/GraphModuleDeserializer.deserialize_output_spec^  ss   		0!4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!;<<ra   rQ  c           	      
   t         j                  d       t        j                  |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j                  |       c}      S c c}w c c}w )Nz
[deserialize_signature]rS  )r   r6  r<  r  rT  r,  rU  r/  )r%  rQ  r  r-  s       rb   deserialize_signaturez-GraphModuleDeserializer.deserialize_signature  sd    		-.&&ADQA44Q7QCFCSCSTa$66q9T
 	
QTs   A;B 
r  serialized_state_dictry   rz   .r  c           	      l   t         J | a 	 t        j                  d       t        j                  d      | _        t        dd| j
                        | _        i dt        j                  j                  j                  j                  dt        j                  j                  j                  j                  dt        j                  j                  j                  j                  d	t        j                  j                  j                  j                  d
t        j                  j                  j                  j                   dt        j                  j                  j                  j"                  dt        j                  j                  j                  j$                  dt        j                  j                  j                  j&                  dt        j                  j                  j                  j(                  dt        j                  j                  j                  j*                  dt        j                  j                  j                  j,                  dt        j                  j                  j                  j.                  dt        j                  j                  j                  j0                  dt        j                  j                  j                  j2                  dt        j                  j                  j                  j4                  dt        j                  j                  j                  j6                  dt        j                  j                  j                  j8                  t        j                  j                  j                  j:                  t        j                  j                  j                  j<                  t        j                  j                  j                  j>                  t        j                  j                  j                  j@                  t        j                  j                  j                  jB                  d| _"        i | _#        tI        |      | _%        | jM                  |jN                        | _'        i | _(        tS               | _*        d\  }}d tV        jX                  tV        jZ                  fD        \  }}	|r|j]                         D ]  \  }
}|j^                  }|j`                  dk\  rtc        d|      }t        jd                  tg        |th               |j`                        | jP                  |
<   |
jk                  |      r$tm        |
to        |      d        }tc        ||      }|
jk                  |	      stm        |
to        |	      d        }tc        ||      } tq        |dz         D ]!  }ts        | j
                  jt                         # tq        |dz         D ]!  }ts        | j
                  jv                         # |to        |      dkD  rtI        |      | _<        nd | _<        | j{                  |j|                         t        | jx                        5  | j                  |j                        }d d d        t        j                  | j                  | j|                        }i }|j                  j                  d      x}rt        j                  |      |d<   t        |d      r9i |d<   |j                  j]                         D ]  \  }}|j                  |d   |<    ||_L        t        j                  || jN                  | jF                  tI        |      | jJ                  | jx                        d a S # 1 sw Y   xY w# d a w xY w) Nz
[deserialize]T)assume_static_by_defaultF)allow_fallback_kernelsallow_non_fake_inputsr  FloorDivModularIndexingWhere	PythonModModCleanDiv	CeilToInt
FloorToIntCeilDivLShiftRShiftPowByNaturalFloatPowFloatTrueDiv
IntTrueDiv!IsNonOverlappingAndDenseIndicatorTruncToFloat)
TruncToInt
RoundToIntRoundDecimalToFloatIdentity)rM  c              3   .   K   | ]  }t         |     y wre   )r   )rq   r   s     rb   rs   z6GraphModuleDeserializer.deserialize.<locals>.<genexpr>  s      @"#
1@s   r    r"   r   r  r$  )r  r  r  r  rx   ry   rz   )Or   r   r6  r   ShapeEnvr  r   r  rn   utils_sympy	functionsr7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  r  r  r   ry   r1  r  r  r  r  r   r  r  rf   r   r   maxr   r   r   rJ  r   r   rangenextunbacked_symfloat_counterunbacked_symint_counterrz   r  rm  r   deserialize_module_call_graphr  r<  _create_graph_module_for_exportrL  rP  rS  r   r   rl  r$  r]  r5  rY   r  )r%  r  r2  ry   rz   r  count_unbacked_symfloatcount_unbacked_symintunbacked_symfloat_prefixunbacked_symint_prefixrh   r  r   r  r  r  r  r5  r  type_fieldss                        rb   deserializez#GraphModuleDeserializer.deserialize  sS    %,,, $j	)II'(,55tTDN$2',&*..%D!
$
 EKK..88AA$ "5;;#5#5#?#?#O#O$ ++55;;$ U[[//99CC$ u{{))3377$ EKK..88AA$ U[[//99CC$ ekk00::EE$ 5;;--77??$ %++,,66==$ %++,,66==$   2 2 < < I I!$" EKK..88AA#$$  2 2 < < I I%$& ekk00::EE'$( 4U[[5G5G5Q5Q5s5s)$*  2 2 < < I I+$, $kk00::EE#kk00::EE % 2 2 < < I I ;;--77??!KK..88AA5$D 8 CED&7	BDN!77'11DN )+D% %(ED!=C:#%:@(,(;(;T=N=N'O@<$&< $1779 NEArHHExx1} #Au3B3N3N)%&92884D--a0 ||$<=#&>"?"A BC256Mq2Q/&<=#&<"="? @A034I10M-N  2Q67 ?T^^==>?0145 =T^^;;<= )c..AA.E&@&P#&*#""#:#@#@A78K8KL $($F$F+==%! ==dkk4::VLD099==hGGvG!%F!3X.0LM5712 -GGMMOS @F@R@RD56u=	S
 !%L*11).."3!%!;!;56KL..#22 2  %)!5 4 %)!s,   V^/ !C!^/ ^"D^/ "^,'^/ /^3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   )r  r\   r  r5  r  )r%  r  r&  s      rb   r	  z$GraphModuleDeserializer.sync_fx_node	  sg    4/// 5.T!UVV-4$$T*GLL((("::4@Ura   c                 ,     t         fd|D              S )Nc              3   T   K   | ]  }j                  |j                         ! y wre   )r
  rF  )rq   inputr%  s     rb   rs   zDGraphModuleDeserializer.deserialize_sym_op_inputs.<locals>.<genexpr>	  s      K5T++EII6Ks   %()r   )r%  r	  s   ` rb   r  z1GraphModuleDeserializer.deserialize_sym_op_inputs	  s    KFKKKra   c                 t   t        |      j                  }|j                  D ci c]  }|j                  |j                   }}|j                  D ci c](  }|j                  | j                  |j                        * }}g }t               }|D ]  }	|	j                  |v r||	j                     }
||	j                     }|t        j                  k(  r|j                  |
       U|t        j                  k(  r/t        j                  |	j                        s|
||	j                  <   |	j                          xr |	j                   }|r|j                  ||	j                            t        j                  |	j                        rn|	j                  rJ t!        |      dkD  r2t               }|j#                  t%        |j'                                      |j                  ||	j                            e|	j                  |v su||	j                     ||	j                  <    t)        |      |fS c c}w c c}w Nr   )r  r  r	  r  r  r
  rF  r   r$   r  r>  r  keyword	iskeywordhas_default_valuer  r   r  r  r  r   )r%  r  r  schema_argsrd  argument_kindsactual_argsrC  ra  r  rF  r  is_positionals                rb   r%  z*GraphModuleDeserializer.deserialize_inputs	  s   -f5??>M>T>TUU%**ejj0UU )//
 JJ..uyy99
 
 (3% 	KJ+-!*//2%joo6<222KK$\111':K:KOO; /2F:??+ 0022P:;P;P7P  K
89"":??3%0000v;?(]FKKV]]_ 56K
89??k1.9*//.JF:??+7	K8 T{F""G V
s   H0-H5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
  rF  r>  r   )r%  r	  rC  ra  r  s        rb   r"  z.GraphModuleDeserializer.deserialize_hoo_inputs@	  st      	@F{{b &*&<&<VZZ&Hv{{#D226::>?		@
 dV$$ra   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 |dk(  r j7                  j<                        S t        |t>              rtA        |      dk(  rg S |dk(  r(|D cg c]  } 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   hxY wc c}w c c}w )Nr  r.  r  r  r  r  r  r  r  r   r   r   r  r0  r  r  r   rX  )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   r  rg   r  r\   )r  ro  r%  s    rb    deserialize_optional_tensor_argszSGraphModuleDeserializer.deserialize_input.<locals>.deserialize_optional_tensor_args	  sJ    vv*#;.#;;AGGLLII,/B3%-HIIra   rr  r4  r  )'rg   r   r  r.  r  r  r  !_SERIALIZE_TO_TORCH_MEMORY_FORMATr  _SERIALIZE_TO_TORCH_LAYOUTr  rm   r-   r  r  rm  r<  rY  rL  register_moduler   r   r  r   r   r   r  deserialize_sym_argumentr0  r  r  r  r   r  r\   r4  ry   r  r  )r%  ro  rg   typ_	submodulerF  resultrs  s   ``      rb   r
  z)GraphModuleDeserializer.deserialize_inputM	  sH   		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1A1ABB]"00AAt$5zQ	%LQRS$66sxx@RRKKE{"IIFKLs55c:LL..J C @%HII$':3%%@AA_$  %%)E)EE33C4E4E4J4JKK>>#"3"3"8"899]",,S__== #6se!<==sX X: S Ms   8AM$ M1 M6$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   r\   )r%  ro  s     rb   r+  z2GraphModuleDeserializer.deserialize_constant_input	  s    88xszz?"XX#&&XX$s}}%%XX"$$XX" #?uO!TUUra   c                    t        |t              rC|j                  dk(  r|j                  S |j                  dk(  r| j                  |j
                     S t        |t              rC|j                  dk(  r|j                  S |j                  dk(  rl| j                  |j
                     S t        |t              rC|j                  dk(  r|j                  S |j                  dk(  r| j                  |j
                     S t        d|       )Nr   r  r   r   z Unknown symbolic argument type: )rm   rM   r   r   r  r  rK   r   rG   r   r\   )r%  sym_args     rb   rw  z0GraphModuleDeserializer.deserialize_sym_argument	  s    g~.||x'~~%*33GOODD!12||z)'''*33GOODD1||y(&*33GOODD?yIJJra   c                 j    | j                  |j                  d   j                  j                  |       y rf  )r	  r
  rg   r  )r%  r  r&  s      rb   r!  z2GraphModuleDeserializer.deserialize_sym_op_outputs	  s)    /11!4::BBGLra   c                     t        |j                        dk(  ry t        |j                        dk(  rEd|j                  v r7t        |dd      s*|j                  d   j                  dk7  r fd} |||      S t        |j                        dk(  rP|j                  d   j                  dk(  r4 j                  |j                  d   j                  j                  |       y t        |j                        dk(  rft        |j                  d   j                  t        t        t        f      r4 j                  |j                  d   j                  j                  |       y t        |j                        dk(  rc|j                  d   j                  dk(  rGd |j                  d	<   |j                   j                   j#                  |j                         d
       y  j%                  ||       y )Nr   r"   ztorch.ops.higher_orderr^  Tr  c                    g }d }| j                   d   j                  dk(  r| j                   d   j                  }nKt        | j                   d   j                  t
        t        t        f      r| j                   d   j                  }j                  | j                        }|J j                  |||d|       t        |      |j                  d<   |j                  |j                  <   y )Nr   r.  r   )r
  r   r.  rm   rg   rM   rG   rK   r#  rP  generate_getitemr   r5  r  r  )r  r&  rT  rF  deserialized_metadatar%  s        rb   #_deserialize_hop_with_single_returnzXGraphModuleDeserializer.deserialize_outputs.<locals>._deserialize_hop_with_single_return	  s    &("**1-22kA)11!4>>C#++A.44#_6FG *11!4::C(,(A(A#,,)% &%%haAVW&+HoU#=D,,W\\:ra   r.  r   _unused)r   r
  r  ro  r   r	  r.  r  rm   rg   rM   rG   rK   r  r5  _renamerm  _target_to_strdeserialize_multiple_outputs)r%  r  r&  r  s   `   rb   r$  z+GraphModuleDeserializer.deserialize_outputs	  s   &&'1, ''(A-(O,B,BBO-JDQ''*//9<& 7PP ''(A-''*//;>o55a8BBGGQ(()Q.:##A&,,_.>?4
 o55a8>>FFP''(A-''*//9< #'GLLOOtzz88HIQR))/7Cra   rF  r\  r  c                    t        |t              r|j                  }nQt        |t              r|j                  }n4t        |t
              r|j                  }nt        dt        |             | j                  j                  dt        j                  ||f|      }| j                  ||       |j                  | j                  |          |j                  j!                  |       y )Nz+generate_getitem got unknown argument type rO  r  )rm   rN   r  rM   r  rK   r:  r   rm  r   rb  rc  r	  r>  r  r5  r  )r%  rT  r&  rF  r\  r  r  individual_outputs           rb   r  z(GraphModuleDeserializer.generate_getitem	  s     c>*88D^,;;D-.;;D =d3i[I  !JJ22cN	 3 
 	$ 1244T:; 	%%&;<ra   c                 V   t        |      D ]  \  }}t        |t        t        t        f      r| j                  |||||       8t        |t              sJ |j                  dv r | j                  |||j                  ||       x|j                  dv r| j                  j                  dt        j                  ||f      }|j                  g        | j                  |d   ||j                  |       |j                  j!                  |       |d   |j                  d<   |j                  dk(  rl| j                  j                  dt        j                  ||fd      }|j                  d        d |j                  d<   |j                  j!                  |       t#        d|        y )	N)r.  r0  r  )rX  r  r  r  r  r  r  r  rO  rM  r   r  r  z Unimplemented node output type: )rY  rm   rN   rM   rK   r  r#   r   rg   rm  r   rb  rc  r>  generate_getitemsr5  r  NotImplementedError)	r%  rT  r&  rC  r  r\  rF  list_outputr  s	            rb   r  z)GraphModuleDeserializer.generate_getitems
  s    "$ ,	THC#@PQR%%gsC1F c8,,,xxFF%%gsyy#7L  	 	 #jj44#$$cN
 #&&RL+syy:O   ''(=>*22,  'Y&$(JJ$:$:#$$cN"	 %; %! %04!&&u-!&&--.CD),LSE*RSSY,	Tra   c                    | j                  |j                        }g }t        |j                        dk(  rt	        |j                  d   j
                  t              sJ t	        |j                  d   j
                  d   t              sJ | j                  |||j                  d   j                  |       n| j                  |||j                  |       t        |      |j                  d<   || j                  |j                  <   y )Nr"   r   r   )r#  rP  r   r
  rm   rg   r  rN   r  rX  r   r5  r  r  )r%  r  r&  r  rT  s        rb   r  z4GraphModuleDeserializer.deserialize_multiple_outputsG
  s     !% 9 9/:R:R S !&&'1,o55a8>>EEEo55a8>>qA>RRR""''*55%	 ""'?#:#:<Q
 $HoU5<$$W\\2ra   rP  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 )Nr  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.nnrI  r    rn   r"   )rJ  rn   r   r  r  rl  ro  )r  rL  r  r  r  r%  s        rb   deserialize_meta_funczKGraphModuleDeserializer.deserialize_metadata.<locals>.deserialize_meta_funcj
  s    F ++J7*;*A*A#*Fqr*J'"--g6*;*A*A#*Fqr*J'001BCCF/ 3vt,,,$VT2F	3
 Mra   r  c                     | ||ffS re   r`   )keyr  r  s      rb   import_nn_module_stackzLGraphModuleDeserializer.deserialize_metadata.<locals>.import_nn_module_stack
  s    T2J&ra   c                     g }d\  }}d\  }}t        |       D ]>  \  }}||v r|dz  }||v r|dz  }|dk(  s |dk(  s&|j                  | ||        |dz   }@ |j                  | |d         t        |      dk(  sJ |S )N)r   r   )z[(z)]r"   r  r      )rY  r>  r   )rP  outstartr  r  r  endcs           rb   metadata_splitzDGraphModuleDeserializer.deserialize_metadata.<locals>.metadata_split
  s    q!1'1 (FCAvQaQca1f

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

8EF+,3x1}$}
ra   c              3   4   K   | ]  }  |         y wre   r`   )rq   r  r  r  s     rb   rs   z?GraphModuleDeserializer.deserialize_metadata.<locals>.<genexpr>
  s#      # 't(<=#s   r  r  r  r  )	rS  r   r   r  r  r>  r   r   r   )r%  rP  r  r  r  nn_module_stack_strr  source_fn_st_strr  source_fn_strr  
target_strtorch_fn_str
custom_strr  r  s   `             @@rb   r#  z,GraphModuleDeserializer.deserialize_metadatae
  sO    ",,}55;5!,C	S 	& #+,,/@"AAA'  # #/55lC# O &5C!"'||,=>>>L!1!7!7!E O#0#6#6s#; j##T+@+L$MNO &2C!"#<<
33<3#L$6$6|$DEC
O!h//:/ JJz2CM
ra   rW  c                 b   t         j                  d|       |j                  dk(  r*t        j                  |j
                  j                        S |j                  dk(  r*t        j                  |j                  j                        S |j                  dk(  r*t        j                  |j                  j                        S |j                  dk(  r:t        j                  |j                  j                  | j                  |            S t        j                  d| j                  |            S )	Nz[deserialize_argument_spec] %sr.  r  r0  r  r4  r'  r  )r   r6  r   r<  rN   r.  r  rM   r0  r  rK   r  r8  r4  r
  rZ  s     rb   r*  z1GraphModuleDeserializer.deserialize_argument_spec
  s    		2A666[ $$!++*:*:;;VV|#$$!,,*>*>??VV~%&&ANN,B,BCCVV&&&__))1G1G1J  &&Bd6L6LQ6OPPra   rk  c           	      \   t        j                  |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j                  |       c}t        |j                        t        |j                        |j                  x}r|      S d       S c c}w c c}w )Nrm  )	r<  r;   r	  r*  r
  r   rn  ro  rp  rq  s       rb   !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           	          t         j                  d       |D cg c]J  }t        j                  |j                  |j
                  r| j                  |j
                        nd       L c}S c c}w )Nz 
[deserialize_module_call_graph]ru  )r   r6  r<  r:   rv  r  r  rw  s      rb   rX  z5GraphModuleDeserializer.deserialize_module_call_graph
  sg     			56 +

  II  ::5??K

 
	
 

s   AA,)r   Nre   )NN)Sr]   r^   r_   dataclassesr   r  r&  r   r   r  r   r  r  r   r   r   r   r   r   r  r  rL   rn   r  rJ   r  rF   r  rO   r   r   r'   r<  r   rD  r>   r  r,   r  r   r  r0   r,  r@   r/  r/   r  r1  r.   r   r7  r{   r   r   r   r   r`  r	  r  r%  r  r<   r"  r#   r
  r&   r+  rw  r!  r$  rN   rM   rK   r  r  r  r#  r  r*  r;   r  r:   rX  r`   ra   rb   rY   rY   z  si   R R R( 8D>  0- -c 4 HL/-/-#+E#tU2B,C#D/-	/-bV c5<<6G0H &x E%:O4P g %emm8K2L  
 
0
			
P(5PSAS;T2U P(u% uEHHNN una ah a4 aF3<	 3<bll 3<j-= -= -=^
 
B<S<S 
 QUw)!,w)  %T#u||*;%<e%CDw) c3h./	w)
 !%ellC/0$sCx.@A5HI
w) 'tC1L1L,L'MNw) 
w)rA Auxx}} AL%#$ %#N%T--@ %J>X J># J>XVm V VK$M$ M M6D4 6D%((-- 6Dp= = >>3CCD	=
 =  $CH~=<3T 3T
  $CH~3Tj=#=.3hhmm=	=<BT#s(^ BS#X BHQ8 Q Q
%8
			
"
!%o!6
	b  	!
ra   c                   d   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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)rZ   Nexpected_opset_versionc                     i | _         |r| j                   j                  |       d| j                   vr,t        j                  j	                         | j                   d<   y y r  )r  r  rn   r  r  )r%  r  s     rb   r&  z$ExportedProgramDeserializer.__init__
  sR    68#!''../EF44427((2T2T2VD''/ 5ra   r  r  r   c                     t         j                  d       i }|j                         D ]K  \  }}|j                  |      x}rt         j                  d||       |||<   6t         j	                  d|       M |S )Nz 
[deserialize_range_constraints]z([deserialize_range_constraints] %s -> %sz;Symbol %s did not appear in the graph that was deserialized)r   r6  rf   rS  r   )r%  r  r  r   rh   ri   symbols          rb   deserialize_range_constraintsz9ExportedProgramDeserializer.deserialize_range_constraints
  s    
 			56(..0 	DAq.22155v5		DaK,-!&)QST	 ! ra   F_unsafe_skip_version_checkrw   rx   ry   rz   .c                   t        |t              sJ |j                  }|j                  t        d   k7  r@|j                  dk(  r|j
                  dk(  s"|s t        d|j                   dt         d      |j                  j                         D ci c]M  \  }}|t        j                  t        |j                  t               t        |j                  t                    O }	}}t               j!                  |j"                  ||||	      }
| j%                  |	|
j&                        }t)        j                  |
j"                  |
j"                  j*                  |
j,                  |
j.                  ||
j0                  |
j2                  |
j4                  |j6                  D cg c]  }t9        |       c}	      }t:        j=                  d|       |S c c}}w c c}w )Nr   zSerialized schema version z+ does not match our current schema version rI  )	rootrm  r  rx   r   r  rz   ry   r  z
[deserialize]: %s)rm   r)   r  r  rD   r  r\   r   rf   r   r   r   min_valr   max_valrY   r`  r  r  r  r<  rm  r  rx   r  rz   ry   r  r   r   r6  )r%  rw   rx   ry   rz   r  versionrh   ri   r  resr   rz  s                rb   r`  z'ExportedProgramDeserializer.deserialize
  s    *O<<<"11 ==N1--MMQ7==A#5-$01A1P1P0Q RAAO@PPQS  )::@@B 

 1	 **!!))fW5!!))V4  
  
 &'33)) 
 !>>   

 ##!!""((MM~~/!33--mm1A1K1KLA}Q'L

 			'0? 
8 Ms   AGGre   )r]   r^   r_   r   r   r   r   r&  r   r   r   r   r  r)   r   rn   r7  r{   r   r   r<  r`  r`   ra   rb   rZ   rZ   
  s   WxS#X/G W!"3(C(C#CD!  $C$56! 
ellK'	(	!0 7 $)7)7 $sELL015897 c5<</0%78	7
 !%ellC/0$sCx.@A5HI
7 
		7ra   rZ   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   )	rm   r
   rg   r{   base64	b64encoder   superr   )r%  r  	__class__s     rb   r   zEnumEncoder.default/  sL    c4 99c5!##C(//88ws##ra   )r]   r^   r_   r   __classcell__)r  s   @rb   r   r   .  s    $ $ra   r   c           
         t        | t              r!| j                  t        | j                        iS t        j                  |       rKt        j                  |       D ci c],  }|j                  t        t        | |j                              . c}S t        | t              r| D cg c]  }t        |       c}S t        | t              rt        d | D              S t        | t              r-| j                         D ci c]  \  }}|t        |       c}}S t        | t              r?| t        j                   k(  ry| t        j                    k(  ry| t        j"                  k(  ry| S | S c c}w c c}w c c}}w )Nc              3   2   K   | ]  }t        |        y wre   )r   )rq   rW  s     rb   rs   z%_dataclass_to_dict.<locals>.<genexpr>B  s     8q'*8s   Infinityz	-InfinityNaN)rm   rU   r   r   rg   r  is_dataclassr_  r  ro  r  r   r   rf   r   r   r   nan)r  frW  rh   ri   s        rb   r   r   7  s4   #v,SYY788		!	!#	& !'',
 FF&wsAFF';<<
 	
 
C	/23!"1%33	C	8C888	C	58YY[ATQ%a((AA	C	$((?TXXIDHH_J
)

 4 Bs   1E+&E0 E5r  c                 j    t        j                  t        |       t        d      j	                  d      S )NF)r   	allow_nanr   )r   r   r   r   r   )r  s    rb   _to_json_bytesr  R  s+    ::(-;%PWW ra   rw   r  c                 J   t        | j                        5  t        ||      j                  |       }d d d        t	        j
                  t              sJ t        |j
                        }t        ||j                  |j                  |j                        }|S # 1 sw Y   hxY wre   )r   rz   rX   rV   rm   rw   r)   r  rv   rx   ry   )rw   r  r   serialized_program
json_bytesr   s         rb   rV   rV   X  s    
 
00@0O0O	P &6?

)$
% 	& (99?KKK 2 C CDJ!%%$$))	H O& &s   BB"c           	         t        | t              rJ d|  d       t        j                  |       t        k(  rt        | j                  |      S 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  }|j0                  }	t        ||	   t3        ||	            }
t5        ||	|
       6 |S t        |t6              rBt        |      dk(  r|S t        j                  |       d   }|D cg c]  }t        ||       c}S t        |t              rFt        j                  |       d   }|j9                         D ci c]  \  }}|t        ||       c}}S | t:        k(  rt;        |      S |S c c}w c c}}w )NzUnresolved class type: 'z'.r    r   r"   r`   )rm   r   typing
get_originr   r   
__origin__r   r   get_argsr   
issubclassrU   r   rU  iterr  r  r|   r   r  r  get_type_hintsr_  r  ro  setattrr  rf   r   )r   dataty_argsr  _value
field_typer  
type_hintsr  r  new_field_objd_typerc   v_typerh   ri   s                   rb   r   r   m  sk   #s#G'?uB%GG#*!#..$77-$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	T{K = Ks   KKFr  r  c                4   t        | j                  t              sJ | j                  j                  d      }t	        j
                  |      }t        t        |      }t        |      j                  || j                  | j                  | j                  |      S )Nr   r  )rm   rw   r{   r   r   r   r   r)   rZ   r`  rx   ry   rz   )r   r  r  exported_program_strexported_program_dictserialized_exported_programs         rb   r`  r`    s     h//777#44;;GD JJ';<"4.# ''=>JJ##= K  ra   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                  }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/         ||||||j0                  |	      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| j
                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry t        d|        )Nr  r.  rX  r   r  r   r  r  r  r0  r  r  r  r  r  r  r  r   r  r  r  r  r  r4  r  z+Unknown input type to the ExportedProgram: )r   r.  rX  r0  r  r  r  r  r  r  r4  r:  r  s    rb   _get_argumentz*_canonicalize_graph.<locals>._get_argument  s   66YVV{";;VV|#<<VVxVVy VVz!VV{"VV{"VV|#VV|#<<VV}$== VV~%>>!VV&??"VV''VV))VV{"VV{"VVy VVz!VV}$== VV~%>>!VVz!VV,,(((VV&??"VV}$ #Nqc!RSSra   c                 b    t        |t              sJ t        j                  |  |             y re   )rm   r#   r^  tree_map)r  r  r  s     rb   for_argsz%_canonicalize_graph.<locals>.for_args  s&    !X&&&=+,ra   c                 0    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 ]3  \  }fd}	|j                  D ]  } |	|j                          5 fd	}
fd
D ]  } |
|        dt        f fd}j                         D ]  \  }|j                  dk(  s |        t              dkD  rt        j                        \  }}    }|j
                  D ]  } |
|        |j                  |       v 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)r]   r^   r_   r  r   r|   r`   ra   rb   Edgesr    s    s)OHra   r  r   c                    | y t        | t              r| j                  S t        | t        t        t
        f      r8| j                  dk(  r| j                  S | j                  dv ry t        d|        t        | t              rC| j                  dk(  r| j                  j                  S | j                  dk(  ry t        d|        t        | t              r| j                  S t        d|        )Nr  )r   r   r   Unknown argument type: r.  r  zUnknown optional tensor type: )rm   rN   r  rM   rG   rK   r   r  r:  r?   r.  r'   r  s    rb   r  z9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_name  s    y!^,vvAAQRS66Y&99$VV@@(+B1#)FGGA5666[(;;+++VVy((+I!)MNNA01vv$'>qc%BCCra   c                 >     |       x}rj                  |       y y re   )r  )r  r   r  graph_inputss     rb   	add_inputz:_canonicalize_graph.<locals>.sort_nodes.<locals>.add_input  s%     #1# $$Q' $ra   c                 2     |       x}r|vsJ |<   y y re   r`   )r  r   	def_tabler  r\  s     rb   add_defz8_canonicalize_graph.<locals>.sort_nodes.<locals>.add_def  s.     #1#I---#&IaL $ra   r   c                      |       x}rL|v ry |vr|v sJ y |   }|   j                   j                            xj                  dz  c_        y y )Nr"   )r  r>  r  )	r  r   srcry   r  edgesr  r  r\  s	      rb   add_edgez9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_edge"  sk     #1#I~	) L000#A,C#JOO**3/#JNNa'N $ra   c                 D     |       x}r|vsJ t              |<   y y re   )r   )r  r   r  ranks     rb   add_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_rank0  s0    QKq}$}d)Q  ra   c                 ,     |       }|r	|vr|   S y)NrM  r`   )r  r   ry   r  r  s     rb   get_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_rank5  s"    AQi'Awra   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 re   )r>  )rW  r  rankss    rb   <lambda>zc_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks.<locals>.<lambda>B  s    5<<#< ra   r`   )r  r  r  r  s    @rb   	get_rankszQ_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks@  s    <a@ra   )r	  r  rF  heapqheappushr  )	r\  r  r   r  	args_rank
candidatesr  r  r  s	        rb   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   r  r   r   rY  r
  r	  rF  r   rf   r  r   r  heappopr>  r  clear)r  r  r  r  r  r   r  r-  r  r  r  r  r  r  r  r  r  r  r  r  r\  r  ry   r  sorted_inputss   `             @@@@@@@@rb   
sort_nodesz'_canonicalize_graph.<locals>.sort_nodes  sI   		 	 
	 "%$&	"$IK
!	D8C= 	D0  	#A( Y"	# #5) 
	&IC'
 \\ %!$% r1E#J
	& #5) 	*IC	( 	( [[ *155)*	* 	$
	  	"AXq!	"	Fs 	F 	F kkm 	#FCuuzc"	# *o!j1IAq#:D\\ &1%&JJt%<<c
 ($Kuuqy y
55A:!$'( #JOO!!# *o! 
ra   c                    fd}| y t        | t              r# || j                  j                        | _        y t        | t              r3| j
                  dk(  r# || j                  j                        | _        y y t        | t              r3| j
                  dk(  r# || j                  j                        | _        y y t        | t              r3| j
                  dk(  r# || j                  j                        | _        y y t        | t              r# || j                  j                        | _        y t        d|        )Nc                 n    dt               }| vsJ || <   | |v sJ |j                  |       ||<   |S )Nr  )r   pop)r  r  new_name
name_tables      rb   r  z8_canonicalize_graph.<locals>.rename_def.<locals>._renamee  sR    3z?+,H:---#+Jx v%%%%zz(3F8Ora   r  r  )rm   rN   r  r  rM   r   r  r  rK   r  rG   r  r'   r  r:  )r  r  rm  r  s     rb   
rename_defz'_canonicalize_graph.<locals>.rename_defd  s   	 9a(QVVU%8%89AF>*vv"#AIIu/C/CD	 #+,vv"#AIIu/E/EF	 #?+vv"#AIIu/D/DE	 #,-QVVU%<%<=AF #:1#!>??ra   c                 &   | y t        | t              r,j                  | j                  | j                        | _        y t        | t        t
        f      r<| j                  dk(  r,j                  | j                  | j                        | _        y y t        | t              r<| j                  dk(  r,j                  | j                  | j                        | _        y y t        | t              rZ| j                  dk(  rJj                  | j                  j                  | j                  j                        | j                  _        y y t        | t              r,j                  | j                  | j                        | _        y t        d|        )Nr  r.  r  )rm   rN   rS  r  rM   rK   r   r  rG   r?   r.  r'   r:  )r  r  s    rb   replace_usez(_canonicalize_graph.<locals>.replace_use  s   9a(^^AFFAFF3AFN,<=>vv"&NN199aii@	 #?+vv"&NN199aii@	 #12vv$#->>!++2B2BAKKDTDT#U  %,-^^AFFAFF3AF #:1#!>??ra   r   r  r  _gr"   )	r	  r
  r  r  r  r  r  r  r  )r#   r  r   r
  r	  rF  rP  r  r   sortedr  rf   rb  
itemgetterr  r  r  r  r   _canonicalize_graphr  rm  r  r,   r  )r	  sorted_outputsrm  ry   r
  sorted_nodesr  r  r  r  r-  sorted_tensor_valuessorted_sym_int_valuessorted_sym_float_valuessorted_sym_bool_valuessorted_custom_obj_valuescounterr   r  r  r  r  r  s   ` ``                @@@rb   r  r    s   4T 4Tn-un ekk*L|EKK 0000 "$J@6@&   Q   $ 	$AZ#	$$  ) 	)A[!%%(	))  !a !  	

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

 ! %'wi.

1
	 *,0. % = =2
E *ra   r<  ry   c                    t        j                  |       } |xs
 t               }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/        t1        |j                  |j                               |      }	t        |	      dkD  rt1        d |	D         \  }
}nd}
d}t	        t/        t1        |j"                  |j$                              |      }t1        d	 |D         \  }}t3        |
|||      \  }fd
}fd}|D ]
   |        |D ]
   |        t5        t7        |t9        t;        |      t;        |            |      ||| j<                  | j>                  | j@                        S )ak  
    Normalize a serialized ExportedProgram, so that different eager program which
    shares the same semantics can get a single representation on disk.

    This function canonicalizes an ExportedProgram by:

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

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

    Returns:
        ExportedProgram: The canonicalized exported program.
    r   r  c                     | j                   S re   )rv  )rW  s    rb   r   zcanonicalize.<locals>.<lambda>  s    PQPUPU ra   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   r    r1  r  r2     r4  r   r(     Unknown input type: )rm   r0   r   r-  r,  r   r.  r1  r0  r2  r  r(  r  r:  )ro  r\  _argr%  s       rb   
rank_inputz canonicalize.<locals>.rank_input  s   \dD$	***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!>??ra   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|       )NrB  r  rC  rD  r"   rE  r$  rG  r#  rH  r    r4  r   Unknown output type: )rm   r@   r   rD  r.  rE  r,  r:  )r  r\  r'  r%  s       rb   rank_outputz!canonicalize.<locals>.rank_output
  s    \dD$
+++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!?@@ra   c              3   &   K   | ]	  \  }}|  y wre   r`   rq   r\  r  s      rb   rs   zcanonicalize.<locals>.<genexpr>#  s     *Fa1*F   r`   c              3   &   K   | ]	  \  }}|  y wre   r`   r-  s      rb   rs   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k(  rN|j                  }|j                  dk(  r|j                     |_        y |j                  dk(  ry t        d	|       |j                  d
v ry t        d|       | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  ry t        d|        )Nr*  r.  r0  r  r   Unknown sym_int type: r  r   Unknown sym_float type: )r  r   r   r   r  r4  r&  r-  r   r1  r2  r4  r(  )rm   r0   r   r*  rF  r.  r  r0  r  r:  r  r-  r   r1  r2  r4  )r%  rF  r   r   r  t_custom_objtokreplace_tables          rb   replace_inputz#canonicalize.<locals>.replace_input1  s#   $	***99$//%%Cxx;&MM&qvv.\)NN66Y& -aii 8AIVVx'(+A!)EFF^+$$66Y& -aii 8AIVVz)(+CA3)GHH   $';C5%ABBYY+%""A"166*AFYY("A"166*AFYY++$$((A"166*AFYY,&??..L -l.?.? @LYY'!**..C$SXX.CHYY** #7v!>??ra   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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	       )NrB  r.  r0  r  r   r1  r  r   r2  )r  r   r   r   r  r&  rC  rD  rE  rG  rH  r4  r*  )rm   r@   r   rB  rF  r.  r  r0  r  r:  r  rC  rD  rE  rG  rF  rH  r4  )
r  rF  r   r   r  gur4  r5  r%  s
           rb   replace_outputz$canonicalize.<locals>.replace_outputh  sk   $
+++99%""&&Cxx;&MM&qvv.\)NN66Y& -aii 8AIVVx'(+A!)EFF^+$$66Y& -aii 8AIVVz)(+CA3)GHHVV$';C5%ABBYY-'  $$A"166*AFYY++$$((A"166*AFYY11**..A"166*AFYY22++A&quuzz2AEEJ -a.?.? @AYY//((A&quuzz2AEEJ -a.?.? @AYY'!**..C$SXX.CH #8!?@@ra   rS  )rm  r  r  r  )!r  deepcopyr  r   r  r  rf   rb  r  r   r  r  r  rm  r   r	  rT  r
  rU  r   r   r   r   rY  r  r  r)   r.   r/   r  r  r  r  )r<  ry   r  r   r  r  rm  r(  r+  
sorted_insr	  rT  sorted_outsr  rU  sorted_graphr6  r:  r5  r%  s                     @@rb   r  r    sq   , 
r	B#,suI 0 0 6 6 8h>Q>QRS>TUVMr##))+1D1DQ1GH 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~ui#L-5@n0Ad  d  t  $ -!,/ 0
 $+((,,&& ra   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  r  r   s    rb   rs  zExtensionHandler.namespace      !S]]O3S"TUUra   c                 2    t        | j                   d      Nz op_name() must be implementedrB  r   rr   s     rb   rt  zExtensionHandler.to_op_name      !S]]O3Q"RSSra   r  c                 2    t        | j                   d      rE  rB  )r   r  s     rb   r  zExtensionHandler.from_op_name  rG  ra   c                 2    t        | j                   d      )Nz  op_schema() must be implementedrB  rF  s     rb   r  zExtensionHandler.op_schema  rC  ra   N)r]   r^   r_   __doc__classmethodr   rs  rt  r  rn   FunctionSchemar  r`   ra   rb   r@  r@    s     V# V V Ts T T T T T Ve22 V Vra   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 rI  z is already registered.rn   builtinsN)	r  r@  r  rm   r   r^   rJ  rs  r  )rM  rN  s     rb   register_extensionrQ    s    
 + >	():(;1=>  11VgY>U3VV1gt$$$%%g.((4  &&(0IIII'8G$?P/99;<ra   c                  <    t        t        j                               S re   )r   r  r  r`   ra   rb   r  r    s    (--/00ra   r  r  re   (  r  r  r   r  r  r  r   r   rg  loggingr   rb  r  r  collectionsr   r   collections.abcr   r   
contextlibr   r   r	   enumr
   r   r   r   r   r   r   r   r   rn   torch.export.exported_programexportrw   r<  torch._export.non_strict_utilsr   torch._export.verifierr   torch._subclasses.fake_tensorr   r   torch.fx._symbolic_tracer   torch.fx.experimentalr   torch.utilsr   r^  torch.utils._pytreer   r   torch.utils._sympy.numbersr   torch.utils._sympy.symbolr   r   torch.utils._sympy.value_rangesr   torch.utils._tracebackr   rP  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   rL   rM   rN   rO   rP   rQ   rR   rS   rT   unionrU   __all__	getLoggerr]   r   r   r\   r   rj   r   r   r   MetaTyper  r  uint8BYTEint8CHARuint16UINT16int16SHORTint32INTint64LONGfloat16HALFfloat32FLOATfloat64DOUBLE	complex32COMPLEXHALF	complex64COMPLEXFLOAT
complex128COMPLEXDOUBLEBOOLbfloat16BFLOAT16float8_e4m3fnFLOAT8E4M3FNfloat8_e5m2
FLOAT8E5M2r   r  
sparse_coo	SparseCoo
sparse_csr	SparseCsr
sparse_csc	SparseCsc
sparse_bsr	SparseBsr
sparse_bsc	SparseBsc_mkldnnstridedStridedr   ru  contiguous_formatContiguousFormatchannels_lastChannelsLastchannels_last_3dChannelsLast3dpreserve_formatPreserveFormatr  rt  eqnelegeltgtnegposand_or_truncsym_notmulr  subfloordivmodpowsym_int	sym_floatsym_itesym_maxsym_minsym_sqrttruedivrd  anyrv   r~   r   r   r  r   r   r   r   r7  r   r   r|   r   r{   r   r   r   r   r   r   r   r   r   r   r  r  r   r  rW   rX   rY   rZ   JSONEncoderr   r   r  rV   r   r`  r  r  r  r@  rQ  r  r  r  r`   ra   rb   <module>r     s         	        / . % (  I I I   * * Q 0 D ; 1 ) > - 6 7 4 03 3 3 3 3 3 3 3 3 3 3 3 3h  g!	\ 	.DdO . 	LL		NN	MM	  	KK	JJ
 
LL*## 
KK!!	
 
KK 
KK 
MM:?? 
MM:## 
MM:$$ 
OOZ++ 
OOZ,, 
j.. 
JJ
 
NNJ'' 
00  
z,,! ( ))BC  
f&&	f&&	f&&	f&&	f&&	MM6>>	MM6>>  **DE  
\::	22	L77	<66	% ! %11R$S ! KKKKKKKKKKKKLLLLMMLLJJ	MMLLLLLLLLLL	MM	OO	MM	MM	MM	NNMM5< HxHH HH      4& 4U\\ 4(E%,,u~~uzzQR (
sELL01 
f 
*
5!67 
H 
*	
%emm 34 	
 	
U\\ j  >B x 9: AGZ G!15" 5L/sm/.1/
/0d38neCHou<=?5:: ?s ?x} ?6
8C= 
ejj 
6u|| 6t 6	ELL+56		#
	A 	R 	R 	RCD C i
e i
 i
X# ?
% ?
 ?
D \
 \
 \
~" PE P Pf$$"" $6   /32((DcN+  	*$R 8<  %	 $T#s(^4
 *f
5$sCx. !fT	 :>\\$,SX$6\\~V V,Q#YQ,-Q&1 DF d3i.>)??@ E?A 4T*:%; ;< Ara   