
    7h2                       % S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKJrJr  S SKJrJr  S SKJr  S SKJrJr  S SKJr  S SKJrJrJrJrJrJrJ r   S SK!r!S SK"r"S SK#J$s  J%r&  S SK'J(r(  S S	K)J*r*  S S
K+J,r,J-r-  S SK.J/r/  S SK0J1r1  S SK2J3r4  S SK5J6r6J7r7  S SK8J9r9  S SK:J;r;J<r<  S SK=J>r>  S SK?J@r@  SSKAJBrB  SSKCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrSJTrTJUrUJVrVJWrWJXrXJYrYJZrZJ[r[J\r\J]r]J^r^J_r_J`r`JaraJbrbJcrcJdrdJereJfrfJgrgJhrhJiriJjrjJkrkJlrlJmrmJnrnJoroJprpJqrqJrrrJsrsJtrtJuru  SSKvJwrw  / SQrx\	R                  " \z5      r{ " S S\|5      r}S\~\\4   4S jr\ \,\\"R                  \\"R                  \\"R                  \&R                  4   rSrSr0 \"GR                  \dGR                  _\"GR                  \dGR                  _\"GR                  \dGR                  _\"GR                  \dGR                  _\"GR                  \dGR                  _\"GR                   \dGR"                  _\"GR$                  \dGR&                  _\"GR(                  \dGR*                  _\"GR,                  \dGR.                  _\"GR0                  \dGR2                  _\"GR4                  \dGR6                  _\"GR8                  \dGR:                  _\"GR                  \dGR<                  _\"GR>                  \dGR@                  _\"GRB                  \dGRD                  _\"GRF                  \dGRH                  _r\" \5      r\"GRN                  \XGRP                  \"GRR                  \XGRT                  \"GRV                  \XGRX                  \"GRZ                  \XGR\                  \"GR^                  \XGR`                  \"GRb                  \XGRb                  \"GRd                  \XGRf                  0r\" \5      r\"GRl                  \ZGRn                  \"GRp                  \ZGRr                  \"GRt                  \ZGRv                  \"GRx                  \ZGRz                  0r\" \5      r\GR                  \GR                  \GR                  \GR                  \GR                  \GR                  \GR                  \GR                  \GR                  \GR                  \
GR                  \"GR                  \GR                  \GR                  \GR                  \GR                  \GR                  \GR                  \"GR                  \"GR                  \"GR                  \"GR                  \"GR                  \"GR                  \GR                  \GR                  1r\" S \ 5       5      (       a   e\ " S S 5      5       r\ " S! S"5      5       rS\IS#\"GR                  4S$ jrS%\ \"R                  \"R                  \"R                  \!GR                  4   4S& jrS%\ \\"R                  4   S#\m4S' jrS%\ \\"R                  4   S#\k4S( jrS%\ \\"R                  4   S#\g4S) jrS*\"GR                  S#\p4S+ jrSq\S,   \S-'   S.\,4S/ jrS0\S1\S#\,4S2 jr\4S3\\   S4\S#\4S5 jjrS6\ \~\\4   \\S74   \4   4S8 jrS9\!GR                  S:\S#\\   4S; jrS9\\   S#\!GR                  4S< jrS=\!GR                  S>\<4S? jrS@\~\!GR                  \>4   S#\~\\c4   4SA jrSB r\ " SC SD5      5       r " SE SF\5      r\ " SG SH\SI95       r\ " SJ SK\SI95       r\ " SL S,\SI95       r\ " SM SN\SI95       r " SO SP\GR                  5      rSQ rSR\S#\4SS jrS\4ST\&R                  SU\\~\\4      S4\S#\4SV jjGr SW Gr ShSXSY.S3\SZ\\~\\4      S#\&R                  4S[ jjjGrS#\\M\~\\4   4   4S\ jGr ShS]\JS^\G\\      S#\J4S_ jjGr " S` Sa5      GrSb\\   Sc\G\   4Sd jGrSe Gr0 Gr	\~\\   \G\   4   \Sf'   0 Gr
\~\\G\   4   \Sg'   g)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                       \ rS rSrSrg)SerializeErrorj    N)__name__
__module____qualname____firstlineno____static_attributes__r^       W/var/www/fran/franai/venv/lib/python3.13/site-packages/torch/_export/serde/serialize.pyr\   r\   j   s    rd   r\   dc                 n    U R                  5        VVs0 s H  u  pUR                  U_M     snn$ s  snnf N)itemsvalue)rf   kvs      re   _reverse_maprm   n   s*    #$779-941AGGQJ9---s   1;c              #   j   #    U  H)  n[        U[        R                  R                  5      v   M+     g 7frh   )
isinstancetorch_ops
OpOverload).0ops     re   	<genexpr>rv      s$     Hxz"ejj3344x   13c                   >    \ rS rSr% \\S'   \\S'   \\S'   \\S'   Srg)SerializedArtifact   exported_program
state_dict	constantsexample_inputsr^   N)r_   r`   ra   rb   bytes__annotations__rc   r^   rd   re   ry   ry      s    rd   ry   c                   >    \ rS rSr% \\S'   \\S'   \\S'   \\S'   Srg)_SerializedProgram   r{   r|   r}   r~   r^   N)r_   r`   ra   rb   r)   r   r   rc   r^   rd   re   r   r      s    %%rd   r   returnc                     U R                   c  [        R                  " U R                  S9$ [        R                  " U R                  U R                   S9$ )N)typer   index)r   rq   devicer   )rf   s    re   deserialize_devicer      s7    ww||((<<QVV17733rd   sc                     [        U [        R                  [        R                  [        R                  45      (       a  U R
                  R                  n [        R                  R                  R                  U 5      $ rh   )rp   rq   rL   rF   rJ   nodeexprsympyprintingreprsreprr   s    re   _print_sympyr      sJ    !ellEMM5>>BCCFFKK>>$$Q''rd   c           	         [        U [        R                  [        R                  [
        45      (       a  [        R                  " U 5      (       a  [        R                  " [        U 5      S9$ [        U [        R                  [        R                  45      (       d   eU R                  R                  c&  [        R                  " [        [        U 5      5      S9$ [        R                  " [        [        U 5      [        R                  " U R                  R                  S9S9S9$ [        SU  S[        U 5       S35      e)Nas_intas_exprhintz,SymInt should be either symbol or int, got `` of type ``)rp   rq   rL   r   Symbolintr   is_concrete_intcreater   r   rH   r   rI   r\   r   r   s    re   serialize_sym_intr      s    !ellELL#677**1--==A//a%,,!=>>>>vv{{"}}W\!_-EFF}}#$Q(//qvv{{C  :1#[a	QRS
 	
rd   c           	         [        U [        R                  [        R                  [
        45      (       a  [        R                  " U 5      (       a  [        R                  " [        U 5      S9$ [        U [        R                  [        R                  45      (       d   eU R                  R                  c&  [        R                  " [        [        U 5      5      S9$ [        R                  " [        [        U 5      [        R                  " U R                  R                  S9S9S9$ [        SU  S[        U 5       S35      e)Nas_floatr   r   z0SymFloat should be either symbol or float, got `r   r   )rp   rq   rJ   r   r   floatr   is_concrete_floatr   r   r   rH   r   rI   r\   r   r   s    re   serialize_sym_floatr     s    !ennellE:;;,,Q//??E!H55a%..%,,!?@@@@vv{{"w|A/GHH#$Q(//E  >qcTRSWIUVW
 	
rd   c                 :   [        U [        R                  [        45      (       a\  [        R
                  " U 5      (       a  [        R                  " [        U 5      S9$ [        R                  " [        [        U 5      S9S9$ [        SU  S[        U 5       S35      e)Nas_bool)expr_strr   z.SymBool should be either symbol or bool, got `r   r   )rp   rq   rF   boolr   is_concrete_boolr   rH   r   r\   r   r   s    re   serialize_sym_boolr     sy    !emmT*++++A..>>$q'22>>'<?*KLL<QC{4PQ7)STU
 	
rd   tc                    [        [        U R                     U R                   Vs/ s H  n[	        U5      PM     snU R
                  [        U R                  R                  U R                  R                  S9U R                  5        Vs/ s H  n[	        U5      PM     sn[	        S5      [        U R                     S9$ s  snf s  snf )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     re   serialize_tensor_metar   #  s     '0-.WW5W #W5oo188==?/0xxz:z!"1%z:(+)!((3 5 ;s   C
CrY   _CURRENT_DESERIALIZERfake_tensorc                     [        U [        R                  R                  5      n[	        U 5      n[
        R                  " [        U5      [        S9R                  S5      n[        X144$ )Nclsutf-8)rp   rq   nn	Parameterr   jsondumps_dataclass_to_dictEnumEncoderencode_reconstruct_fake_tensor)r   is_parametertensor_metatensor_meta_bytess       re   _reduce_fake_tensorr   5  sW    k588+=+=>L'4K

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

8_E "":.G"":.s   AB B*
serialized.c                    [        U [        [        45      (       a  U $ [        U 5      S:X  a  0 $ [        R
                  " U 5      nUR                  S5        [        R                  " USS9n[        U[        [        45      (       d   eU$ )Nr   F)weights_only)	rp   dicttuplelenr   r   seekrq   load)r   r   r   s      re   deserialize_torch_artifactr   f  sq     *tUm,,
:!	ZZ
#F
KKNzz&u5Hh....Ord   valadjustc                    U [         R                  [        4;   a  g U [         R                  * [        * 4;   a  g [        U [         R                  5      (       a  [        U 5      $ [        R                  S[        U 5      U U5        US:X  a  [        R                  " U 5      $ US:X  a  [        R                  " U 5      $ [        SU 35      e)NztExport constraints cannot be non-integer expressions. Found type %s, and value %s. We will attempt to %s this value.floorceilzGot invalid adjustment )r   oor   rp   Integerr   logwarningr   mathr   r   RuntimeError)r   r   s     re   _sympy_int_to_intr   u  s    
uxx  
y6'""#u}}%%3x KK	 	S	 zz#	6	yy~4VH=>>rd   c                     U c  U$ U [         * [         4;   a  U $ U [        R                  :X  a  [         $ U [        R                  * :X  a  [         * $ [        R                  " U 5      $ rh   )r   r   infr   r   )r   defaults     re   _int_to_sympy_intr     sT    
{
w

dhh
txxiw==rd   symsym_typec                 P    [        [        U 5      [        [        U   5      S  5      $ rh   )r   strr   r   )r   r   s     re   _symbol_indexr     s#    s3xJx013455rd   range_constraintsc                     U R                  5        VVs0 s HC  u  p[        U5      [        [        UR                  S5      [        UR
                  S5      5      _ME     snn$ s  snnf )Nr   r   )ri   r   rB   r   lowerupper)r   rk   rl   s      re   serialize_range_constraintsr    sd     &++-
 .DA	 	Aaggv.aggw/
 	
 .  s   A
A"c                    [        U [        R                  R                  5      (       a  U R                  $ [        U 5      [        ;   a!  [        [        U 5         R                  U 5      $ [        S[        U 5       35      e)NzCannot find schema for )	rp   rq   rr   rs   _schemar   _serialization_registry	op_schemar   )targets    re   _get_schema_from_targetr
    sa    &%**//00~~	f0	0&tF|4>>vFF
0f?
@@rd   c                      \ rS rSr% \" \S9r\\   \S'   \" \S9r	\\   \S'   \" \S9r
\\   \S'   \" \S9r\\\4   \S'   \" \S9r\\\4   \S'   \" \S9r\\\4   \S'   \" \S9r\\\4   \S	'   S
r\\S'   \" \S9r\\\4   \S'   Srg)
GraphStatei  )default_factoryinputsoutputsnodestensor_valuessym_int_valuessym_bool_valuessym_float_valuesFis_single_tensor_returncustom_obj_valuesr^   N)r_   r`   ra   rb   r	   listr  r#   r   r  r  r>   r   r  r   rO   r  rL   r  rF   r  rJ   r  r   r  r'   rc   r^   rd   re   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Qrd   r  c                       \ rS rSrS rSrg)Finali  c                     U H1  n[        U[        5      (       d  M  [        SUR                   S35      e   [        R                  XU[        U5      5      $ )Nztype 'z ' is not an acceptable base type)rp   r  	TypeErrorr_   r   __new__r   )metaclsnamebases	classdictbs        re   r  Final.__new__  sK    A!U##&4T UVV  ||G5$y/BBrd   r^   N)r_   r`   ra   rb   r  rc   r^   rd   re   r  r    s    Crd   r  c                      \ rS rSrS\R
                  S\\R                     4S jr\	S 5       r
S\R                  R                  4S jrS\R                  R                  4S jrS	\4S
 jrS\R                  R                  4S jrS rS	\\R                  R                     4S jrS	\4S jrS\R                  R                  S	\\\4   4S jrS\R2                  S	\4S jrS	\\   4S jr S8S\S	\\   4S jjrS	\\   4S jrS	\ 4S jr!S	\ 4S jr"S	\ 4S jr#S	\ 4S jr$S8S\\   S	\%4S jjr&S	\'4S jr(S	\)4S jr*S	\+4S jr,S	\)4S  jr-S!\R\                  S	\.4S" jr/S!\R`                  S	\04S# jr1S$\R
                  S	\24S% jr3S&\Rh                  S	\%4S' jr5S( r6S)\Rn                  S	\74S* jr8S\\R                     S	\\   4S+ jr9S\R                  R                  S	\\%   4S, jr:S\R                  R                  S	\\%   4S- jr;S.\S/\S	\%4S0 jr<S\R                  R                  S	\\'   4S1 jr=S2\R                  R|                  S	\?4S3 jr@S4\\\4   4S5 jrAS2\R                  R|                  S	\>4S6 jrBS7rCg)9rW   i  graph_signaturemodule_call_graphc                 d    [        5       U l        Xl        X l        0 U l        0 U l        0 U l        g rh   )r  graph_stater$  r%  custom_objsduplicate_getitem_nodestreespec_namedtuple_fields)selfr$  r%  s      re   __init__GraphModuleSerializer.__init__  s2    
 &<.!2=?79$DF'rd   c              #   n   #    U R                   n[        5       U l          S v   Xl         g ! Xl         f = f7frh   )r'  r  r+  saveds     re   save_graph_state&GraphModuleSerializer.save_graph_state  s.       %<	%$us   5* 525r   c           
      "   UR                   S:X  d   eUR                  S   n[        R                  SUR                  U5        [        U[        R                  5      (       a0  [        R                  " U R                  UR                  U5      S9nGOY[        U[        R                  5      (       a0  [        R                  " U R                  UR                  U5      S9nGO
[        U[        R                  5      (       a  [        S5      e[        U[        [         ["        [$        ['        S 5      45      (       a  U R)                  U5      nO[        U[*        R,                  5      (       ae  UR.                  n[        R                  " [-        UR                  US9S9nU R1                  U5      U R2                  R4                  UR                  '   O[        S	UR                  S    35      eU R2                  R6                  R9                  U5        g )
Nplaceholderr   z[handle_placeholder] %s: %s	as_tensor
as_sym_intz,SymFloat graph input is not implemented yet.r  	class_fqnas_custom_objz Unimplemented graph input type: )ru   metar   debugr  rp   rq   Tensorr#   r   serialize_tensor_outputrL   serialize_sym_int_outputrJ   AssertionErrorr   r   r   r   r   serialize_inputepr'   r:  serialize_script_obj_metar'  r  r  append)r+  r   r   graph_inputr:  s        re   handle_placeholder(GraphModuleSerializer.handle_placeholder  s   ww-'''ii		/C@c5<<(("//66tyy#FK U\\**"//88CHK U^^,, !OPPc4eT$Z@AA..s3KR1122I"///TYY)TK
 ..s3 ..		 !#CDIIeDTCU!VWW&&{3rd   c                 $   UR                   S:X  d   e[        UR                  5      S:X  d   S5       eUR                  S   n[        R	                  SUR
                  U5        [        U[        R                  R                  5      (       a3  SU R                  l        U R                  U5      /U R                  l        g [        U[        [        45      (       d   eU Vs/ s H  o0R                  U5      PM     snU R                  l        g s  snf )Noutputr"   z"FX.Node's args should have one argr   z[handle_output] %s: %sT)ru   r   argsr   r>  r  rp   rq   fxr>   r'  r  rC  r  r   r  )r+  r   	node_argsargs       re   handle_output#GraphModuleSerializer.handle_output  s    ww("""499~"H$HH"IIaL			*DIIyAi//7;D4(,(<(<Y(G'HD$i%7777MV'WYc(<(<S(AY'WD$'Ws    Dr   c                     [        U[        5      (       a  U$ UR                  R                  S5      (       a-  UR                  R	                  SS5      nU SUR
                   3$ UR                   SUR
                   3$ )Nz
torch._opsz	torch.ops.)rp   r   r`   
startswithreplacer_   )r+  r	  modules      re   serialize_operator(GraphModuleSerializer.serialize_operator
  sx    fc""M)),77 &&..|[IFXQv/00''(&//):;;rd   c           	        ^  UR                   S:X  d   eUR                  R                  S5      n[        R	                  SUR
                  UR                  UR                  UR                  U5        UR                  [        R                  L a  g UR                  [        ;   dA  Ub  [        U[        R                  [        R                  [        R                   45      (       a  [#        UR                  5      S:X  d   e[%        T R'                  UR                  5      T R)                  UR                  UR                  5      T R+                  UR
                  U5      /T R-                  U5      S9nGOZ[        UR                  [        R.                  R0                  5      (       at  [%        T R'                  UR                  5      T R3                  UR                  UR                  UR                  5      T R5                  U5      T R-                  U5      S9nGO[        UR                  [        R.                  R6                  5      (       Ga-  S[8        4S jnUR                  [        R:                  R<                  L Ga  [?        UR                  5      nUR                  S   R
                  n[A        URB                  RD                  U5      (       d   e[G        URB                  RD                  U5      nURH                  US'   S US'   / nUS	   b  [        US	   [J        5      (       a  US	    Hx  n	[        U	[        RL                  R$                  5      (       a;  [        U	R                  R                  SS 5      [N        RP                  5      (       a  Mg  URS                  U	5        Mz     XS	'   U 4S
 jn
[%        T R'                  UR                  5      T RU                  XQR                  5      U
" U5      T R-                  U5      SS9nGO[%        T R'                  UR                  5      T RU                  UR                  UR                  5      T RW                  U5      T R-                  U5      U" U5      S9nGOR[Y        UR                  5      [Z        ;   Ga  [Y        UR                  5      [Z        ;   d   [Y        UR                  5       S35       e[Z        [Y        UR                  5         nUR]                  5       nUR_                  UR                  5      n[        U[`        5      (       a  [        U[`        5      (       d   eSU;  a  SU;  d   e[%        SU SU 3T R3                  UR                  UR                  UR                  5      T R5                  U5      T R-                  U5      S9nO[c        SUR                   S35      eT Rd                  Rf                  RS                  U5        g )Ncall_functionr   z-[handle_call_function] %s: %s(%s, {%s}) -> %sr   )r	  r  r  metadatar   c                     [        U R                  [        R                  R                  5      (       d   eU R
                  R                  SS 5      nUS L=(       a    [        U[        R                  5      $ )Nr   )rp   r	  rq   rr   HigherOrderOperatorr=  getr?  )r   meta_vals     re   _is_hop_single_tensor_returnPGraphModuleSerializer.handle_call_function.<locals>._is_hop_single_tensor_return:  sR    !$++uzz/M/MNNNN99==5t+R
8U\\0RRrd   r"   r    c                    > U R                   R                  SS 5      n/ n[        U5       H6  u  p4TR                  X5      nUR	                  TR                  XT5      5        M8     [        R                  " US9/$ )Nr   
as_tensors)r=  r^  	enumerate_output_node_name_at_indexrF  r@  r#   r   )r   r_  tensor_argsidxr=  r  r+  s         re   serialize_tensor_list_outputPGraphModuleSerializer.handle_call_function.<locals>.serialize_tensor_list_output]  sj    #yy}}UD9H"$K%.x%8	#>>tI#**4+G+G+ST &9 %OO{CDDrd   F)r	  r  r  r[  is_hop_single_tensor_returnz* is not supported in export serialization.:#zSerializing z is not supported)4ru   r=  r^  r   r>  r  r	  rL  kwargsoperatorgetitem_SYM_OPSrp   rq   rL   rF   rJ   r   r>   rW  serialize_sym_op_inputsserialize_outputserialize_metadatarr   rs   serialize_inputsserialize_outputsr]  r   _higher_order_opsaoti_call_delegater  hasattrgraphowning_modulegetattr	aoti_pathr   rM  rD  r'   rF  serialize_hoo_inputsserialize_hoo_outputsr   r  	namespace
to_op_namer   r\   r'  r  )r+  r   r_  ex_noder`  serializable_argslowered_module_namelowered_moduleserializable_weight_nodesweight_noderi  handlerr  op_names   `             re   handle_call_function*GraphModuleSerializer.handle_call_function  s   ww/)))99=='		;IIKKIIKK	
 ;;(***;;(" 8ellEMM5>>%RS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DSd S {{e55HHH$(O! ,099Q<+<+<#tzz779LMMMM!()A)ACV!W'5'?'?!!$ (,!!$,.)$Q'3
%a((9 9 (9'; &k588==AAj',,00=r?S?SG G %188E (< ,Ea(E 224;;?445FT8>!44T:05 224;;?44TYYL 66t<!44T:0LT0R $++"99 T[[!%<<Pt{{#$$NOP< .d4;;.?@G))+I((5Gi--*Wc2J2JJJi'Cw,>>>9+Qwi0,,T[[$))T[[Q..t4006	G !<}<M!NOO%%g.rd   c                 D    [         R                  SUR                  5        g )Nz[handle_get_attr] %s)r   r>  r  )r+  r   s     re   handle_get_attr%GraphModuleSerializer.handle_get_attr  s    		($))4rd   c                     S nUR                    Hh  nUR                  [        R                  L d
   U S35       eX$R                  S   :X  d  M>  Uc  UnME  UR
                  U R                  UR
                  '   Mj     U$ )Nz is not a getitem noder"   )usersr	  ro  rp  rL  r  r)  )r+  r   r   	user_nodeusers        re   _output_node_at_index+GraphModuleSerializer._output_node_at_index  sv    	JJD;;("2"22Stf<R4SS2		!$$ $I ?HnnD00;  rd   c                 d    U R                  X5      nUc  UR                   SU 3$ UR                  $ )N_unused_)r  r  )r+  r   r   r  s       re   rf  0GraphModuleSerializer._output_node_name_at_index  s7    ..t;	ii[00>>!rd   c           	      n   0 nUR                   R                  S5      =n(       a  X2S'   UR                   R                  S5      =n(       aJ  S nUR                  5        VVs/ s H  u  pgU SU" U5       3PM     nnn[        R	                  U5      US'   UR                   R                  S5      =n	(       aD  U	 V
s/ s H  n
U
S    SU R                  U
S   5       3PM!     nn
[        R	                  U5      US'   UR                   R                  S5      =n(       a!  [        R	                  [        U5      5      US'   UR                   R                  S	5      =n(       a   [        R                  " U5      US	'   U$ U$ s  snnf s  sn
f ! [         a!  n[        S
UR                   SU 35      UeS nAff = f)Nstack_tracenn_module_stackc                     [        U [        5      (       a  [        U 5      S:X  d   eU u  p[        U[        5      (       d   e[        U[        5      (       d   eUS-   U-   $ )Nr    ,)rp   r   r   r   )r   pathtys      re   export_nn_module_stackHGraphModuleSerializer.serialize_metadata.<locals>.export_nn_module_stack  sZ    !#u--#c(a-??!$,,,,!"c****czB&rd   r  source_fn_stackr   r"   torch_fncustomz-Failed to serialize custom metadata for node z with error )r=  r^  ri   ST_DELIMITERjoinrW  r  r   r   	Exceptionr\   r  )r+  r   retr  r  r  rk   rl   nn_module_listsource_fn_st	source_fnsource_fn_listr  r  es                  re   rt  (GraphModuleSerializer.serialize_metadata  s   ))--66;6!,"iimm,=>>?>' @O?T?T?V?Vtq1#Q-a012?V   &2%6%6~%FC!"99==):;;<; ".!-I Q<.$"9"9)A,"G!HI!-   &2%6%6~%FC!"yy}}Z0080*//X?C
OYY]]8,,6, $

6 2H 
s
/  $CDII;l[\Z]^s$   !E>;&F!F	 	
F4F//F4script_obj_metac                 j    [         R                  SU5        [        UR                  UR                  S9$ )Nz[serialize_script_obj_meta] %sr9  )r   r>  r'   r  r:  r+  r  s     re   rE  /GraphModuleSerializer.serialize_script_obj_meta  s2     			2OD  %%%//
 	
rd   c           	         [        U[        R                  R                  5      (       a0  UR                  R
                   Vs/ s H  o3R                  PM     nnOCU[        ;   d   e[        [        R                  " U5      R                  R                  5       5      n/ n[        XB5       H<  u  pcUR                  [        UU R!                  U5      ["        R$                  S95        M>     U$ s  snf )Nr  rO  kind)rp   rq   rr   rs   r  	argumentsr  rq  r  inspect	signature
parameterskeysziprF  r<   rC  r$   
POSITIONAL)r+  ru   rL  rO  
args_namesserialized_args	args_names          re   rr  -GraphModuleSerializer.serialize_sym_op_inputs  s    b%**//00.0jj.B.BC.Bs((.BJCJ>!>g//3>>CCEFJ!*3NI""",,S1%00 4  Ds   C,Nr	  c           
      @   S n/ n[        U[        R                  R                  R                  5      (       a  US   nUS   nUR                  Xg5      nOB[        U[        R                  R                  /[        5       Q75      (       d   e[        U5      nUc   eU=(       d    0 n[        UR                  5       H  u  pU	R                  U;   aZ  UR                  [        U	R                  U R                  X9R                     U	R                   5      ["        R$                  S95        Mo  U	R&                  (       d_  U[)        U5      :  aP  UR                  [        U	R                  U R                  X(   U	R                   5      ["        R*                  S95        M  M     U$ )Nr   r"   r  )rp   rq   rw  	torchbindCallTorchBindschemarr   rs   _registered_extension_typesr
  re  r  r  rF  r<   rC  r   r$   KEYWORD
kwarg_onlyr   r  )
r+  r	  rL  rn  r  r  objmethodi
schema_args
             re   ru  &GraphModuleSerializer.serialize_inputs  sg    fe55??MMNNq'C!WF]]3/F..O1L1NO    -V4F!!!2&v'7'78MA&(&&!'__ 00"??3Z__ *11  **q3t9}&&!'__ 00*//J)44 - 90 rd   c                 @   U Vs/ s H+  n[        SU R                  U5      [        R                  S9PM-     nnUR	                  UR                  5        VVs/ s H-  u  pS[        UU R                  U5      [        R                  S9PM/     snn5        U$ s  snf s  snnf )z=
For serializing HOO inputs since HOOs do not have a schema.
 r  )r<   rC  r$   r  extendri   r  )r+  rL  rn  ar  r  s         re   r~  *GraphModuleSerializer.serialize_hoo_inputs  s     	
  T11!4<;R;R 	 	 
 	  &||~  .GD ,,Q/%--
  .		
 !
s   2B4B
c                 f    [        U5      [        L =(       d    [        U[        R                  5      $ rh   )r   r   rp   rq   rL   r+  rO  s     re   is_inductor_sym_int_arg-GraphModuleSerializer.is_inductor_sym_int_arg+  s#    
 CyC@:c5<<#@@rd   c                     [        U5      [        L =(       dN    [        U[        R                  R
                  5      =(       a#    UR                  U R                  R                  ;   $ rh   )	r   r   rp   rq   rM  r>   r  r'  r  r  s     re   is_sym_int_arg$GraphModuleSerializer.is_sym_int_arg2  sG    CyC 
sEHHMM* <D,,;;;	
rd   c                     [        U[        5      =(       dN    [        U[        R                  R                  5      =(       a#    UR
                  U R                  R                  ;   $ rh   )rp   r   rq   rM  r>   r  r'  r  r  s     re   is_sym_float_arg&GraphModuleSerializer.is_sym_float_arg8  sE    #u% 
sEHHMM* >D,,===	
rd   c                     [        U[        5      =(       dN    [        U[        R                  R                  5      =(       a#    UR
                  U R                  R                  ;   $ rh   )rp   r   rq   rM  r>   r  r'  r  r  s     re   is_sym_bool_arg%GraphModuleSerializer.is_sym_bool_arg>  sE    #t$ 
sEHHMM* =D,,<<<	
rd   arg_typec           
        ^ ^ SS K Js  Jn  UR                  UR                  4m[        U[        R                  R                  5      (       Ga  UR                  S:X  Ga  [        UR                  [        5      (       d   e[        UR                  R                  UR                  5      n[        U[        R                  5      (       a  [!        S5      e[        U[        R                  R"                  5      (       aP  T R%                  5          T R'                  U5      nS S S 5        [(        R*                  " [-        UR                  WS9S9$ [!        SUR                   S[/        U5       35      eT R1                  U5      (       a0  [(        R*                  " [2        R*                  " UR4                  S9S	9$ T R7                  U5      (       a0  [(        R*                  " [8        R*                  " UR4                  S9S
9$ T R;                  U5      (       a0  [(        R*                  " [<        R*                  " UR4                  S9S9$ [        UR>                  S   [@        RB                  5      (       a=  [(        R*                  " [C        UR4                  UR>                  S   RD                  S9S9$ UR4                  T RF                  ;   a4  T RF                  UR4                     n[(        R*                  " [I        US9S9$ [(        R*                  " [I        UR4                  S9S9$ [        UT5      (       a5  URK                  5       nUc   S5       e[(        R*                  " [I        US9S9$ [        XRL                  5      (       at  URK                  5       nUc   S5       eURO                  5       nURQ                  5       RS                  5       n	UT RT                  U'   [(        R*                  " [C        Xy5      S9$ [        U[        RV                  5      (       a/  [(        R*                  " [2        R*                  " [        U5      S9S	9$ [        U[        RX                  5      (       a/  [(        R*                  " [8        R*                  " [        U5      S9S
9$ [/        U5      [Z        L a  [(        R*                  " US9$ [/        U5      [        L a  [(        R*                  " US9$ [/        U5      [\        L a  [(        R*                  " US9$ [/        U5      [^        L a  [(        R*                  " US9$ Uc  [(        R*                  " SS9$ [        U[`        [b        45      (       Ga  [e        U5      S:X  Ga  UGb  [        U[        Rf                  5      (       a  URi                  5       n[        U[        Rj                  5      (       d   eURi                  5       n
[        U
[        Rf                  5      (       a  U
Ri                  5       n
[        U
[        Rl                  5      (       a  [(        R*                  " / S9$ [        U
[        Rn                  5      (       a  [(        R*                  " / S9$ [        U
[        Rp                  5      (       a  [(        R*                  " / S9$ [        U
[        Rr                  5      (       a  [(        R*                  " / S9$ [        U
[        Rt                  5      (       a  [(        R*                  " / S9$ [!        SU
 S35      e[v        Ry                  S5        [(        R*                  " / S9$ [{        S  U 5       5      (       a  [(        R*                  " [a        U5      S9$ [{        S! U 5       5      (       a  [(        R*                  " [a        U5      S9$ [{        S" U 5       5      (       a  [(        R*                  " [a        U5      S9$ [{        S# U 5       5      (       a  [(        R*                  " [a        U5      S9$ [{        U 4S$ jU 5       5      (       a  / nU H  n[        U[        RV                  5      (       a.  UR}                  [2        R*                  " [        U5      S95        MP  [/        U5      [\        L d  Md  UR}                  [2        R*                  " US95        M     [(        R*                  " US%9$ [{        S& U 5       5      (       a@  [(        R*                  " U Vs/ s H   n[8        R*                  " [        U5      S9PM"     snS'9$ [{        U 4S( jU 5       5      (       a  / nU H  n[        U[        R                  R                  5      (       a/  UR}                  [2        R*                  " UR4                  S95        M[  [/        U5      [\        L d  Mo  UR}                  [2        R*                  " US95        M     [(        R*                  " US%9$ [{        U 4S) jU 5       5      (       a  / nU H  n[        U[        R                  R                  5      (       a/  UR}                  [8        R*                  " UR4                  S95        M[  [        U[^        5      (       d  Mr  UR}                  [8        R*                  " US95        M     [(        R*                  " US'9$ [{        U 4S* jU 5       5      (       a  / nU H  n[        U[        R                  R                  5      (       a/  UR}                  [<        R*                  " UR4                  S95        M[  [        U[Z        5      (       d  Mr  UR}                  [<        R*                  " US95        M     [(        R*                  " US+9$ [{        S, U 5       5      (       a\  / nU H@  nUR                  S:X  a  [!        S5      eUR}                  [I        UR4                  S95        MB     [(        R*                  " US9$ [{        S- U 5       5      (       a)  S. n[(        R*                  " [a        [        X5      5      S/9$ [{        U4S0 jU 5       5      (       a:  [(        R*                  " U Vs/ s H  n[I        URK                  5       S9PM     snS9$ [{        U4S1 jU 5       5      (       a,  U4S2 jn[(        R*                  " [a        [        X5      5      S/9$ [!        S3U Vs/ s H  n[/        U5      PM     sn 35      e[        U[        R                  5      (       a  [(        R*                  " [        U   S49$ [        U[        R                  5      (       a0  [(        R*                  " [        UR.                  UR                  S59S69$ [        U[        R                  5      (       a  [(        R*                  " [        U   S79$ [        U[        R                  5      (       a  [(        R*                  " [        U   S89$ [        U[        R                  R                  5      (       a  UR                  S95      (       a  UR                  S:5      (       d  [!        S;U S<35      eS=[e        T RT                  5       3nUT RT                  U'   URQ                  5       RS                  5       n	[(        R*                  " [C        X5      S9$ [        U[        R                  R                  [        R                  R                  45      (       a#  [(        R*                  " T R                  U5      S>9$ [!        S?[/        U5       S@U 35      e! , (       d  f       GN= fs  snf s  snf s  snf )ANr   get_attrz?getattr nodes containing tensors should not appear in the graph)r  rz  )as_graphzUnsupported getattr attribute z with type: as_namer7  as_sym_floatas_sym_boolr   r9  r;  r  r5  zBuffer must have valid namer   	as_stringr   r   Tas_none)as_bools)as_ints)	as_floats)
as_stringsrc  zEmpty list with type z nyi.zUnsure how to serialize the given empty list, as we don't know what is the type of this argument. Serializing it as a tensor list by default.c              3   D   #    U  H  n[        U5      [        L v   M     g 7frh   )r   r   rt   r  s     re   rv   8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     0Cq47d?C    c              3   D   #    U  H  n[        U5      [        L v   M     g 7frh   )r   r   r  s     re   rv   r         1ST!W^Sr  c              3   D   #    U  H  n[        U5      [        L v   M     g 7frh   )r   r   r  s     re   rv   r    s     3s!T!W%sr  c              3   D   #    U  H  n[        U5      [        L v   M     g 7frh   )r   r   r  s     re   rv   r    r  r  c              3   F   >#    U  H  nTR                  U5      v   M     g 7frh   )r  rt   r  r+  s     re   rv   r    s     BcT11!44c   !)as_sym_intsc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7frh   )rp   rq   rJ   r  s     re   rv   r    s     @CqZ5>>22Cs   '))as_sym_floatsc              3   F   >#    U  H  nTR                  U5      v   M     g 7frh   )r  r  s     re   rv   r    s     9ST((++Sr  c              3   F   >#    U  H  nTR                  U5      v   M     g 7frh   )r  r  s     re   rv   r    s     ;s!T**1--sr  c              3   F   >#    U  H  nTR                  U5      v   M     g 7frh   )r  r  s     re   rv   r    s     :cT))!,,cr  )as_sym_boolsc              3   j   #    U  H)  n[        U[        R                  R                  5      v   M+     g 7frh   )rp   rq   rM  r>   r  s     re   rv   r    s"     ?3aZ588==113rw   c              3      #    U  H4  n[        U[        R                  R                  [	        S 5      45      v   M6     g 7frh   )rp   rq   rM  r>   r   r  s     re   rv   r    s+     MAZEHHMM4:#>??s   <>c                     U c  [         R                  " SS9$ [        U [        R                  R
                  5      (       a%  [         R                  " [        U R                  S9S9$ [        SU  35      eNTr  r  r5  z!Unsupported list/tuple argument: )	r?   r   rp   rq   rM  r>   rN   r  r\   r  s    re   serialize_optional_tensor_argsMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_args  sc    y5<<TJJ#Auxx}}555<<&4!&&&A   -/PQRPS-TUUrd   )as_optional_tensorsc              3   <   >#    U  H  n[        UT5      v   M     g 7frh   )rp   rt   r  inductor_tensor_bufferss     re   rv   r    s     ISZ#:;;Ss   c              3   X   >#    U  H  n[        U/ TQ[        S 5      P75      v   M!     g 7frh   )rp   r   r  s     re   rv   r    s.      OR!
1D 7DdDEEss   '*c                    > U c  [         R                  " SS9$ [        U T5      (       a)  [         R                  " [        U R	                  5       S9S9$ [        SU  35      er  )r?   r   rp   rN   get_namer\   )r  r  s    re   r  r	    s_    y5<<TJJ#A'>??5<<&4!**,&G   -/PQRPS-TUUrd   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ReinterpretViewrp   rq   rM  r>   ru   r	  r   r|  rz  r{  r?  r\   r.   r1  serialize_graphr#   r   r-   r   r  rM   r  r  rK   r  rG   r=  rD  r'   r:  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   allrF  mapr   r   r   r(   r   memory_format!_TORCH_TO_SERIALIZE_MEMORY_FORMATr   r   _CScriptObject_has_methodrr   rs   r]  rW  )r+  rO  r  inductor_irattrrz  
dedup_namearg_namearg_valr:  	elem_typevaluesr  r  r  custom_obj_namer  s   `               @re   rC  %GraphModuleSerializer.serialize_inputE  sy   00 ''#

 c588==))vv#!#**c2222syy66

CdELL11(Y   ehh&:&:;;..0 $ 4 4T : 1#??!.CJJe!L  )8LQUVZQ[P\]  $$S))-44SXXF  &&s++!1!8!8!J  %%c** / 6 6sxx H  CHHUOR-A-ABB"3 XX%1J1J# 
 T999!99#((C
Z1PQQSXX1NOO455
 ||~H'F)FF'??^-JKK8899 ||~H'F)FF'&&(G668I)0DX&??1B81WXXU\\**
 ??n.C.CCPSH.UVVU^^,,
 ??-44SXF  #Y$??3//#Y#??S11#Y#??#..#Y%??C00[??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0S	::1S111tCy993s333c;;1S111$s)<<BcBBB A!!U\\22n&;&;CF&KLaCn&;&;1&EF	 
  6::@C@@@TW"XTWq#3#:#:3q6#JTW"X  9S999A!!UXX]]33n&;&;AFF&KLaCn&;&;1&EF	 
  6::;s;;;A!!UXX]]33&6&=&=aff&MN#Au--&6&=&=q&IJ	 
  V<<:c:::A!!UXX]]33o&<&<QVV&LM#At,,o&<&<Q&GH	 
  F;;?3???	Attz),]  $$^%@A   )<<MMMMV  (,S1O-U(V  ISIIIKNO3aAJJL A3O   OR  V  (,S1O-U(V  %<s=Ss!d1gs=S<TU  U[[))??2KC2PQQU\\**??V-STTU0011??!B3!G  U\\**??-G-LMMUXX2233//OON33$7u => >  !-S1A1A-B,CDO03D_-		224I??/K  ejj33UZZ5S5STUU??t/F/Fs/KLL -d3i[8NxjY c 10B #Yr  P* >Ts   |.,'} !}}

.
|=c                     XR                   R                  ;  d   e[        U5      U R                   R                  U'   [        US9$ )Nr  )r'  r  r   rN   r+  r  r_  s      re   r@  -GraphModuleSerializer.serialize_tensor_outputL  s@    ++99999/DX/N&&t,4((rd   c                     XR                   R                  ;  d   e[        U5      U R                   R                  U'   [        R                  " US9$ Nr  )r'  r  r   rM   r   r<  s      re   rA  .GraphModuleSerializer.serialize_sym_int_outputQ  sF    ++:::::0A(0K''-$$T22rd   c                     XR                   R                  ;  d   e[        U5      U R                   R                  U'   [        R                  " US9$ r?  )r'  r  r   rK   r   r<  s      re   serialize_sym_float_output0GraphModuleSerializer.serialize_sym_float_outputV  sF    ++<<<<<2Eh2O))$/&&t44rd   c                     XR                   R                  ;  d   e[        U5      U R                   R                  U'   [        R                  " US9$ r?  )r'  r  r   rG   r   r<  s      re   serialize_sym_bool_output/GraphModuleSerializer.serialize_sym_bool_output[  sF    ++;;;;;1CH1M((.%%d33rd   specc           	      X   [         R                  SU5        UR                  [        R                  R
                  :X  Ga  [        UR                  [        R                  5      (       Ga  [        UR                  R                  5      [        L a*  [        R                  " UR                  R                  S9nGO<[        UR                  R                  5      [        L a)  [        R                  " UR                  R                  S9nO[        UR                  R                  5      [        L a)  [        R                  " UR                  R                  S9nO[        UR                  R                  5      [         L a)  [        R                  " UR                  R                  S9nOOUR                  R                  c  [        R                  " SS9nO#[#        SUR                  R                   S	35      e[$        R                  " ['        UR                  R(                  US
9S9$ [$        R                  " [+        U R-                  UR                  5      S9S9$ UR                  [        R                  R.                  :X  a{  UR0                  c   e[        UR                  [        R2                  5      (       d   e[$        R                  " [5        [3        UR                  R(                  S9UR0                  S9S9$ UR                  [        R                  R6                  :X  a  UR0                  c   e[        UR                  [        R2                  5      (       d   eUR8                  c   e[$        R                  " [;        [3        UR                  R(                  S9UR0                  UR8                  S9S9$ UR                  [        R                  R<                  :X  a{  UR0                  c   e[        UR                  [        R2                  5      (       d   e[$        R                  " [?        [3        UR                  R(                  S9UR0                  S9S9$ UR                  [        R                  R@                  :X  a  UR0                  c   e[        UR                  [        RB                  5      (       d   e[$        R                  " [E        [C        UR                  R(                  UR                  RF                  S9UR0                  S9S9$ UR                  [        R                  RH                  :X  aa  [        UR                  [        RJ                  5      (       d   e[$        R                  " [M        [K        UR                  R(                  S9S9S9$ [O        SU 35      e)Nz[serialize_input_spec] %sr   r   r  r   Tr  zUnhandled constant input z to serializer  rj   )constant_inputrO  )
user_inputr  rO  parameter_name)	parameter)rO  buffer_name
persistent)r   )rO  tensor_constant_name)tensor_constantr9  )rO  r9  )
custom_objtokenUnknown argument kind: )(r   r>  r  rD  	InputKind
USER_INPUTrp   rO  ConstantArgumentr   rj   r   r&   r   r   r   r   r\   r0   r2   r  rS   serialize_argument_spec	PARAMETERr	  rN   r5   BUFFERrQ  r1   CONSTANT_TENSORr6   
CUSTOM_OBJr'   r3   r:  TOKENrP   r4   rB  )r+  rG  constant_specs      re   serialize_input_spec*GraphModuleSerializer.serialize_input_spec`  s   		-t499///$((B$7$788'3.$1$8$8$OM$((..)T1$1$8$8$PM$((..)S0$1$8$8488>>$RM$((..)U2$1$8$8$((..$QMXX^^+$1$8$8$FM(3DHHNN3C=Q  !''#;!XX]]-$  !'',1M1Mdhh1WX  YY",,000;;***dhh(9(9::::##.&DHHMM:#';;  YY",,---;;***dhh(9(9::::??...##(&DHHMM: $#  YY",,666;;***dhh(9(9::::## 9&DHHMM:)-!  YY",,111;;***dhh(<(<====##/)!XX]]dhh6H6H %)KK	  YY",,,,,dhh(8(89999##$%488==9  !#:4&!ABBrd   c                 >   [         R                  SU5        UR                  [        R                  R
                  :X  a4  [        R                  " [        U R                  UR                  5      S9S9$ UR                  [        R                  R                  :X  aa  [        UR                  [        R                  5      (       d   e[        R                  " [        [        UR                  R                  S9S9S9$ UR                  [        R                  R                   :X  a{  UR"                  c   e[        UR                  [        R                  5      (       d   e[        R                  " [%        [        UR                  R                  S9UR"                  S9S9$ UR                  [        R                  R&                  :X  a{  UR"                  c   e[        UR                  [        R                  5      (       d   e[        R                  " [)        [        UR                  R                  S9UR"                  S9S	9$ UR                  [        R                  R*                  :X  a{  UR"                  c   e[        UR                  [        R                  5      (       d   e[        R                  " [-        [        UR                  R                  S9UR"                  S
9S9$ UR                  [        R                  R.                  :X  a{  UR"                  c   e[        UR                  [        R                  5      (       d   e[        R                  " [1        [        UR                  R                  S9UR"                  S
9S9$ UR                  [        R                  R2                  :X  aa  [        UR                  [        R4                  5      (       d   e[        R                  " [7        [5        UR                  R                  S9S9S9$ [9        SU 35      e)Nz[serialize_output_spec] %srK  )user_outputr  )loss_output)rO  rP  )buffer_mutationrM  )gradient_to_parameter)rO  user_input_name)gradient_to_user_input)user_input_mutationrU  rW  )r   r>  r  rD  
OutputKindUSER_OUTPUTr@   r   rT   r[  rO  LOSS_OUTPUTrp   rN   r8   r  BUFFER_MUTATIONr	  r%   GRADIENT_TO_PARAMETERr*   GRADIENT_TO_USER_INPUTr+   USER_INPUT_MUTATIONrR   r`  rP   rA   rB  )r+  rG  s     re   serialize_output_spec+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9$$%%488==9  !#:4&!ABBrd   sigc           	          [         R                  S5        [        UR                   Vs/ s H  o R	                  U5      PM     snUR
                   Vs/ s H  o R                  U5      PM     snS9$ s  snf s  snf )Nz
[serialize_signature]input_specsoutput_specs)r   r>  r/   rx  rb  ry  rs  )r+  ru  r   s      re   serialize_signature)GraphModuleSerializer.serialize_signature  sd    		+,?BO!2215OADAQAQRAQA44Q7AQR
 	
ORs   A2A7
xc                    [        U[        R                  5      (       a%  [        R                  " [        UR
                  S9S9$ [        U[        R                  5      (       a0  [        R                  " [        R                  " UR
                  S9S9$ [        U[        R                  5      (       a0  [        R                  " [        R                  " UR
                  S9S9$ [        U[        R                  5      (       a  U R                  UR                  5      $ [        U[        R                  5      (       a0  [        R                  " [        UR
                  UR                  S9S9$ [        S5      e)	Nr  r5  r  r7  r  r9  r;  TODO)rp   rD  rN   r#   r   r  rM   rK   rZ  rC  rj   r'   r:  rB  r+  r|  s     re   r[  -GraphModuleSerializer.serialize_argument_spec  s    a**++??^-HII2,,--??n.C.CAFF.STT2..//??0@0G0GPQPVPV0WXX2..//''002//00??/QVVq{{S  !((rd   c                 H   ^ ^ U U4S jm[        U[        5      nT" U5        U$ )Nc           	      V  > U R                   c  g U R                   [        L d%  [        R                  " U R                   5      (       a  [        R                  U R
                     R                  nUTR                  ;   af  TR                  U   R                  nX R
                  R                  :w  a3  [        SU R
                   SU R
                  R                   SU S35      eO*[        U R
                  R                  S9TR                  U'   U R                   H  nT" U5        M     g )Nz%The given TreeSpec's namedtuple type z was found to have field names z6 but somehow previously was found to have field names rS  )field_names)r   r   pytreeis_namedtuple_classSUPPORTED_SERIALIZED_TYPEScontextserialized_type_namer*  r  _fieldsr\   r=   children_specs)tsr  r  childr+  store_namedtuple_fieldss       re   r  IGraphModuleSerializer.serialize_treespec.<locals>.store_namedtuple_fields   s   wwww*$(B(B277(K(K'-'H'HJJ(&& % (4+J+JJ"&"A"A,#!k   #jj&8&88,CBJJ< P==?ZZ=O=O<P QTT_S``ac  9 &"**2D2DE 33, **'. +rd   )r   rQ   )r+  treespecserialized_treespecr  s   `  @re   serialize_treespec(GraphModuleSerializer.serialize_treespec  s&    	/2 -X7GH)""rd   module_call_signaturec           	         [         R                  SU5        [        UR                   Vs/ s H  o R	                  U5      PM     snUR
                   Vs/ s H  o R	                  U5      PM     snU R                  UR                  5      U R                  UR                  5      UR                  =n(       a  US9$ S S9$ s  snf s  snf )Nz$[serialize_module_call_signature] %sr  r  in_specout_specforward_arg_names)
r   r>  r;   r  r[  r  r  r  r  r  r+  r  r|  namess       re   serialize_module_call_signature5GraphModuleSerializer.serialize_module_call_signature  s     			8:OP"9N9U9U9UA,,Q/9U :O9V9V9VA,,Q/9V ++,A,I,IJ,,-B-K-KL.@@@@ $
 	
 
 	
s   B?C
c           	          [         R                  S5        U Vs/ s HC  n[        UR                  UR                  (       a  U R                  UR                  5      OS S9PME     sn$ s  snf )Nz
[serialize_module_call_graph]fqnr  )r   r>  r:   r  r  r  r+  r%  entrys      re   serialize_module_call_graph1GraphModuleSerializer.serialize_module_call_graph/  sh     			34 +

 + II  88I +

 
	
 

s   A
A'c                    S[         S[        4S jnUR                  S:X  a?  [        UR                  [
        R                  R                  /[        5       Q75      (       d   e[        UR                  5      nUR                  n[        U5      S:X  a  / $ UR                  S   nU" UR                  5      (       a\  / n[        U5       H6  u  pxU R                  X5      n	UR                  U R!                  X5      5        M8     ["        R$                  " US9/$ [        U5      S:X  a  U R'                  UR(                  U5      /$ / n
[        [+        XT5      5       GHn  u  nu  pUc`  [        UR,                  [
        R.                  [
        R0                  45      (       d   eU
R                  ["        R$                  " S	S
95        Ml  [        U[2        5      (       an  [        UR,                  [
        R.                  [
        R0                  45      (       d   eU R                  X5      n	U
R                  U R'                  X5      5        M  [        U[4        5      (       a  [        UR,                  [
        R6                  5      (       a7  [        UR,                  R9                  5       [
        R0                  5      (       d   eU R;                  X5      nUc   e/ n[        U5       H<  u  pUc  M
  U R                  X5      nUR                  U R!                  UU5      5        M>     U
R                  ["        R$                  " US95        GM  [        U[<        [>        [@        [B        45      (       a5  U R                  X5      nU
R                  U R'                  UU5      5        GMI  [E        S[G        U5       SURI                  5        35      e   U
$ )a  For a given node, return the dataclass representing its output values.

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

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

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

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

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

%sF)print_outputhandle_zFailed serializing node z in graph: 
 Original exception )	r  r  r  r  r  r  r  r  r  )rp   rq   rM  r.   r   r>  print_readablerz  r  r|  ru   r  r\   r  	traceback
format_excr,   r'  r  r  r  r  r  r  r  r  )r+  r  r   r  s       re   r  %GraphModuleSerializer.serialize_graph  se   ,(<(<====		%|'B'BPU'B'V	
 !&&,,Dy1248 - ##**""((**88++::!-->> ,,<<"..@@$$,,$($4$4$L$L

 
	
  $.tfK@P@P@R?SSijsj~j~  kA  jB  Cs   )E
F6FFr=  c                     0 nUR                  S5      =n(       a2  [        R                  SU5         [        R                  " U5      US'   U$ U$ ! [
         a  n[        SU 35      UeS nAff = f)Nr  z%
[serialize_graph_module_metadata] %sz9Failed to serialize custom metadata for graph with error )r^  r   r>  r   r   r  r\   )r+  r=  r  r  r  s        re   serialize_graph_module_metadata5GraphModuleSerializer.serialize_graph_module_metadata  sy    XXh''6'II>G $

6 2H 
s
  $OPQsSs   A 
A-A((A-c                    [         R                  S5        U R                  U5      n[        UU R	                  U R
                  5      U R                  U R                  5      U R                  UR                  5      U R                  S9$ )Nz
[serialize])rz  r  r%  r[  r*  )r   r>  r  r.   rz  r$  r  r%  r  r=  r*  )r+  r  rz  s      re   rV   GraphModuleSerializer.serialize*  ss    		/"$$\2..t/C/CD">>t?U?UV99,:K:KL'+'F'F
 	
rd   )r(  r)  r$  r'  r%  r*  rh   )Dr_   r`   ra   rb   rD  ExportGraphSignaturer  r:   r,  r   r1  rq   rM  r>   rH  rP  r   rW  r  r  r   r  rf  r   rt  r'   rE  r<   rr  r   ru  r~  r   r  r  r  r  r#   rC  rN   r@  rM   rA  rK   rB  rE  r0   rb  r@   rs  r/   rz  ArgumentSpecr[  r  r;   r  r  rv  r  rs  r  r.   r,   r  r  rV   rc   r^   rd   re   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&:&: 

{ 

rd   rW   )	metaclassc                   d    \ rS rSrS\4S\\\\4      S\4S jjr	S\
R                  S\4S jrS	rg)
rX   i7  Nopset_versionr   c                     0 U l         U(       a  U R                   R                  U5        SU R                   ;  a+  [        R                  R	                  5       U R                   S'   X l        g Naten)r  updaterq   r/  _get_max_operator_versionr   )r+  r  r   s      re   r,  "ExportedProgramSerializer.__init__9  sT    
 .0%%m4+++).)K)K)MDv&.rd   r{   r   c           
      .   UR                  5         [        UR                  UR                  5      nUR	                  UR
                  5      n[        UR                  5      nUR                  R                  5       nUR                  R                  5        H  u  pgXe;  d   eXuU'   M     [        UU R                  U[        [        S   [        S   S9UR                    Vs/ s H  oR"                  PM     sn[$        R&                  S9n	[)        U	[+        UR-                  5       5      5        [/        UR0                  SS9n
[3        U	[5        XR6                  5      [5        XPR6                  5      [5        UR8                  U R6                  5      5      $ s  snf )z;
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(  copyr}   ri   r)   r  rE   rD   r  dialectrq   __version__canonicalizesetr  r!   r|   r   r   r   r~   )r+  r{   gm_serializerserialized_graph_moduleserialized_range_constraintsr}   nr   rl   serialized_epnew_state_dicts              re   rV   #ExportedProgramSerializer.serializeF  st   
 	!!#-,,.>.P.P
 #0"9"9:J:W:W"X'B..(
$ %2$=$=$B$B$D	$..446DA%%%aL 7 (0,,:($Q'$Q' +;*D*DE*DQyy*DE++

 	]C	(8$9: 6''%
 "$^5I5IJ$Y0D0DE$ //1E1E	
 	
 Fs    F)r  r   )r_   r`   ra   rb   DEFAULT_PICKLE_PROTOCOLr   r   r   r   r,  rD  r)   r   rV   rc   r^   rd   re   rX   rX   7  sH     376/S#X// /1
"*<*< 1
AS 1
rd   rX   c                      \ rS rSr\R
                   " S S5      5       rSES jr\S\	S   4S j5       r
S\4S	 jrS\4S
 jr SFS\S\\\\\4      S\R(                  4S jjrS\S\\\R,                  4   4S jrS\S\\\R2                  4   4S jrS\S\\\R6                  4   4S jrS\S\4S jrS\ S\!R@                  4S jr"S\\\RF                  RH                  \4      4S jr%S\&S\RF                  RL                  4S jr'S\$S\(SS4S jr)S\*S\!RT                  4S jr+S\,S\!RX                  4S jr-S \.S\!R^                  4S! jr0  SGS"\1S#\\2\\Rf                  4   \44   S$\\2\\54   \44   S%\\\6\6\Rf                  S&4   \2\\54   4   \44      S'\\2\\7Rp                  4      S\4S( jjr9S)\S*\RF                  RH                  4S+ jr:S, r;S\$4S- jr<S.\=\>   4S/ jr?S0\@S\54S1 jrAS0\BS\54S2 jrCS3 rDS\$S*\RF                  RH                  4S4 jrES\$S*\RF                  RH                  4S5 jrFS*\RF                  RH                  S6\\G\H\I4   S7\S8\2\\54   4S9 jrJS*\RF                  RH                  S8\2\\54   4S: jrKS\$S*\RF                  RH                  SS4S; jrLS<\2\\4   S\2\\54   4S= jrMS>\@S\!R                  4S? jrOS@\PS\!R                  4SA jrQSB\=\R   S\=\!R                     4SC jrSSDrTg)HrY   iz  c                   b   \ rS rSr% \R
                  R                  \S'   \R                  \S'   \
\R                     \S'   \\\R                  4   \S'   \\\\R"                  \R$                  R&                  4   4   \S'   \\\4   \S'   \\\\R"                  S4   \\\4   4      \S	'   S
rg)GraphModuleDeserializer.Resulti|  r  r  r%  names_to_symbolsr|   r}   .r~   r^   N)r_   r`   ra   rb   rq   rM  r.   r   rD  r  r  r:   r   r   r   r   r   r?  r   r   r   r   r   r   rc   r^   rd   re   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Qrd   r  r   Nc                     0 U l         0 U l        [        R                  R	                  5       U l        [        R                  R                  5       U l        g rh   )	serialized_name_to_nodeserialized_name_to_metarq   rM  r,   rz  r   ModulerV  )r+  s    re   r,   GraphModuleDeserializer.__init__  s6    AC$<>$XX^^%
hhoo'rd   c              #     #    U R                   U R                  U R                  U R                  U R                  4n[
        R                  R                  5       U l         [
        R                  R                  5       U l        0 U l        0 U l        [        5       U l         S v   Uu  U l         U l        U l        U l        U l        g ! Uu  U l         U l        U l        U l        U l        f = f7frh   )rz  rV  r  r  unbacked_symbolsrq   rM  r,   r   r  r  r/  s     re   save_graph_module)GraphModuleDeserializer.save_graph_module  s      JJKK((((!!
 XX^^%
hhoo'')$')$365		 
,,%
,,%s   BC, C $"C,#C))C,serialized_targetc                 f    UR                  S5      u  p#USS  n[        U   nUR                  U5      $ )Nrl  r"   )split_deserialization_registryfrom_op_name)r+  r  r  r  r  s        re   deserialize_extension_operator6GraphModuleDeserializer.deserialize_extension_operator  s;    .44S9	abM	+I6##G,,rd   c                    UR                  S5      (       a  [        nUR                  S5      SS  nOUR                  S5      (       a  [        nUR                  S5      SS  nOZUR                  S5      (       a  [        nUR                  S5      SS  nO)UR                  S5      (       a  U R                  U5      $ U$ UnU H"  n[        XE5      (       d  Us  $ [        XE5      nM$     U$ )N	_operatorrS  r"   rq   r   rm  )rT  ro  r  rq   r   r  ry  r|  )r+  r  rV  serialized_target_namesr	  r  s         re   deserialize_operator,GraphModuleDeserializer.deserialize_operator  s    ''
 
 F&7&=&=c&B12&F#))'22F&7&=&=c&B12&F#))&11F&7&=&=c&B12&F#))#..667HII$$+D6(((( .	 ,
 rd   r   r   c           	        ^   SS[         R                  S[        [        [        [
        [        4      S[         R                  4U 4S jjjn[         R                  " U0 T R                  ET R                  ES9nU" XB5      $ )zl
Parses and does bottom-up processing of sympy.Expr nodes,
populating ShapeEnv & caching symbols as needed.
r   r   r   c                   > U R                   (       d"  U R                  (       d  U R                  (       a  U $ [        U 5      nU R                   H  nTR                  U5        M     UTR                  ;   a  TR                  U   n OU TR                  U'   [        U [        R                  5      (       aU  [        R                  " U [        R                  [        R                  45      (       a  TR                  R!                  U 5        Ub5  U TR"                  R$                  ;  a  TR"                  R'                  X5        TR(                  R+                  U5      =n(       a/  TR"                  R-                  U UR.                  UR0                  S9  [        U [        R                  5      (       a+  [2        R4                  " SS9TR"                  R6                  U '   U $ )N)compiler_mincompiler_maxr"   )skip)
is_Integeris_Float
is_Booleanr   rL  _parse_sym_exprsymbol_name_to_symbolrp   r   r   r   symbol_is_typer   UNBACKED_INTUNBACKED_FLOATr  add	shape_env
var_to_valadd_var_to_valsymbol_name_to_ranger^  constrain_symbol_ranger  r  r   extractvar_to_stack)r   r   r   rO  vrr+  s        re   _process_sym_exprBGraphModuleDeserializer._parse_sym_expr.<locals>._process_sym_expr  sh    ~~
 s888C((- $ t99944X>C;>D..x8!#u||449W9Wd//1D1DE: : --11#6#4>>3L3L(LNN11#<2266x@@2@NN99%'XX%'XX :  c5<<007H7P7PVW7XDNN//4Jrd   )localsrh   )
r   Exprr   r   r   r   r   sympifysympy_functionsr  )r+  r   r   r  r   s   `    re   r  'GraphModuleDeserializer._parse_sym_expr  s     HL!	!	#+E#tU2B,C#D!	ZZ!	 !	F }}Id**Id.H.HI
 !,,rd   r   c                    UR                   nUR                  S:X  aw  UR                  c  S nO2UR                  R                  S:X  d   eUR                  R                   nU R                  UR                  U5      nU R
                  R                  XCS9$ UR                  S:X  a  [        U5      [        L d   eU$ [        SUR                   SUR                    35      e)Nr   r   r   zSymInt has invalid field type  with value )	rj   r   r   r  r   r  create_symintnoder   r\   r+  r   r   r   r   s        re   deserialize_sym_int+GraphModuleDeserializer.deserialize_sym_int  s    gg66Yxxxx}}000xx~~&&s||T:C>>33C3CCVVx9###J 0QWWIN rd   c                    UR                   nUR                  S:X  a^  UR                  (       a  UR                  R                  OS nU R	                  UR
                  U5      nU R                  R                  XCS9$ UR                  S:X  a  [        U[        5      (       d   eU$ [        SUR                   SUR                    35      e)Nr   r   r   z SymFloat has invalid field type r'  )rj   r   r   r   r  r   r  create_symfloatnoderp   r   r\   r)  s        re   deserialize_sym_float-GraphModuleDeserializer.deserialize_sym_float  s    gg66Y(+388$$dD&&s||T:C>>55c5EEVVz!c5))))J 2166(,qwwiP rd   c                 B   UR                   nUR                  S:X  a6  U R                  UR                  5      nU R                  R                  U5      $ UR                  S:X  a  [        U[        5      (       d   eU$ [        SUR                   SUR                    35      e)Nr   r   zSymBool has invalid field type r'  )	rj   r   r  r   r  create_symboolnoderp   r   r\   )r+  r   r   r   s       re   deserialize_sym_bool,GraphModuleDeserializer.deserialize_sym_bool  s    gg66Y''5D>>44T::VVy c4((((J 1!&&aggYO rd   r   c                 n  ^  T R                      [        [        [        R                  " [        U 4S jUR                   5       5      [        U 4S jUR                   5       5      [        UR                  5      [        UR                     UR                  S95      sS S S 5        $ ! , (       d  f       g = f)Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7frh   r*  rt   r   r+  s     re   rv   BGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>+  s!     UCTC$22377CTr  c              3   F   >#    U  H  nTR                  U5      v   M     g 7frh   r6  r7  s     re   rv   r8  ,  s!     WCVC$22377CVr  )r   r   r   )fake_tensor_moder   r   rq   empty_stridedr   r   r   r   r   _SERIALIZE_TO_TORCH_DTYPEr   r   )r+  r   s   ` re   r   /GraphModuleDeserializer.deserialize_tensor_meta#  s     ""##U;CTCTUUW;CVCVWW-k.@.@A3K4E4EF"-";";	 #""s   BB&&
B4r  c                 T    [         R                  " UR                  UR                  S9$ )Nr9  )rD  r'   r  r:  r  s     re   deserialize_script_obj_meta3GraphModuleDeserializer.deserialize_script_obj_meta3  s)     ## %%%//
 	
rd   c                    UR                   S:X  a#  U R                  UR                  R                     $ UR                   S:X  a#  U R                  UR                  R
                     $ UR                   S:X  a#  U R                  UR                  R
                     $ UR                   S:X  a#  U R                  UR                  R
                     $ UR                   S:X  a  UR                  $ UR                   S:X  a  UR                  $ UR                   S:X  a  UR                  $ UR                   S:X  a  g [        S	U 35      e)
Nr6  r8  r  r  r   r   r   r  z"Unable to deserialize output node )r   r  r6  r  r8  r  r  r  r   r   r   r\   )r+  rK  s     re   deserialize_graph_output0GraphModuleDeserializer.deserialize_graph_output;  s
   ;;+%//0@0@0E0EFF[[L(//0A0A0I0IJJ[[M)//0B0B0J0JKK[[N*//0C0C0K0KLL[[H$== [[J&??"[[I%>>![[I% #EfX!NOOrd   serialized_graphc           	         [         R                  S5        UR                  R                  5        HP  u  p#[         R                  SX#5        U R	                  U5      n[         R                  SX$5        X@R
                  U'   MR     UR                  R                  5        HP  u  p%[         R                  SX%5        U R                  U5      n[         R                  SX&5        X`R
                  U'   MR     UR                  R                  5        HP  u  p'[         R                  SX'5        U R                  U5      n[         R                  SX(5        XR
                  U'   MR     UR                  R                  5        HP  u  p)[         R                  SX)5        U R                  U	5      n
[         R                  S	X*5        XR
                  U'   MR     UR                  R                  5        H9  u  p+[         R                  S
U5        U R                  U5      U R
                  U'   M;     [         R                  S5        [        UR                  5       GH  u  p[         R                  SU5        UR                   S;   aJ  UR"                  R$                  nU R&                  R)                  U5      nXl        U R+                  X5        Mv  UR                   S:X  a}  UR"                  R                   S:X  aJ  UR"                  R,                  nU R&                  R)                  U5      nXl        U R+                  X5        M  [/        SUR"                   S35      eUR                   S;   au  U R0                  R2                  U   R4                  R$                  =(       d    SU 3nU R&                  R)                  U5      nU R7                  U5      UR8                  S'   GM  [/        SU 35      e   UR:                   H1  n U R=                  UR>                  5      nU RA                  UU5        M3     / nURH                   H9  n[         R                  SU5        URK                  U RM                  U5      5        M;     URN                  (       a  [Q        U5      S:X  d   eUS   nO[S        U5      nU R&                  RU                  U5      nURN                  (       a*  URV                  S   R8                  S   UR8                  S'   O,[S        S URV                  S    5       5      UR8                  S'   U R&                  R:                   Hg  nUR8                  RY                  S5      =nc  M#  [Z        R\                  " USU R^                  U R`                  SS9=n(       d  MX  UUR8                  S'   Mi     [Q        U R`                  5      S:X  d   eU R&                  $ ! [B         a*  n[/        SU S[D        RF                  " 5        35      UeS nAff = f) 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)r6  r<  r8  r  z Deserializing a constant symint z as an input)r   r   r   r  r  rO  r   zInvalid input type zFailed deserializing node r  z[deserialize output] %sr"   r   c              3      #    U  H?  n[        U[        R                  R                  5      (       a  UR                  S    OUv   MA     g7f)r   N)rp   rq   rM  r>   r=  )rt   rO  s     re   rv   <GraphModuleDeserializer.deserialize_graph.<locals>.<genexpr>  s8      ,.C $.c588==#A#AsJ.s   AA	r^   T)r  pendingsimplifyunbacked_bindings)1r   r>  r  ri   r   r  r  r*  r  r.  r  r2  r  r?  re  r  r   rj   r  rz  r4  sync_fx_noder  r\   r  rx  rO  deserialize_inputr=  r  r  r	  deserialize_noder  r  r  r  rF  rB  r  r   r   rK  rL  r^  r    _free_unbacked_symbols_with_pathr  r  )r+  rD  r  tensor_valuer_  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  rK  output_noder   r   rJ  s                            re   deserialize_graph)GraphModuleDeserializer.deserialize_graphO  s1   		)* #3"@"@"F"F"HDII@$U33LAHIIA4R19((.	 #I $4#B#B#H#H#JDII<dR..}=GII=tM18((.	 $K &6%F%F%L%L%N!DII>V22?CIII?Q1:((.	 &O %5$D$D$J$J$L DII=tT00@HII>O19((.	 %M &6%G%G%M%M%O!DII8/J151Q1Q2D((. &P 			/0"#3#:#:;IAII.7{{<<"LL--	#'::#9#9)#D  )2%!!)>,<<$$	1 & 4 4I'+zz'='=i'H$ -6)%%iB(:6<<.U   !  !NN66q9==BBOA3i	#'::#9#9)#D /3/E/Ef/M %%e,$':6(%CDDA <F  055O22?3I3IJ%%ov>  6 &..FII/8NN488@A / 33w<1$$$ajGGnGjj''033&1&6&6q&9&>&>u&EKU#&+ ,&++A., 'KU# JJ$$Dyy}}U++8%4%U%U"nn 11!& !  2C		-. % 4(()Q...zzS  $00AAWXaXlXlXnWops   7-W
X%W??XrY  r	  c           
         S[         4S jnU[        ;   d2  U[        R                  R                  R
                  R                  :X  ao  UR                  S   R                  R                  nU R                  UR                  5      nU R                  R                  SX%0 U5      nU R                  X5        GO{[        U[        R                   R"                  5      (       Gad  U R%                  UR                  5      u  pWU R'                  UR(                  5      n/ UQUR+                  5       Q7 H[  n	[        U	[        R,                  R.                  5      (       d  M.  U	R0                  S:X  d  M@  U	R2                  R5                  U5        M]     [7        UR                  5      S:X  aS  [9        UR                  S   S5      (       a5  [;        USS	5      (       a#  UR                  S   R<                  R>                  OS nU R                  R                  SX%Xt5      nU RA                  X5        UR2                  R5                  U5        O[        U[        R                   RB                  /[E        5       Q75      (       at  U" U5      (       a#  UR                  S   R<                  R>                  OS nU RG                  X!5      u  pWU R                  R                  SX%Xt5      nU RA                  X5        OD[        U[H        5      (       a  S
U S3S-   S-   S-   OSn
[K        U
SU S[M        U5       S3-   5      eUR2                  R5                  U R'                  UR(                  5      5        [N        RQ                  SUR>                  URR                  URT                  URV                  UR2                  RY                  S5      5        UR0                  S;  a!  SUR2                  ;  a  0 UR2                  S'   g g g )Nr   c                     [        U 5      nUR                  n[        U5      S:H  =(       a'    [        US   R                  [
        R                  5      $ )Nr"   r   )r
  r  r   rp   r  rq   r*  )r	  r  r  s      re   _is_single_tensor_returnJGraphModuleDeserializer.deserialize_node.<locals>._is_single_tensor_return  sG    ,V4FnnGw<1$ 
$$e&6&6* rd   r   rZ  r  r"   r6  rk  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: rS  z)[deserialize_node] %s: %s(%s, {%s}) -> %sr   )r4  rK  r  )-r   rq  rq   opsr  itemr   r  rj   r  deserialize_sym_op_inputsr  rz  create_nodedeserialize_sym_op_outputsrp   rr   r]  deserialize_hoo_inputsdeserialize_metadatar[  r8  rM  r>   ru   r=  r  r   ry  r|  r6  r  deserialize_outputsrs   r  deserialize_inputsr   r\   r   r   r>  r	  rL  rn  r^  )r+  rY  r	  r_  r  rL  fx_nodern  r[  r|  _additional_msgs              re   rM  (GraphModuleDeserializer.deserialize_node  sr   	 	 hyy~~""**+ #**1-33;;D11/2H2HIDjj,,_fBPTUG++OE

 > >??667M7MNLD001I1IJH.t.fmmo.a//ADDJ4F FFMM(+ /" ../14O33A6DDO-JDQQ  ''*4499   jj,,vG $$_>LL)UZZ**K-H-JK
 
 ,F33  ''*4499 
  226KLDjj,,v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 8rd   r  c           	      p   [         R                  SU5        UR                  S:X  aQ  [        R                  " [        R
                  R                  U R                  UR                  R                  5      S S9$ UR                  S:X  ar  [        R                  " [        R
                  R                  [        R                  " UR                  R                  R                  S9UR                  R                  S9$ UR                  S:X  a  [        R                  " [        R
                  R                  [        R                  " UR                   R                  R                  S9UR                   R"                  UR                   R$                  S9$ UR                  S:X  ar  [        R                  " [        R
                  R&                  [        R                  " UR(                  R                  R                  S9UR(                  R*                  S9$ UR                  S	:X  a  [        R                  " [        R
                  R,                  [        R.                  " UR0                  R                  R                  UR0                  R                  R2                  S
9UR0                  R4                  S9$ UR                  S:X  a^  [        R                  " [        R
                  R6                  [        R8                  " UR:                  R                  R                  S9S S9$ UR                  S:X  ax  [        R                  " [        R
                  R                  [        R<                  " UR>                  R                  U RA                  UR>                  RB                  5      S9S S9$ [E        SU 35      e)Nz[deserialize_input_spec] %srL  r  rO  r	  rO  r  r   )r  rO  r	  rQ  rS  rT  r9  rV  rJ  rI  zUnknown input spec )#r   r>  r   rD  r0   rX  rY  deserialize_argument_specrL  rO  r\  rN   rO  r  rN  r]  r   rP  rQ  r^  rS  rR  r_  r'   rT  r:  r9  r`  rP   rV  rZ  rJ  deserialize_constant_inputrj   rB  )r+  r  s     re   deserialize_input_spec.GraphModuleDeserializer.deserialize_input_spec)  s   		/366\!<<\\,,221<<3C3CD 
 VV{"<<\\++%%1;;??+?+?@{{11 
 VVx<<\\((%%188<<+<+<=xx++88..	  VV((<<\\11%%1+<+<+@+@+E+EF((== 
 VV|#<<\\,,(())..!,,:J:J:T:T ||33  VVw<<\\''$$!''++*:*:; 
 VV''<<\\,,''))..99!:J:J:P:PQ   !#6qc!:;;rd   oc                    [         R                  SU5        UR                  S:X  aQ  [        R                  " [        R
                  R                  U R                  UR                  R                  5      S S9$ UR                  S:X  a^  [        R                  " [        R
                  R                  [        R                  " UR                  R                  R                  S9S S9$ UR                  S:X  ar  [        R                  " [        R
                  R                  [        R                  " UR                  R                  R                  S9UR                  R                   S9$ UR                  S:X  ar  [        R                  " [        R
                  R"                  [        R                  " UR$                  R                  R                  S9UR$                  R&                  S9$ UR                  S:X  ar  [        R                  " [        R
                  R(                  [        R                  " UR*                  R                  R                  S9UR*                  R,                  S9$ UR                  S	:X  ar  [        R                  " [        R
                  R.                  [        R                  " UR0                  R                  R                  S9UR0                  R,                  S9$ UR                  S
:X  a^  [        R                  " [        R
                  R2                  [        R4                  " UR6                  R                  R                  S9S S9$ [9        SU 35      e)Nz[deserialize_output_spec] %sre  rn  rf  r  rg  rh  rj  rk  rV  zUnknown output spec )r   r>  r   rD  r@   rl  rm  ro  re  rO  rn  rN   rf  r  ro  rg  rP  rp  rh  rN  rq  rj  ri  rr  rk  r`  rP   rV  rB  )r+  rs  s     re   deserialize_output_spec/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!;<<rd   ru  c           	         [         R                  S5        [        R                  " UR                   Vs/ s H  o R                  U5      PM     snUR                   Vs/ s H  o0R                  U5      PM     snS9$ s  snf s  snf )Nz
[deserialize_signature]rw  )r   r>  rD  r  rx  rq  ry  ru  )r+  ru  r  rs  s       re   deserialize_signature-GraphModuleDeserializer.deserialize_signature  sj    		-.&&ADQA44Q7QCFCSCSTCSa66q9CST
 	
QTs   A=B
r  serialized_state_dictr}   r~   .r  c           
         [         b   eU q  [        R                  S5        [        R                  " SS9U l        [        SSU R
                  S9U l        0 S[        R                  R                  R                  R                  _S[        R                  R                  R                  R                  _S[        R                  R                  R                  R                  _S	[        R                  R                  R                  R                  _S
[        R                  R                  R                  R                   _S[        R                  R                  R                  R"                  _S[        R                  R                  R                  R$                  _S[        R                  R                  R                  R&                  _S[        R                  R                  R                  R(                  _S[        R                  R                  R                  R*                  _S[        R                  R                  R                  R,                  _S[        R                  R                  R                  R.                  _S[        R                  R                  R                  R0                  _S[        R                  R                  R                  R2                  _S[        R                  R                  R                  R4                  _S[        R                  R                  R                  R6                  _S[        R                  R                  R                  R8                  _[        R                  R                  R                  R:                  [        R                  R                  R                  R<                  [        R                  R                  R                  R>                  [        R                  R                  R                  R@                  [        R                  R                  R                  RB                  S.EU l"        0 U l#        [I        U5      U l%        U RM                  URN                  5      U l'        0 U l(        [S        5       U l*        Su  pgS [V        RX                  [V        RZ                  4 5       u  pU(       a  UR]                  5        H  u  pUR^                  nUR`                  S:  a  [c        SU5      n[        Rd                  " [g        U[h        * 5      UR`                  5      U RP                  U
'   U
Rk                  U5      (       a$  [m        U
[o        U5      S  5      n[c        Xm5      nM  U
Rk                  U	5      (       d  M  [m        U
[o        U	5      S  5      n[c        X}5      nM     [q        US-   5       H"  n[s        U R
                  Rt                  5        M$     [q        US-   5       H"  n[s        U R
                  Rv                  5        M$     Ub   [o        U5      S:  a  [I        U5      U l<        OS U l<        U R{                  UR|                  5        [        U Rx                  5         U R                  UR                  5      nS S S 5        [        R                  " U R                  U R|                  5      n0 nUR                  R                  S5      =n(       a  [        R                  " U5      US'   [        US5      (       a;  0 US'   UR                  R]                  5        H  u  nnUR                  US   U'   M     UUlL        [        R                  UU RN                  WU RF                  [I        U5      U RJ                  U Rx                  S9S q $ ! , (       d  f       GN= f! S q f = f) Nz
[deserialize]T)assume_static_by_defaultF)allow_fallback_kernelsallow_non_fake_inputsr  FloorDivModularIndexingWhere	PythonModModCleanDiv	CeilToInt
FloorToIntCeilDivLShiftRShiftPowByNaturalFloatPowFloatTrueDiv
IntTrueDiv!IsNonOverlappingAndDenseIndicatorTruncToFloat)
TruncToInt
RoundToIntRoundDecimalToFloatIdentity)r  c              3   4   #    U  H  n[         U   v   M     g 7frh   )r   )rt   r   s     re   rv   6GraphModuleDeserializer.deserialize.<locals>.<genexpr>  s      @'O!
1'Os   r    r"   r   r  r*  )r  r  r%  r  r|   r}   r~   )Or   r   r>  r   ShapeEnvr  r   r:  rq   utils_sympy	functionsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r  r   r}   rx  r  r  r  r  r   r  r  ri   r  r  maxr   r   r   rT  r   r   rangenextunbacked_symfloat_counterunbacked_symint_counterr~   r[  rz  r   deserialize_module_call_graphr%  rD  _create_graph_module_for_exportrV  r[  r^  r   r   ry  r*  r  r=  rY   r  )r+  r  rz  r}   r~   r  count_unbacked_symfloatcount_unbacked_symintunbacked_symfloat_prefixunbacked_symint_prefixrk   r  r  r  r  r%  r  r=  r  type_fieldss                        re   deserialize#GraphModuleDeserializer.deserialize  s2    %,,, $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9EAHHExx1} #Au3B3N3N)%&92884D--a0 ||$<==#&>"?"A BC256M2Q/&<==#&<"="? @A034I0M- :  2Q67T^^==> 80145T^^;;< 6 )c..AA.E&@&P#&*#""#:#@#@A78K8KL$($F$F+==%! M ==dkk4::VLD099==hGGvG!%F!3X.0LMM5712 -GGMMO@F@R@RD56u= P $L*11).."3!%!;!;56KL..#22 2  %)!5 ML4 %)!s,   V_ ,C(_ ^?0D_ ?
_	_ _r  rj  c                     XR                   ;   a  [        SU S35      eXl        X R                   U'   SUR                  ;  d   eU R                  U   UR                  S'   g )NzNode z& has already been deserialized before.r   )r  r\   r  r=  r  )r+  r  rj  s      re   rK  $GraphModuleDeserializer.sync_fx_node	  sa    /// 5.T!UVV-4$$T*GLL((("::4@Urd   c                 .   ^  [        U 4S jU 5       5      $ )Nc              3   Z   >#    U  H   nTR                  UR                  5      v   M"     g 7frh   )rL  rO  )rt   inputr+  s     re   rv   DGraphModuleDeserializer.deserialize_sym_op_inputs.<locals>.<genexpr>	  s#     KF5T++EII66Fs   (+)r   )r+  r  s   ` re   rc  1GraphModuleDeserializer.deserialize_sym_op_inputs	  s    KFKKKrd   c                    [        U5      R                  nUR                   Vs0 s H  oDR                  UR                  _M     nnUR                   Vs0 s H)  nUR                  U R                  UR                  5      _M+     nn/ n[        5       nU GH  n	U	R                  U;   a  XiR                     n
XYR                     nU[        R                  :X  a  UR                  U
5        MW  U[        R                  :X  a5  [        R                  " U	R                  5      (       d  XU	R                  '   M  U	R                  5       (       + =(       a    U	R                  (       + nU(       a  UR                  XiR                     5        M  [        R                  " U	R                  5      (       at  U	R                  (       a   e[!        U5      S:  a2  [        5       nUR#                  [%        UR'                  5       5      5        UR                  XiR                     5        GM  U	R                  U;   d  GM  XiR                     XR                  '   GM     [)        U5      U4$ s  snf s  snf Nr   )r
  r  r  r  r  rL  rO  r   r$   r  rF  r  keyword	iskeywordhas_default_valuer  r   r  r  r8  r   )r+  r	  rY  schema_argsr  argument_kindsactual_argsrL  rn  r  rO  r  is_positionals                re   ri  *GraphModuleDeserializer.deserialize_inputs	  s   -f5??>M>T>TU>TU**ejj0>TU )//
/ JJ..uyy99/ 	 
 (3%J+-!//2%oo6<222KK$\111':K:KOO; ; /2:??+ 0022P:;P;P7P  K89"":??33%0000v;?(]FKKV]]_ 56K89??k1.9//.JF??+7 &8 T{F""G V
s    I0I$r  c                     / n0 nU Hf  nUR                   S:w  a)  U R                  UR                  5      X4R                   '   M<  UR                  U R                  UR                  5      5        Mh     [	        U5      U4$ )z?
For deserializing HOO inputs since HOOs do not have a schema.
r  )r  rL  rO  rF  r   )r+  r  rL  rn  rV  s        re   rf  .GraphModuleDeserializer.deserialize_hoo_inputs@	  sk     F{{b &*&<&<VZZ&H{{#D226::>?	 
 dV$$rd   inpc                 N  ^ ^ TR                   nTR                  nUS:X  a  g US:X  a#  T R                  TR                  R                     $ US:X  a  [
        TR                     $ US:X  a  [        TR                     $ US:X  a  [        TR                     $ US:X  a  [        U[        5      (       d   eT R                  5          T R                  UR                  5        [         R"                  " T R$                  T R                  5      nS S S 5        T R$                  R'                  UR                  W5        T R                  R)                  SUR                  UR                  S9$ US	:X  a  [+        TR,                  5      $ US
:X  a  TR.                  $ US:X  a  TR0                  $ US:X  a  TR2                  $ US:X  a  TR4                  $ US:X  a  T R7                  TR8                  5      $ US:X  a  T R7                  TR:                  5      $ US:X  a  T R7                  TR<                  5      $ [        U[>        5      (       a  [A        U5      S:X  a  / $ US:X  a+  U Vs/ s H  nT R                  UR                     PM     nnU$ US;   a  [?        U5      $ US;   a"  U Vs/ s H  nT R7                  U5      PM     sn$ US:X  a  UU 4S jn[?        [C        Xr5      5      $ [E        ST 35      eUS:X  aj  TRF                  R                  T R                  ;   a#  T R                  TRF                  R                     $ T RH                  TRF                  R                     $ US:X  a  T RK                  TRL                  5      $ [E        ST 35      e! , (       d  f       GN= fs  snf s  snf )Nr  r6  r  r  r  r  r  r  r  r   r   r   r  r8  r  r  r   rd  )r  r  r  r  )r  r  r  r
  c                    > U R                   S:X  a  g U R                   S:X  a#  TR                  U R                  R                     $ [	        ST 35      e)Nr  r6  Unhandled argument )r   r  rj   r  r\   )r  r  r+  s    re    deserialize_optional_tensor_argsSGraphModuleDeserializer.deserialize_input.<locals>.deserialize_optional_tensor_args	  sJ    vv*#;.#;;AGGLLII,/B3%-HIIrd   r  r<  r  )'rj   r   r  r6  r  r<  r  !_SERIALIZE_TO_TORCH_MEMORY_FORMATr  _SERIALIZE_TO_TORCH_LAYOUTr  rp   r-   r  r[  rz  rD  r  rV  register_modulerd  r   r  r   r   r   r  deserialize_sym_argumentr8  r  r  r  r   r,  r\   r<  r}   r  r  )r+  r  rj   typ_	submodulerO  resultr  s   ``      re   rL  )GraphModuleDeserializer.deserialize_inputM	  sF   		xx9 [ //0B0BCC%%,S-?-?@@''4S5I5IJJ[ -cmm<<Ze]3333'')&&u{{3>>t{{DJJW	 * KK''

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

ZZ *  
 [ %cmm44X::Z<<Y;;[ == \!00@@^#001A1ABB]"00AAt$$5zQ	%LQRES$66sxx@ERKKE{"IIFKLes55c:eLL..J C @HII$':3%%@AA_$  %%)E)EE33C4E4E4J4JKK>>#"3"3"8"899]",,S__== #6se!<==s *): S Ms   AN#NN"
Nc                 j   UR                   S:X  a  [        UR                  5      $ UR                   S:X  a  [        UR                  5      $ UR                   S:X  a  [        UR                  5      $ UR                   S:X  a  [        UR                  5      $ UR                   S:X  a  g [        SU S35      e)Nr   r   r  r   r  zUnhandled constant argument z to deserialize)
r   r   r   r   r   r   r  r   r   r\   )r+  r  s     re   rp  2GraphModuleDeserializer.deserialize_constant_input	  s    88xszz?"XX#&&XX$s}}%%XX"$$XX" #?uO!TUUrd   c                 >   [        U[        5      (       aF  UR                  S:X  a  UR                  $ UR                  S:X  a  U R                  UR
                     $ O[        U[        5      (       aF  UR                  S:X  a  UR                  $ UR                  S:X  a  U R                  UR
                     $ OZ[        U[        5      (       aE  UR                  S:X  a  UR                  $ UR                  S:X  a  U R                  UR
                     $ [        SU 35      e)Nr   r  r   r   z Unknown symbolic argument type: )rp   rM   r   r   r  r  rK   r   rG   r   r\   )r+  sym_args     re   r  0GraphModuleDeserializer.deserialize_sym_argument	  s    g~..||x'~~%*33GOODD +!122||z)'''*33GOODD +11||y(&*33GOODD?yIJJrd   c                 j    U R                  UR                  S   R                  R                  U5        g r  )rK  r  rj   r  )r+  rY  rj  s      re   re  2GraphModuleDeserializer.deserialize_sym_op_outputs	  s)    /11!4::BBGLrd   c                   ^  [        UR                  5      S:X  a  g [        UR                  5      S:X  aM  SUR                  ;   a=  [        USS5      (       d+  UR                  S   R                  S:w  a  U 4S jnU" X5      $ [        UR                  5      S:X  aQ  UR                  S   R                  S:X  a4  T R                  UR                  S   R                  R                  U5        g [        UR                  5      S:X  ak  [        UR                  S   R                  [        [        [        45      (       a4  T R                  UR                  S   R                  R                  U5        g [        UR                  5      S:X  ad  UR                  S   R                  S:X  aG  S UR                  S	'   UR                  T R                   R#                  UR                  5       S
35        g T R%                  X5        g )Nr   r"   ztorch.ops.higher_orderrk  Tr  c                   > / nS nU R                   S   R                  S:X  a  U R                   S   R                  nOP[        U R                   S   R                  [
        [        [        45      (       a  U R                   S   R                  nTR                  U R                  5      nUc   eTR                  X!USU5        [        U5      UR                  S'   UTR                  UR                  '   g )Nr   r6  r   )r  r   r6  rp   rj   rM   rG   rK   rg  r[  generate_getitemr   r=  r  r  )rY  rj  r_  rO  deserialized_metadatar+  s        re   #_deserialize_hop_with_single_returnXGraphModuleDeserializer.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\\:rd   r6  r   _unused)r   r  r	  r|  r   rK  r6  r  rp   rj   rM   rG   rK   r  r=  _renamerz  _target_to_strdeserialize_multiple_outputs)r+  rY  rj  r  s   `   re   rh  +GraphModuleDeserializer.deserialize_outputs	  s   &&'1, ''(A-(O,B,BBO-JDQQ''*//9<& 7PP ''(A-''*//;>o55a8BBGGQ(()Q.:##A&,,_.>?4
 4
 o55a8>>FFP''(A-''*//9< #'GLLOOtzz88HIQR))/Crd   rO  rh  r  c                    [        U[        5      (       a  UR                  nO[[        U[        5      (       a  UR                  nO9[        U[
        5      (       a  UR                  nO[        S[        U5       35      eU R                  R                  S[        R                  X$4US9nU R                  Xg5        UR                  U R                  U   5        UR                  R!                  U5        g )Nz+generate_getitem got unknown argument type rZ  r  )rp   rN   r  rM   r  rK   rB  r   rz  rd  ro  rp  rK  rF  r  r=  r  )r+  r_  rj  rO  rh  r  r  individual_outputs           re   r  (GraphModuleDeserializer.generate_getitem	  s     c>**88D^,,;;D-..;;D =d3i[I  !JJ22N	 3 
 	$244T:; 	%%&;<rd   c                 h   [        U5       GH  u  pV[        U[        [        [        45      (       a  U R                  XXeU5        M;  [        U[        5      (       d   eUR                  S;   a  U R                  XUR                  XT5        M  UR                  S;   a  U R                  R                  S[        R                  X%45      nUR                  / 5        U R                  US   XvR                  U5        UR                  R!                  U5        US   UR                  S'   GM  UR                  S:X  ai  U R                  R                  S[        R                  X%4SS9nUR                  S 5        S UR                  S'   UR                  R!                  U5        GM  [#        SU 35      e   g )	N)r6  r8  r  )rd  r  r  r  r  r  r  r  rZ  r  r   r  r  z Unimplemented node output type: )re  rp   rN   rM   rK   r  r#   r   rj   rz  rd  ro  rp  rF  generate_getitemsr=  r  NotImplementedError)	r+  r_  rj  rL  r  rh  rO  list_outputr  s	            re   r  )GraphModuleDeserializer.generate_getitems
  s    "$HC#@PQRR%%s1F c8,,,,xxFF%%syy#  	 	 #jj44#$$N
 #&&RL+yy:O   ''(=>*22,  'Y&$(JJ$:$:#$$N"	 %; %! %04!&&u-!&&--.CD),LSE*RSSY (rd   c                     U R                  UR                  5      n/ n[        UR                  5      S:X  a  [	        UR                  S   R
                  [        5      (       d   e[	        UR                  S   R
                  S   [        5      (       d   eU R                  UUUR                  S   R                  U5        OU R                  XBUR                  U5        [        U5      UR                  S'   X R                  UR                  '   g )Nr"   r   r   )rg  r[  r   r  rp   rj   r  rN   r  rd  r   r=  r  r  )r+  rY  rj  r  r_  s        re   r  4GraphModuleDeserializer.deserialize_multiple_outputsG
  s     !% 9 9/:R:R S !&&'1,o55a8>>EEEEo55a8>>qA>RRRR""''*55%	 ""?#:#:<Q
 $HoU5<$$W\\2rd   r[  c                   ^ ^^ 0 nUR                  S5      =n(       a  X2S'   S[        4U 4S jjnUR                  S5      =n(       a3  S mS m[        UU4S jUR                  [        5       5       5      nXbS'   UR                  S5      =n(       aM  / nUR                  [        5       H.  n	U	R                  S	5      u  pUR                  X" U5      45        M0     XS'   UR                  S
5      =n(       a!  [        UR                  [        5      5      US
'   UR                  S5      =n(       a  [        R                  " U5      US'   U$ )Nr  r  c                 Z  > S nU R                  S5      (       a%  [        R                  nU R                  S5      SS  nOBU R                  S5      (       a  [        nU R                  S5      SS  nOTR	                  U 5      $ UnU H"  n[        X45      (       d  U s  $ [        X45      nM$     U$ )Nztorch.nnrS  r    rq   r"   )rT  rq   r   r  r  ry  r|  )r  rV  r  r	  r  r+  s        re   deserialize_meta_funcKGraphModuleDeserializer.deserialize_metadata.<locals>.deserialize_meta_funcj
  s    F ++J77*;*A*A#*Fqr*J'"--g66*;*A*A#*Fqr*J'001BCCF/v,,,,$V2F	 0
 Mrd   r  c                     XU44$ rh   r^   )keyr  r  s      re   import_nn_module_stackLGraphModuleDeserializer.deserialize_metadata.<locals>.import_nn_module_stack
  s    2J&rd   c                 
   / nSu  p#Su  pE[        U 5       HE  u  pgXt;   a  US-  nM  Xu;   a  US-  nM  US:X  d  M%  US:X  d  M-  UR                  XU 5        US-   nMG     UR                  XS  5        [        U5      S:X  d   eU$ )N)r   r   )z[(z)]r"   r  r      )re  rF  r   )r[  outstartr  r  r!  endcs           re   metadata_splitDGraphModuleDeserializer.deserialize_metadata.<locals>.metadata_split
  s    !'1FCvQQca1f

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

8F+,3x1}$}
rd   c              3   :   >#    U  H  nT" T" U5      6 v   M     g 7frh   r^   )rt   rb  r  r  s     re   rv   ?GraphModuleDeserializer.deserialize_metadata.<locals>.<genexpr>
  s"      #CD 't(<=Cs   r  r  r  r  )	r^  r   r   r  r  rF  r   r   r   )r+  r[  r  r  r  nn_module_stack_strr  source_fn_st_strr  source_fn_strr  
target_strtorch_fn_str
custom_strr  r  s   `             @@re   rg  ,GraphModuleDeserializer.deserialize_metadatae
  sA    ",,}55;5!,	S 	& #+,,/@"AAA'  # #/55lC# O &5!"'||,=>>>L!1!7!7!E#0#6#6s#; ##T+@+L$MN "F &2!"#<<
33<3#L$6$6|$DEC
O!h//:/ JJz2CM
rd   r|  c                 V   [         R                  SU5        UR                  S:X  a(  [        R                  " UR
                  R                  S9$ UR                  S:X  a(  [        R                  " UR                  R                  S9$ UR                  S:X  a(  [        R                  " UR                  R                  S9$ UR                  S:X  a8  [        R                  " UR                  R                  U R                  U5      S9$ [        R                  " SU R                  U5      S9$ )	Nz[deserialize_argument_spec] %sr6  r  r8  r  r<  rI  r  )r   r>  r   rD  rN   r6  r  rM   r8  r  rK   r  rZ  r<  rL  r  s     re   ro  1GraphModuleDeserializer.deserialize_argument_spec
  s    		2A666[ $$!++*:*:;;VV|#$$!,,*>*>??VV~%&&ANN,B,BCCVV&&&__))1G1G1J  &&Bd6L6LQ6OPPrd   r  c           	      d   [         R                  " UR                   Vs/ s H  o R                  U5      PM     snUR                   Vs/ s H  o R                  U5      PM     sn[        UR                  5      [        UR                  5      UR                  =n(       a  US9$ S S9$ s  snf s  snf )Nr  )	rD  r;   r  ro  r  r   r  r  r  r  s       re   !deserialize_module_call_signature9GraphModuleDeserializer.deserialize_module_call_signature
  s     %%;P;W;W;Wa..q1;W <Q;X;X;Xa..q1;X ##8#@#@A#$9$B$BC.@@@@ $
 	
 
 	
s   B(	B-
r%  c           	          [         R                  S5        U Vs/ s HN  n[        R                  " UR                  UR
                  (       a  U R                  UR
                  5      OS S9PMP     sn$ s  snf )Nz 
[deserialize_module_call_graph]r  )r   r>  rD  r:   r  r  r  r  s      re   r  5GraphModuleDeserializer.deserialize_module_call_graph
  sn     			56 +

 + II  ::5??K +

 
	
 

s   AA2)r}   r~   r:  rz  rV  r  r  r  r  r  r  r$  r  )r   Nrh   )NN)Ur_   r`   ra   rb   dataclassesr   r  r,  r   r   r  r   r  r  r   r   r   r   r   r   r"  r  rL   rq   r*  rJ   r.  rF   r2  rO   r   r   r'   rD  r?  rM  r>   rB  r,   r[  r   rM  r0   rq  r@   ru  r/   r  rx  r.   r   r?  r   r   r   r   r   r  rK  rc  ri  r  r<   rf  r#   rL  r&   rp  r  re  rh  rN   rM   rK   r  r  r  rg  r  ro  r;   r  r:   r  rc   r^   rd   re   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  	!
rd   c                   x   \ rS rSrSS\\\\4      4S jjrS\\\	R                  4   S\\\R                  4   S\\R                  \
4   4S jr SS	S
.S\S\\\\R"                  4   \4   S\\\\R"                  4   \4   S\\\\\R"                  S4   \\\4   4   \4      S\R                  4
S jjjrSrg)rZ   i
  Nexpected_opset_versionc                     0 U l         U(       a  U R                   R                  U5        SU R                   ;  a,  [        R                  R	                  5       U R                   S'   g g r  )r
  r  rq   r/  r  )r+  r
  s     re   r,  $ExportedProgramDeserializer.__init__
  sR    68#!''../EF44427((2T2T2VD''/ 5rd   r  r  r   c                     [         R                  S5        0 nUR                  5        HO  u  pEUR                  U5      =n(       a  [         R                  SXE5        XSU'   M9  [         R	                  SU5        MQ     U$ )Nz 
[deserialize_range_constraints]z([deserialize_range_constraints] %s -> %sz;Symbol %s did not appear in the graph that was deserialized)r   r>  ri   r^  r   )r+  r  r  r   rk   rl   symbols          re   deserialize_range_constraints9ExportedProgramDeserializer.deserialize_range_constraints
  ss    
 			56(..0DA.22155v5		DaK,-&)QST 1 ! rd   F_unsafe_skip_version_checkr{   r|   r}   r~   .c                   [        U[        5      (       d   eUR                  nUR                  [        S   :w  aG  UR                  S:X  a  UR
                  S:X  d'  U(       d   [        SUR                   S[         S35      eUR                  R                  5        VVs0 s HN  u  pxU[        R                  " [        UR                  [        * 5      [        UR                  [        5      5      _MP     n	nn[        5       R!                  UR"                  UUUU	5      n
U R%                  U	U
R&                  5      n[(        R                  " U
R"                  U
R"                  R*                  U
R,                  U
R.                  UU
R0                  U
R2                  U
R4                  UR6                   Vs/ s H  n[9        U5      PM     snS9	n[:        R=                  SU5        U$ s  snnf s  snf )Nr   zSerialized schema version z+ does not match our current schema version rS  )	rootrz  r$  r|   r   r%  r~   r}   r  z
[deserialize]: %s)rp   r)   r  r  rD   r  r\   r   ri   r   r   r   min_valr   max_valrY   r  r  r  r  rD  rz  r  r|   r%  r~   r}   r  r   r   r>  )r+  r{   r|   r}   r~   r  versionrk   rl   r  resr   r  s                re   r  'ExportedProgramDeserializer.deserialize
  s    *O<<<<"11 ==N1--MMQ7==A#5-$01A1P1P0Q RAAO@PPQS  )::@@B 

 C	 **!!))fW5!!))V4  C 	  
 &'33)) 
 !>>   

 ##!!""((MM~~/!33--mm1A1K1KL1KA}Q'1KL

 			'0? 
8 Ms   AG"0G()r
  rh   )r_   r`   ra   rb   r   r   r   r   r,  r   r   r   r   r  r)   r   rq   r?  r   r   r   rD  r  rc   r^   rd   re   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 7rd   rZ   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   i.  c                    > [        U[        5      (       a  UR                  $ [        U[        5      (       a%  [        R
                  " U5      R                  S5      $ [        TU ]!  U5      $ )Nr   )	rp   r
   rj   r   base64	b64encoder   superr   )r+  r  	__class__s     re   r   EnumEncoder.default/  sR    c4  99c5!!##C(//88ws##rd   r^   )r_   r`   ra   rb   r   rc   __classcell__)r  s   @re   r   r   .  s    $ $rd   r   c           
      J   [        U [        5      (       a!  U R                  [        U R                  5      0$ [
        R                  " U 5      (       aN  [
        R                  " U 5       Vs0 s H,  nUR                  [        [        XR                  5      5      _M.     sn$ [        U [        5      (       a  U  Vs/ s H  n[        U5      PM     sn$ [        U [        5      (       a  [        S U  5       5      $ [        U [        5      (       a/  U R                  5        VVs0 s H  u  p4U[        U5      _M     snn$ [        U [        5      (       aB  U [        R                   :X  a  gU [        R                   * :X  a  gU [        R"                  :X  a  gU $ U $ s  snf s  snf s  snnf )Nc              3   8   #    U  H  n[        U5      v   M     g 7frh   )r   )rt   r|  s     re   rv   %_dataclass_to_dict.<locals>.<genexpr>B  s     8Cq'**Cs   Infinityz	-InfinityNaN)rp   rU   r   r   rj   r  is_dataclassr  r  r|  r  r   r   ri   r   r   r   nan)r  fr|  rk   rl   s        re   r   r   7  sO   #v,SYY788		!	!#	&	& !'',
, FF&wsFF';<<,
 	
 
C		/23s!"1%s33	C		8C888	C		58YY[A[TQ%a(([AA	C		$((?TXXIDHH_J
)

 4 Bs   *3F9F Fr  c                 f    [         R                  " [        U 5      [        SS9R	                  S5      $ )NF)r   	allow_nanr   )r   r   r   r   r   )r  s    re   _to_json_bytesr,  R  s+    ::(-;%PWW rd   r{   r  c                 \   [        U R                  5         [        X5      R                  U 5      nS S S 5        [	        WR
                  [        5      (       d   e[        UR
                  5      n[        UUR                  UR                  UR                  5      nU$ ! , (       d  f       Nr= frh   )r   r~   rX   rV   rp   r{   r)   r,  ry   r|   r}   )r{   r  r   serialized_program
json_bytesr   s         re   rV   rV   X  s    
 
00@0O0O	P6

)$
% 	 
Q (99?KKKK 2 C CDJ!%%$$))	H O 
Q	Ps   B
B+c           	      (   [        U [        5      (       a   SU  S35       e[        R                  " U 5      [        :X  a  [        U R                  U5      $ [        R                  " U 5      [        R                  :X  a]  [        S 5      [        R                  " U 5      ;   a:  Uc  g [        R                  " U 5      n[        U5      S:X  d   e[        US   U5      $ [        U [        5      (       a  [        U [        5      (       a  [        U[        5      (       d   e[        U5      S:X  d   e[        [        UR!                  5       5      5      n[        [        UR#                  5       5      5      n[        U[        5      (       d   eU R$                  U   nU R&                  " S0 U[        XT5      0D6$ [(        R*                  " U 5      (       al  U " S0 UD6n[        R,                  " U 5      n[(        R.                  " U 5       H2  nUR0                  n	[        Xy   [3        Xi5      5      n
[5        XiU
5        M4     U$ [        U[6        5      (       aF  [        U5      S:X  a  U$ [        R                  " U 5      S   nU Vs/ s H  n[        X5      PM     sn$ [        U[        5      (       aH  [        R                  " U 5      S   nUR9                  5        VVs0 s H  u  pU[        X5      _M     snn$ U [:        :X  a  [;        U5      $ U$ s  snf s  snnf )NzUnresolved class type: 'z'.r    r   r"   r^   )rp   r   typing
get_originr   r   
__origin__r   r   get_argsr   
issubclassrU   r   r  iterr  r8  r   r   r  r'  get_type_hintsr  r  r|  setattrr  ri   r   )r   dataty_argsr!  _value
field_typer  
type_hintsr)  r  new_field_objd_typerf   v_typerk   rl   s                   re   r   r   m  sv   #s##G'?uB%GG#*!#..$77-$t*PS@T2T<//#&7|q   !'!*d33	C		:c6#:#:$%%%%4yA~~T$))+&'d4;;=)*%%%%%((/
zzLU$6z$JKLL		!	!#	&	&kDk**3/
##C(A66D.z/?ASTMC}- ) 
	D$		t9>K%a(7;<t!"6-t<<	D$		%a(=AZZ\J\TQ%f00\JJ	T{K = Ks   =L	LFr  r
  c                :   [        U R                  [        5      (       d   eU R                  R                  S5      n[        R
                  " U5      n[        [        U5      n[        U5      R                  UU R                  U R                  U R                  US9$ )Nr   r  )rp   r{   r   r   r   r   r   r)   rZ   r  r|   r}   r~   )r   r
  r  exported_program_strexported_program_dictserialized_exported_programs         re   r  r    s     h//7777#44;;GD JJ';<"4.# ''=>JJ##= K  rd   c                 6  ^ ^^^^^ S[         4S jmU4S jmUUU 4S jnU" TR                  5      n[        U5      [        TR                  5      :X  d   e0 mUU4S jnU4S jnT  H  nT" Xh5        M     U H  n	U	R                   H  n
T" Xj5        M     M      U H(  n	U	R                   H  nT" XxR
                  5        M     M*     U H  n
T" Xz5        M     U H  n	U	R                  R                  5         M     [        [        TR                  R                  5       [        R                  " S5      S95      n[        [        TR                  R                  5       [        R                  " S5      S95      n[        [        TR                  R                  5       [        R                  " S5      S95      n[        [        TR                   R                  5       [        R                  " S5      S95      n[        [        TR"                  R                  5       [        R                  " S5      S95      nSnU H  nUR                   H  nUR
                  nUR$                  S	:X  d  M!  ['        UR(                  R*                  R                  UR(                  R*                  R                  UR(                  R*                  T5      u  UR(                  l        nS
U 3UR(                  l        US-  nM     M     [/        T UUUUUUTR0                  US9	mTT4$ )Nr  c                 L   U R                   S:X  a  g U R                   S:X  a  U R                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S	:X  a  g U R                   S
:X  a  U R                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  U R
                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  U R                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  g U R                   S:X  a  U R                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  g [        SU  35      e)Nr  r6  rd  r   r  r   r  r  r  r8  r  r  r  r  r  r  r  r   r  r  r  r  r
  r<  r  z+Unknown input type to the ExportedProgram: )r   r6  rd  r8  r  r  r  r  r  r
  r<  rB  r  s    re   _get_argument*_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Srd   c                 n   > [        U[        5      (       d   e[        R                  " U T" U5      5        g rh   )rp   r#   r  tree_map)r)  r  rG  s     re   for_args%_canonicalize_graph.<locals>.for_args  s)    !X&&&&=+,rd   c                 p  >^ ^^^^^^^^ [          " S S5      5       n[        5       m0 m0 m/ m0 m/ nS[        [           4S jmT H  nUU4S jnT" XC5        M     [	        T 5       H5  u  mnUUU4S jnUR
                   H  nT" Xg5        M     U" / S5      TT'   M7     [	        T 5       H6  u  mnUUUUUU4S jn	UR                   H  nT" XR                  5        M     M8     UU4S	 jn
UUU4S
 jmT H  nT" X5        M     S[        4UUUU 4S jjnTR                  5        H   u  mnUR                  S:X  d  M  U" T5        M"     [        T5      S:  a  [        R                  " T5      u    nmT T   nUR
                   H  nT" X5        M     UR                  U5        TT;   d   eTT   R                   HI  nTU   nUR                  S:  d   eU=R                  S-  sl
        UR                  S:X  d  MA  U" U5        MK     TT   R                  R!                  5         [        T5      S:  a  M  U$ )Nc                   0    \ rS rSr% \\   \S'   \\S'   Srg)6_canonicalize_graph.<locals>.sort_nodes.<locals>.Edgesi  outsinsr^   N)r_   r`   ra   rb   r  r   r   rc   r^   rd   re   EdgesrO    s    s)OHrd   rR  r   c                    U c  g [        U [        5      (       a  U R                  $ [        U [        [        [
        45      (       a;  U R                  S:X  a  U R                  $ U R                  S;   a  g [        SU  35      e[        U [        5      (       aE  U R                  S:X  a  U R                  R                  $ U R                  S:X  a  g [        SU  35      e[        U [        5      (       a  U R                  $ [        SU  35      e)Nr  )r   r   r   Unknown argument type: r6  r  zUnknown optional tensor type: )rp   rN   r  rM   rG   rK   r   r  rB  r?   r6  r'   r  s    re   r  9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_name  s    y!^,,vvAAQRSS66Y&99$VV@@(+B1#)FGGA56666[(;;+++VVy((+I!)MNNA011vv$'>qc%BCCrd   c                 H   > T" U 5      =n(       a  TR                  U5        g g rh   )r  )r  r   r  graph_inputss     re   	add_input:_canonicalize_graph.<locals>.sort_nodes.<locals>.add_input  s%     #1# $$Q' $rd   c                 @   > T" U 5      =n(       a  UT;  d   eTTU'   g g rh   r^   )r  r   	def_tabler  rh  s     re   add_def8_canonicalize_graph.<locals>.sort_nodes.<locals>.add_def  s.     #1#I---#&IaL $rd   r   c                    > T" U 5      =n(       aR  UT;   a  g UT;  a	  UT;   d   eg TU   nTU   R                   R                  T5        TT   =R                  S-  sl        g g )Nr"   )rP  rF  rQ  )	r  r   srcr}   r[  edgesr  rW  rh  s	      re   add_edge9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_edge"  sk     #1#I~	) L000#A,C#JOO**3/#JNNa'N $rd   c                 R   > T" U 5      =n(       a  UT;  d   e[        T5      TU'   g g rh   )r   )r  r   r  ranks     re   add_rank9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_rank0  s0    QKq}$}d)Q  rd   c                 :   > T" U 5      nU(       a  UT;  a  TU   $ g)Nr  r^   )r  r   r}   r  rd  s     re   get_rank9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_rank5  s"    AQi'Awrd   rh  c                    > UU4S jnTU    nUR                    Vs/ s H   o3R                  U" UR                  5      4PM"     nn[        R                  " TUR
                  X@45        g s  snf )Nc                 *   >^ / mT" UU4S jU 5        T$ )Nc                 2   > TR                  T" U 5      5      $ rh   )rF  )r|  rh  rankss    re   <lambda>c_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks.<locals>.<lambda>B  s    5<<#<rd   r^   )r  rm  rK  rh  s    @re   	get_ranksQ_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks@  s    <a@rd   )r  r  rO  heapqheappushr	  )	rh  rp  r   r  	args_rank
candidatesrK  rh  r  s	        re   add_candidate>_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate?  sX    
 :D=A[[I[&&)AEE"23[IINN:Y'DE Js   'A)r"   )r   r  r   r   re  r  r  rO  r   ri   rQ  r   rr  heappoprF  rP  clear)r  rR  r  r  rX  r   r\  rs  r  ra  re  rv  r  r  ru  r[  r`  r  rh  rW  rh  rd  r}   rK  sorted_inputss   `             @@@@@@@@re   
sort_nodes'_canonicalize_graph.<locals>.sort_nodes  s   		 	 
	 "%$&	"$IK
!	D8C= 	D0 A( Y"  #5)IC'
 \\$ " r1E#J * #5)IC	( 	( [[55) ! * 	$
	 AX! 	Fs 	F 	F kkmFCuuzc" $ *o!j1IAq#:D\\% "JJt%<<c
$Kuuqy y
55A:!$' ( #JOO!!# *o! 
rd   c                   > U4S jnU c  g [        U [        5      (       a#  U" U R                  TR                  5      U l        g [        U [        5      (       a4  U R
                  S:X  a#  U" U R                  TR                  5      U l        g g [        U [        5      (       a4  U R
                  S:X  a#  U" U R                  TR                  5      U l        g g [        U [        5      (       a4  U R
                  S:X  a#  U" U R                  TR                  5      U l        g g [        U [        5      (       a#  U" U R                  TR                  5      U l        g [        SU  35      e)Nc                 r   > S[        T5       3nU T;  d   eUTU '   X;   d   eUR                  U 5      X'   U$ )Nr  )r   pop)r5  r8  new_name
name_tables      re   r  8_canonicalize_graph.<locals>.rename_def.<locals>._renamee  sN    3z?+,H:---#+Jx %%%%zz(3FOrd   r  rT  )rp   rN   r  r  rM   r   r  r  rK   r  rG   r  r'   r  rB  )r  r  rz  r  s     re   
rename_def'_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#!>??rd   c                 `  > U c  g [        U [        5      (       a,  TR                  U R                  U R                  5      U l        g [        U [        [
        45      (       a=  U R                  S:X  a,  TR                  U R                  U R                  5      U l        g g [        U [        5      (       a=  U R                  S:X  a,  TR                  U R                  U R                  5      U l        g g [        U [        5      (       a[  U R                  S:X  aJ  TR                  U R                  R                  U R                  R                  5      U R                  l        g g [        U [        5      (       a,  TR                  U R                  U R                  5      U l        g [        SU  35      e)Nr  r6  rT  )rp   rN   r^  r  rM   rK   r   r  rG   r?   r6  r'   rB  )r  r  s    re   replace_use(_canonicalize_graph.<locals>.replace_use  s-   9a((^^AFFAFF3AFN,<=>>vv"&NN199aii@	 #?++vv"&NN199aii@	 #122vv$#->>!++2B2BAKKDTDT#U  %,--^^AFFAFF3AF #:1#!>??rd   r   r  r  _gr"   )	r  r  r  r  r  r  r  r  r  )r#   r  r   r  r  rO  r[  ry  r   sortedr  ri   ro  
itemgetterr  r  r  r  r   _canonicalize_graphr  rz  r  r,   r  )rz  sorted_outputsrz  r}   r{  sorted_nodesr  r  r  r  rs  sorted_tensor_valuessorted_sym_int_valuessorted_sym_float_valuessorted_sym_bool_valuessorted_custom_obj_valuescounterr   r  r  rG  rK  r  s   ` ``                @@@re   r  r    s   4T 4Tn-un ekk*L|EKK 0000 "$J@6@&   AZ#   A[%%(      	

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

 ! %'wi.

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

This function canonicalizes an ExportedProgram by:

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

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

Returns:
    ExportedProgram: The canonicalized exported program.
r   r  c                     U R                   $ rh   )r  )r|  s    re   rn  canonicalize.<locals>.<lambda>  s    PQPUPUrd   r   c                 H   U u  nu  p#[        U[        5      (       d   eUR                  S:X  a  SS U4$ UR                  S:X  a  SUR                  R                  U4$ UR                  S:X  a  SUR
                  R                  U4$ UR                  S:X  a  SUR                  R                  U4$ UR                  S	:X  a  S
UR                  R                  U4$ UR                  S:X  a  SS U4$ UR                  S:X  a  SUR                  R                  U4$ [        SU 35      e)NrL     rO  r"   r   r    rS  r  rT     rV  r   rJ     Unknown input type: )rp   r0   r   rO  rN  r   rP  rS  rR  rT  r9  rJ  r  rB  )r  rh  _argrG  s       re   
rank_input canonicalize.<locals>.rank_input  s   \d$	****99$dC<YY+%dnn33S88YY("dkk--s22YY++d**??DDYY,&doo55s::YY'!dC<YY**d))..33 #7v!>??rd   c                    U u  nu  p#[        U[        5      (       d   eUR                  S:X  a  SS U4$ UR                  S:X  a  SS U4$ UR                  S:X  a  SUR                  R                  U4$ UR                  S:X  a  SUR
                  R                  U4$ UR                  S:X  a  S	S U4$ UR                  S
:X  a  SS U4$ UR                  S:X  a  SS U4$ [        SU 35      e)Nre  r  rf  rg  r"   rh  r  rj  r  rk  r    rV  r   Unknown output type: )rp   r@   r   rg  rP  rh  rN  rB  )r  rh  r  rG  s       re   rank_output!canonicalize.<locals>.rank_output
  s    \d$
++++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!?@@rd   c              3   *   #    U  H	  u  pUv   M     g 7frh   r^   rt   rh  r  s      re   rv   canonicalize.<locals>.<genexpr>#  s     *F:1:   r^   c              3   *   #    U  H	  u  pUv   M     g 7frh   r^   r  s      re   rv   r  +  s     (Evsr  c                 ,  > [        U [        5      (       d   eU R                  S:X  Ga&  U R                  R                  nUR                  S:X  a!  UR
                  nTUR                     Ul        g UR                  S:X  aP  UR                  nUR                  S:X  a  TUR                     Ul        g UR                  S:X  a  g [        SU 35      eUR                  S:X  aP  UR                  nUR                  S:X  a  TUR                     Ul        g UR                  S:X  a  g [        S	U 35      eUR                  S
;   a  g [        SU 35      eU R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a  g [        SU  35      e)NrL  r6  r8  r  r   Unknown sym_int type: r  r   Unknown sym_float type: )r  r   r   r   r  r<  r  rO  r   rS  rT  rV  rJ  )rp   r0   r   rL  rO  r6  r  r8  r  rB  r  rO  r   rS  rT  rV  )rG  rO  r   r   r)  t_custom_objtokreplace_tables          re   replace_input#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!>??rd   c                   > [        T	[        5      (       d   eT	R                  S:X  Ga&  T	R                  R                  nUR                  S:X  a!  UR
                  nTUR                     Ul        g UR                  S:X  aP  UR                  nUR                  S:X  a  TUR                     Ul        g UR                  S:X  a  g [        SU 35      eUR                  S:X  aP  UR                  nUR                  S:X  a  TUR                     Ul        g UR                  S:X  a  g [        S	U 35      eUR                  S
;   a  g [        SU 35      eT	R                  S:X  a+  T	R                  R                  nTUR                     Ul        g T	R                  S:X  a+  T	R                  R                  nTUR                     Ul        g T	R                  S:X  a+  T	R                  R                  nTUR                     Ul        g T	R                  S:X  aI  T	R                  nTUR                  R                     UR                  l        TUR                     Ul        g T	R                  S:X  aI  T	R                   nTUR                  R                     UR                  l        TUR                     Ul        g T	R                  S:X  a+  T	R"                  R                  nTUR                     Ul        g [        ST	 35      e)Nre  r6  r8  r  r   r  r  r   r  )r  r   r   r   r  r  rf  rg  rh  rj  rk  rV  r  )rp   r@   r   re  rO  r6  r  r8  r  rB  r  rf  rg  rh  rj  ri  rk  rV  )
r  rO  r   r   r)  gur  r  rG  s
           re   replace_output$canonicalize.<locals>.replace_outputh  sn   $
++++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!?@@rd   rw  )rz  r  r%  r  )!r  deepcopyr  r   r  r  ri   ro  r  r   r  r%  r  rz  r   r  rx  r  ry  r   r   r   r   re  r  r  r)   r.   r/   r  r  r  r  )rD  r}   r  r   r%  r  rz  r  r  
sorted_insrz  rx  sorted_outsr  ry  sorted_graphr  r  r  rG  s                     @@re   r  r    sa   , 
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 N"5u#L-5@n0Ad d  t   $ -!,/ 0
 $+((,,&& rd   c                       \ rS rSrSr\S\4S j5       r\S\4S j5       r\S\4S j5       r	\S\
R                  4S j5       rS	rg
)ExtensionHandleri  z.
Base class for handling extension operators.
r   c                 2    [        U R                   S35      e)Nz  namespace() must be implementedr  r  r   s    re   r  ExtensionHandler.namespace      !S]]O3S"TUUrd   c                 2    [        U R                   S35      eNz op_name() must be implementedr  r   ru   s     re   r  ExtensionHandler.to_op_name      !S]]O3Q"RSSrd   r  c                 2    [        U R                   S35      er  r  )r   r  s     re   r  ExtensionHandler.from_op_name  r  rd   c                 2    [        U R                   S35      e)Nz  op_schema() must be implementedr  r  s     re   r  ExtensionHandler.op_schema  r  rd   r^   N)r_   r`   ra   rb   __doc__classmethodr   r  r  r  rq   FunctionSchemar  rc   r^   rd   re   r  r    s     V# V V Ts T T T T T Ve22 V Vrd   r  op_typeextension_handlerc                    [        U[        5      (       d   SU S35       eU [        ;  d
   U  S35       e[        U [        5      (       d   eU R
                  R                  S5      (       d   U R
                  R                  S5      (       a   eUR                  5       [        ;  d   eU[        U '   U[        UR                  5       '   g)zJRegister custom de/serialization method for a node with non-standard type.zExpected ExtensionHandler, got rS  z is already registered.rq   builtinsN)	r5  r  r  rp   r   r`   rT  r  r   )r  r  s     re   register_extensionr    s    
 +  >	():(;1=>  11VgY>U3VV1gt$$$$%%g..((44  &&(0IIII'8G$?P/99;<rd   c                  <    [        [        R                  5       5      $ rh   )r   r  r  r^   rd   re   r  r    s    (--/00rd   r  r   rh   (  r  r  r   r  rr  r  r   r   r  loggingr   ro  r  r1  collectionsr   r   collections.abcr   r   
contextlibr   r   r	   enumr
   r   r   r   r   r   r   r   r   rq   torch.export.exported_programexportr{   rD  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   r  r!   r  r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   unionrU   __all__	getLoggerr_   r   r   r\   r   rm   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   r  contiguous_formatContiguousFormatchannels_lastChannelsLastchannels_last_3dChannelsLast3dpreserve_formatPreserveFormatr.  r  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truedivrq  anyry   r   r   r   r"  r   r   r   r   r?  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r   r  rW   rX   rY   rZ   JSONEncoderr   r   r,  rV   r   r  r  r  r  r  r  r  r  r   r^   rd   re   <module>r6     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  !	\ 	.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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*:%; ;< Ard   