
    piuR                       U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZmZ d dlmZmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZm Z m!Z! d dl"Z"d dl#Z#d dl$m%c m&Z' d dl(m)Z) d d	l*m+Z+ d d
l,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z5 d dl6m7Z7m8Z8 d dl9m:Z: d dl;m<Z<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZC ddlDmEZE ddlFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZz ddl{m|Z| g dZ} e	j                  e      Z G d de      Zdeeef   fdZe!e-ee#j                  ee#j                  ee#j                  e'j                  f   ZdZdZi e#j                  eij                  e#j                  eij                  e#j                  eij                   e#j"                  eij$                  e#j&                  eij(                  e#j*                  eij,                  e#j.                  eij0                  e#j2                  eij4                  e#j6                  eij8                  e#j:                  eij<                  e#j>                  eij@                  e#jB                  eijD                  e#j                  eijF                  e#jH                  eijJ                  e#jL                  eijN                  e#jP                  eijR                  e#jT                  eijV                  e#jX                  eijZ                  iZ ee      Ze#j`                  e\jb                  e#jd                  e\jf                  e#jh                  e\jj                  e#jl                  e\jn                  e#jp                  e\jr                  e#jt                  e\jt                  e#jv                  e\jx                  iZ ee      Ze#j~                  e^j                  e#j                  e^j                  e#j                  e^j                  e#j                  e^j                  iZ eeǫ      Zej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  e
j                  e#j                  ej                  ej                  ej                  ej                  ej                  ej                  e#j                  e#j                  e#j                  e#j                  e#j                  e#j                  ej                  ej                  hZ ed eD              rJ e G d  d!             Ze G d" d#             Z G d$ d%e      ZdeMd&e#j                  fd'Zd(eer   d&eed)f   fd*Zd+eer   d&eed)f   fd,Zd-eid&e#j                  fd.Zd/erd&efd0Zd1e!e#j                  e#j                  e#j                  e"j                  f   fd2Zd1e!ee#j                  f   d&erfd3Zd1e!ee#j                  f   d&epfd4Zd1e!ee#j                  f   d&elfd5Zd6e#j                  d&eufd7Zdae d8   ed9<   d:e-fd;Zd<ed=ed&e-fd>Zefd?e e   d@ed&efdAZdBe!eeef   eed)f   ef   fdCZdDe"j                  dEed&e e   fdFZdDe e   d&e"j                  fdGZdHe"j                   dIe=fdJZdKee"j                   e?f   d&eeehf   fdLZdM Ze G dN dO             Z G dP dQe      Ze G dR dSeT             Ze G dU dVeT             Ze G dW d8eT             Z	e G dX dYeT             Z
 G dZ d[ej                        Zd\ Zd]ed&efd^Zdefd_e'j                  d`e eeef      d@ed&efdaZdb Zdcedded&efdeZ	 dvdfdgd?edhe eeef      d&e'j                  fdiZd&eeQeeef   f   fdjZ	 dvdkeNdle ee      d&eNfdmZ G dn do      Zdpee   dqee   fdrZds Zi Zeee   ee   f   edt<   i Zeeee   f   edu<   y)w    N)
namedtupleOrderedDict)IterableIteratorSequence)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)
has_triton   )remove_proxy_from_state_dict   )4ArgumentArgumentKindBufferMutationSpecComplexValueConstantValueCustomObjArgumentDeviceExportedProgramGradientToParameterSpecGradientToUserInputSpecGraphGraphArgumentGraphModuleGraphSignature	InputSpecInputToBufferSpecInputToConstantInputSpecInputToCustomObjSpecInputTokenSpecInputToParameterSpecInputToTensorConstantSpecLayoutLossOutputSpecMemoryFormatModuleCallEntryModuleCallSignatureNamedArgumentNamedTupleDefNodeOptionalTensorArgument
OutputSpecOutputTokenSpecParameterMutationSpecRangeConstraint
ScalarTypeSCHEMA_VERSIONSchemaVersionSymBoolSymBoolArgumentSymExprSymExprHintSymFloatSymFloatArgumentSymIntSymIntArgumentTensorArgument
TensorMetaTokenArgumentTREESPEC_VERSIONUserInputMutationSpecUserInputSpecUserOutputSpec)_Union)	serializeGraphModuleSerializerExportedProgramSerializerGraphModuleDeserializerExportedProgramDeserializerc                       e Zd Zy)SerializeErrorN)__name__
__module____qualname__     _/opt/services/ai/voice_agent/venv/lib/python3.12/site-packages/torch/_export/serde/serialize.pyr`   r`   m   s    re   r`   dc                 j    | j                         D ci c]  \  }}|j                  | c}}S c c}}w N)itemsvalue)rg   kvs      rf   _reverse_maprn   q   s(    #$779-41aAGGQJ---s   /;c              #   d   K   | ](  }t        |t        j                  j                         * y wri   )
isinstancetorch_ops
OpOverload).0ops     rf   	<genexpr>rw      s!     Hz"ejj334H   .0c                   6    e Zd ZU eed<   eed<   eed<   eed<   y)SerializedArtifactexported_program
state_dict	constantsexample_inputsN)ra   rb   rc   bytes__annotations__rd   re   rf   rz   rz      s    re   rz   c                   6    e Zd ZU eed<   eed<   eed<   eed<   y)_SerializedProgramr{   r|   r}   r~   N)ra   rb   rc   r,   r   r   rd   re   rf   r   r      s    %%re   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)LazyMapz
    Dictionary class for deferred instantiation of node metadata values.
    Purpose is to avoid creation of symbolic-shape tensors before relevant shape guards are parsed.
    c                 0    i | _         t               | _        y ri   )mapset	evaluatedselfs    rf   __init__zLazyMap.__init__   s    re   c                 "    || j                   |<   y ri   )r   )r   rl   rm   s      rf   __setitem__zLazyMap.__setitem__   s    re   c                     | j                   |   }|| j                  v r|S | j                  j                  |        |       | j                   |<   | j                   |   S ri   )r   r   add)r   rl   outs      rf   __getitem__zLazyMap.__getitem__   sO    hhqkJ1exx{re   c                 6    | j                   j                         S ri   )r   __repr__r   s    rf   r   zLazyMap.__repr__   s    xx  ""re   N)ra   rb   rc   __doc__r   r   r   r   rd   re   rf   r   r      s    
#re   r   returnc                     | j                    t        j                  | j                        S t        j                  | j                  | j                         S )N)typer   index)r   rr   devicer   )rg   s    rf   deserialize_devicer      s7    ww||((<<QVV17733re   sizes.c                 z    | D ]%  }|j                   dk(  rJ d|j                            t        d | D              S )Nas_intOnly as_int is supported, got c              3   4   K   | ]  }|j                     y wri   r   )ru   sym_int_sizes     rf   rw   z#deserialize_size.<locals>.<genexpr>
  s     ?$$?   r   tuple)r   r   s     rf   deserialize_sizer     sP     
  H, 	
,\->->,?@	
,
 ????re   stridesc                 z    | D ]%  }|j                   dk(  rJ d|j                            t        d | D              S )Nr   r   c              3   4   K   | ]  }|j                     y wri   r   )ru   sym_int_strides     rf   rw   z%deserialize_stride.<locals>.<genexpr>  s     E>&&Er   r   )r   r   s     rf   deserialize_strider     sP    ! 
""h. 	
,^-@-@,AB	
.
 EWEEEre   stc                     t         |    S ri   )_SERIALIZE_TO_TORCH_DTYPE)r   s    rf   deserialize_scalar_typer     s    $R((re   offsetc                 `    | j                   dk(  sJ d| j                           | j                  S )Nr   r   )r   r   )r   s    rf   deserialize_storage_offsetr     s/    ;;("R&DV[[M$RR"==re   sc                     t        | t        j                  t        j                  t        j                  f      r| j
                  j                  } t        j                  j                  j                  |       S ri   )rq   rr   rP   rJ   rN   nodeexprsympyprintingreprsreprr   s    rf   _print_sympyr     sG    !ellEMM5>>BCFFKK>>$$Q''re   c                 v   t        | t        j                  t        j                  t
        f      rt        j                  |       rt        j                  t        |             S t        | t        j                  t        j                  f      sJ | j                  j                  (t        j                  t        t        |                   S t        j                  t        t        |       t        j                  | j                  j                                    S t        d|  dt        |        d      )Nr   as_exprhintz,SymInt should be either symbol or int, got `` of type ``)rq   rr   rP   r   Symbolintr   is_concrete_intcreater   r   rL   r   rM   r`   r   r   s    rf   serialize_sym_intr   $  s    !ellELL#67**1-==A//a%,,!=>>>vv{{"}}W\!_-EFF}}#$Q(//qvv{{C  :1#[a	QRS
 	
re   c                 v   t        | t        j                  t        j                  t
        f      rt        j                  |       rt        j                  t        |             S t        | t        j                  t        j                  f      sJ | j                  j                  (t        j                  t        t        |                   S t        j                  t        t        |       t        j                  | j                  j                                    S t        d|  dt        |        d      )Nas_floatr   r   z0SymFloat should be either symbol or float, got `r   r   )rq   rr   rN   r   r   floatr   is_concrete_floatr   r   r   rL   r   rM   r`   r   r   s    rf   serialize_sym_floatr   9  s    !ennellE:;,,Q/??E!H55a%..%,,!?@@@vv{{"w|A/GHH#$Q(//E  >qcTRSWIUVW
 	
re   c                 2   t        | t        j                  t        f      r]t	        j
                  |       rt        j                  t        |             S t        j                  t        t        |                   S t        d|  dt        |        d      )Nas_bool)expr_strr   z.SymBool should be either symbol or bool, got `r   r   )rq   rr   rJ   boolr   is_concrete_boolr   rL   r   r`   r   r   s    rf   serialize_sym_boolr   N  ss    !emmT*+++A.>>$q'22>>'<?*KLL<QC{4PQ7)STU
 	
re   tc                    t        t        | j                     | j                  D cg c]  }t	        |       c}| j
                  t        | j                  j                  | j                  j                        | j                         D cg c]  }t	        |       c}t	        | j                               t        | j                           S c c}w c c}w )z.
    Extract a TensorMeta describing `t`.
    r   )dtyper   requires_gradr   r   storage_offsetlayout)rS   _TORCH_TO_SERIALIZE_DTYPEr   shaper   r   r+   r   r   r   strider   _TORCH_TO_SERIALIZE_LAYOUTr   )r   r   s     rf   serialize_tensor_metar   Z  s     '0-.WW5 #5oo188==?/0xxz:!"1%:()9)9);<)!((3 5 ;s   C
Cr]   _CURRENT_DESERIALIZERfake_tensorc                     t        | t        j                  j                        }t	        |       }t        j                  t        |      t              j                  d      }t        ||ffS )Nclsutf-8)rq   rr   nn	Parameterr   jsondumps_dataclass_to_dictEnumEncoderencode_reconstruct_fake_tensor)r   is_parametertensor_metatensor_meta_bytess       rf   _reduce_fake_tensorr   l  sY    k588+=+=>L'4K

;'[fWo  $&7%FFFre   serialized_tensor_metar   c                     t        j                  | j                  d            }t        t        |      }t
        J d       t
        j                  |      }|rt        j                  j                  |      }|S )Nr   z)Need access to current deserializer state)
r   loadsdecode_dict_to_dataclassrS   r   deserialize_tensor_metarr   r   r   )r   r   json_tensor_metar   r   s        rf   r   r   u  sq     zz"8"?"?"HI$Z1ABK , 3, (??LKhh((5re   artifactpickle_protocolc                 V   | yt         t        j                  vsJ d       	 t        j                  t         t               t        j                         }t        j                  | ||       |j                         t        j                  t         = S # t        j                  t         = w xY w)Nre   z0Refusing to stomp on existing FakeTensor reducer)r   )
r   copyregdispatch_tablepickler   ioBytesIOrr   savegetvalue)r   r   buffers      rf   serialize_torch_artifactr    s     W333 :3/z#67 	

8V_E "":.G"":.s   AB B(
serializedc                     t        | t        t        f      r| S t        |       dk(  ri S t	        j
                  |       }|j                  d       t        j                  |d      }t        |t        t        f      sJ |S )Nr   F)weights_only)	rq   dictr   lenr   r  seekrr   load)r  r  r   s      rf   deserialize_torch_artifactr    sk     *tUm,
:!	ZZ
#F
KKNzz&u5Hh...Ore   valadjustc                 z   | t         j                  t        fv ry | t         j                   t         fv ry t        | t         j                        rt        |       S t        j                  dt        |       | |       |dk(  rt        j                  |       S |dk(  rt        j                  |       S t        d|       )NztExport constraints cannot be non-integer expressions. Found type %s, and value %s. We will attempt to %s this value.floorceilzGot invalid adjustment )r   oor   rq   Integerr   logwarningr   mathr  r  RuntimeError)r  r  s     rf   _sympy_int_to_intr    s    
uxx  
y6'""#u}}%3x KK	 	S	 zz#	6	yy~4VH=>>re   c                     | |S | t          t         fv r| S | t        j                  k(  rt         S | t        j                   k(  rt          S t        j                  |       S ri   )r   r  infr   r  )r  defaults     rf   _int_to_sympy_intr    sT    
{
w

dhh
txxiw==re   symsym_typec                 P    t        t        |       t        t        |         d        S ri   )r   strr
  r   )r  r  s     rf   _symbol_indexr"    s#    s3xJx013455re   range_constraintsc                     | j                         D ci c]C  \  }}t        |      t        t        |j                  d      t        |j
                  d            E c}}S c c}}w )Nr  r  )rj   r!  rF   r  lowerupper)r#  rl   rm   s      rf   serialize_range_constraintsr'    s_     &++-
 Aq	 	Aaggv.aggw/
 	
  s   AA c                     t        | t        j                  j                        r| j                  S t        |       t        v r!t        t        |          j                  |       S t        dt        |              )NzCannot find schema for )	rq   rr   rs   rt   _schemar   _serialization_registry	op_schemar  )targets    rf   _get_schema_from_targetr-    s^    &%**//0~~	f0	0&tF|4>>vFF
0f?
@@re   c                   @   e Zd ZU  ee      Zee   ed<    ee      Zee   ed<    ee      Z	ee
   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<   d	Zeed
<    ee      Zeeef   ed<   y)
GraphState)default_factoryinputsoutputsnodestensor_valuessym_int_valuessym_bool_valuessym_float_valuesFis_single_tensor_returncustom_obj_valuesN)ra   rb   rc   r
   listr1  r%   r   r2  r3  rA   r	  r4  r!  rS   r5  rP   r6  rJ   r7  rN   r8  r   r9  r*   rd   re   rf   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Qre   r/  c                       e Zd Zd Zy)Finalc                     |D ]+  }t        |t              st        d|j                   d       t        j                  | ||t        |            S )Nztype 'z ' is not an acceptable base type)rq   r<  	TypeErrorra   r   __new__r	  )metaclsnamebases	classdictbs        rf   r?  zFinal.__new__  sQ     	WA!U#&4T UVV	W ||GT5$y/BBre   N)ra   rb   rc   r?  rd   re   rf   r<  r<    s    Cre   r<  c                      e Zd Zdej                  deej                     fdZed        Z	de
j                  j                  fdZde
j                  j                  fdZdefd	Zde
j                  j                  fd
Zd Zdee
j                  j                     fdZdefdZde
j                  j                  deeef   fdZdej0                  defdZdee   fdZ	 d6dedee   fdZdee   fdZdefdZ defdZ!defdZ"defdZ#d6dee   de$fdZ%de&fdZ'de(fdZ)de*fdZ+de(fdZ,d ejZ                  de-fd!Z.d ej^                  de/fd"Z0d#ej                  de1fd$Z2d%ejf                  de$fd&Z4d' Z5d(ejl                  de6fd)Z7deej                     dee   fd*Z8de
j                  j                  dee$   fd+Z9de
j                  j                  dee$   fd,Z:d-ed.ede$fd/Z;de
j                  j                  dee&   fd0Z<d1e
j                  jz                  de>fd2Z?d3eeef   fd4Z@d1e
j                  jz                  de=fd5ZAy)7r[   graph_signaturemodule_call_graphc                 h    t               | _        || _        || _        i | _        i | _        i | _        y ri   )r/  graph_staterF  rG  custom_objsduplicate_getitem_nodestreespec_namedtuple_fields)r   rF  rG  s      rf   r   zGraphModuleSerializer.__init__  s6    
 &<.!2=?79$DF're   c              #   r   K   | j                   }t               | _         	 d  || _         y # || _         w xY wwri   )rI  r/  r   saveds     rf   save_graph_statez&GraphModuleSerializer.save_graph_state  s3       %<	%$DuDs   7+ 7	47r   c           
          |j                   dk(  sJ |j                  d   }t        j                  d|j                  |       t        |t        j                        r2t        j                  | j                  |j                  |            }nLt        |t        j                        r2t        j                  | j                  |j                  |            }n t        |t        j                        rt        d      t        |t        t         t"        t$        t'        d       f      r| j)                  |      }nt        |t*        j,                        rj|j.                  }t        j                  t-        |j                  |            }| j1                  |      | j2                  j4                  |j                  <   nt        d	|j                  d          | j2                  j6                  j9                  |       y )
Nplaceholderr  z[handle_placeholder] %s: %s	as_tensor
as_sym_intz,SymFloat graph input is not implemented yet.rA  	class_fqnas_custom_objz Unimplemented graph input type: )rv   metar  debugrA  rq   rr   Tensorr%   r   serialize_tensor_outputrP   serialize_sym_int_outputrN   AssertionErrorr   r   r!  r   r   serialize_inputepr*   rX  serialize_script_obj_metarI  r9  r1  append)r   r   r  graph_inputrX  s        rf   handle_placeholderz(GraphModuleSerializer.handle_placeholder  sv   ww-'''ii		/C@c5<<("//66tyy#FK U\\*"//88CHK U^^, !OPPc4eT$Z@A..s3KR112I"///TYY)TK ..s3 ..tyy9 !#CDIIeDTCU!VWW&&{3re   c                    |j                   dk(  sJ t        |j                        dk(  sJ d       |j                  d   }t        j	                  d|j
                  |       t        |t        j                  j                        r3d| j                  _        | j                  |      g| j                  _        y t        |t        t        f      sJ |D cg c]  }| j                  |       c}| j                  _        y c c}w )Noutputr$   z"FX.Node's args should have one argr   z[handle_output] %s: %sT)rv   r
  argsr  r\  rA  rq   rr   fxrA   rI  r8  ra  r2  r   r:  )r   r   	node_argsargs       rf   handle_outputz#GraphModuleSerializer.handle_output4  s    ww("""499~"H$HH"IIaL			*DIIyAi/7;D4(,(<(<Y(G'HD$i%777MV'Wc(<(<S(A'WD$'Ws   C?r   c                     t        |t              r|S |j                  j                  d      r-|j                  j	                  dd      }| d|j
                   S |j                   d|j
                   S )Nz
torch._opsz	torch.ops.)rq   r!  rb   
startswithreplacera   )r   r,  modules      rf   serialize_operatorz(GraphModuleSerializer.serialize_operatorA  sr    fc"M)),7 &&..|[IFXQv/00''(&//):;;re   c           	          |j                   dk(  sJ |j                  j                  d      }t        j	                  d|j
                  |j                  |j                  |j                  |       |j                  t        j                  u ry |j                  t        v s;|t        |t        j                  t        j                  t        j                   f      rt#        |j                        dk(  sJ t%         j'                  |j                         j)                  |j                  |j                         j+                  |j
                  |      g j-                  |            }nt        |j                  t        j.                  j0                        rwt%         j'                  |j                         j3                  |j                  |j                  |j                         j5                  |       j-                  |            }n=t        |j                  t        j.                  j6                        rdt8        fd}|j                  t        j:                  j<                  u rvt?        |j                        }|j                  d   j
                  }tA        |jB                  jD                  |      sJ tG        |jB                  jD                  |      }|jH                  |d<   d |d<   g }|d	   t        |d	   tJ              ry|d	   D ]l  }	t        |	t        jL                  j$                        r5t        |	j                  j                  dd       tN        jP                        r\|jS                  |	       n ||d	<    fd
}
t%         j'                  |j                         jU                  ||j                         |
|       j-                  |      d      }ng|j                  t        j:                  jV                  jX                  u rt[               sJ d       ddl.m/} |j                  d   }t        |t`              sJ |jc                         }g }t        |j                  d   td              sJ t        j:                  jV                  jf                  ji                  |j                  d         }t        ||      rct#        |jj                        dk(  sJ |jj                  d   jl                  }|jj                  d   jn                  dk(  sJ d       |jp                  }nd}ts               }|jt                  D ]*  }|jv                  s|jy                  |j
                         , d}d}d}t        |j                  d   t`              sJ |j                  d   j{                         D ]5  \  }}||v rd}|rJ d       ||v r|jS                  |       ||fz  }|dz  }7 t        |j                  d   t>              sJ |jp                  j|                  |j                  d   d   ||d}t%         j'                  |j                         jU                  ||       j                  |       j-                  |       ||            }nt%         j'                  |j                         jU                  |j                  |j                         j                  |       j-                  |       ||            }nCt        |j                        t        v rt        |j                        t        v sJ t        |j                         d       t        t        |j                           }|j                         }|j                  |j                        }t        |t              rt        |t              sJ d|vrd|vsJ t%        d| d|  j3                  |j                  |j                  |j                         j5                  |       j-                  |            }nt        d|j                   d       j                  j                  jS                  |       y )Ncall_functionr  z-[handle_call_function] %s: %s(%s, {%s}) -> %sr   )r,  r1  r2  metadatar   c                     t        | j                  t        j                  j                        sJ | j
                  j                  dd       }|d uxr t        |t        j                        S )Nr  )rq   r,  rr   rs   HigherOrderOperatorr[  getr]  )r   meta_vals     rf   _is_hop_single_tensor_returnzPGraphModuleSerializer.handle_call_function.<locals>._is_hop_single_tensor_returnq  sO    !$++uzz/M/MNNN99==5t+R
8U\\0RRre   r$   r"   c                     | j                   j                  dd       }g }t        |      D ]8  \  }}j                  | |      }|j	                  j                  ||             : t        j                  |      gS )Nr  
as_tensors)r[  ry  	enumerate_output_node_name_at_indexrd  r^  r%   r   )r   rz  tensor_argsidxr[  rA  r   s         rf   serialize_tensor_list_outputzPGraphModuleSerializer.handle_call_function.<locals>.serialize_tensor_list_output  sw    #yy}}UD9H"$K%.x%8 U	T#>>tSI#**4+G+Gd+STU %OO{CDDre   F)r,  r1  r2  rv  is_hop_single_tensor_returnz+triton required to serialize triton kernels)	Autotuner
kernel_idxz)serialization only supports num_ctas == 1   rd   kwargsTz/non-constexpr args found after constexpr arg(s)grid)rA  r  output_indices	num_warpsz* is not supported in export serialization.:#zSerializing z is not supported)Hrv   r[  ry  r  r\  rA  r,  ri  r  operatorgetitem_SYM_OPSrq   rr   rP   rJ   rN   r
  rA   rs  serialize_sym_op_inputsserialize_outputserialize_metadatars   rt   serialize_inputsserialize_outputsrx  r   _higher_order_opsaoti_call_delegater:  hasattrgraphowning_modulegetattr	aoti_pathr   rj  rb  r*   rd  serialize_hoo_inputstriton_kernel_wrap triton_kernel_wrapper_functionalr!   triton.runtime.autotunerr  r	  keysr   kernel_side_table
get_kernelconfigsr  num_ctasfnr   paramsis_constexprr   rj   ra   serialize_hoo_outputsr   r*  	namespace
to_op_namer!  r`   rI  r3  )r   r   rz  ex_noder{  serializable_argslowered_module_namelowered_moduleserializable_weight_nodesweight_noder  r  output_keysr  kernelr  constexpr_keyspfound_constexprargs_newirl   rm   
kwargs_newhandlerr  op_names   `                          rf   handle_call_functionz*GraphModuleSerializer.handle_call_functionL  s0   ww/)))99=='		;IIKKIIKK	
 ;;(***;;(" 8ellEMM5>>%RSt{{#q(((..t{{;33DKKK..tyy(CD006	G UZZ%:%:;..t{{;,,T[[$))T[[Q..t4006G UZZ%C%CDSd S {{e55HHH$(O! ,099Q<+<+<#tzz779LMMM!()A)ACV!W'5'?'?!!$ (,!!$,.)$Q'3
%a((9 (9'; F &k588==Aj',,00=r?S?SG %188EF ,E%a(E 224;;?445FT8>!44T:05 **==^^_ "|R%RR|>99U+!(D111&mmo!#!$++l";SAAA00CCUU``KK- fi0v~~.!333 &q 1 ; ;I!>>!,55: C: $YYF !I!$ 3A~~&**16623 #(!$++h"7>>> KK1779 DAq N**. . I. K'&--a0$HFA" "$++f"5t<<<"II.. KK/2&4!*	
 224;;?44XzJ 66t<!44T:0LT0R 224;;?44TYYL 66t<!44T:0LT0R $++"99$(?? $%%OP? .d4;;.?@G))+I((5Gi-*Wc2JJJi'Cw,>>>9+Qwi0,,T[[$))T[[Q..t4006	G !<}<M!NOO%%g.re   c                 D    t         j                  d|j                         y )Nz[handle_get_attr] %s)r  r\  rA  )r   r   s     rf   handle_get_attrz%GraphModuleSerializer.handle_get_attr  s    		($))4re   c                     d }|j                   D ]c  }|j                  t        j                  u s
J | d       ||j                  d   k(  s<||}A|j
                  | j                  |j
                  <   e |S )Nz is not a getitem noder$   )usersr,  r  r  ri  rA  rK  )r   r   r   	user_nodeusers        rf   _output_node_at_indexz+GraphModuleSerializer._output_node_at_index
  s    	JJ 	MD;;("2"22Stf<R4SS2		!$$ $I ?HnnD00;	M re   c                 d    | j                  ||      }||j                   d| S |j                  S )N_unused_)r  rA  )r   r   r   r  s       rf   r  z0GraphModuleSerializer._output_node_name_at_index  s9    ..tU;	ii[00>>!re   c           	      0   i }|j                   j                  d      x}r||d<   |j                   j                  d      x}rHd }|j                         D cg c]  \  }}| d ||        }}}t        j	                  |      |d<   |j                   j                  d      x}	rA|	D 
cg c]  }
|
d    d| j                  |
d            }}
t        j	                  |      |d<   |j                   j                  d      x}r!t        j	                  t        |            |d<   |j                   j                  d	      x}r	 t        j                  |      |d	<   |S |S c c}}w c c}
w # t        $ r!}t        d
|j                   d|       |d }~ww xY w)Nstack_tracenn_module_stackc                     t        | t              rt        |       dk(  sJ | \  }}t        |t              sJ t        |t              sJ |dz   |z   S )Nr"   ,)rq   r   r
  r!  )r  pathtys      rf   export_nn_module_stackzHGraphModuleSerializer.serialize_metadata.<locals>.export_nn_module_stack&  sS    !#u-#c(a-??b!$,,,!"c***czB&re   r  source_fn_stackr   r$   torch_fncustomz-Failed to serialize custom metadata for node z with error )r[  ry  rj   ST_DELIMITERjoinrs  r:  r   r   	Exceptionr`   rA  )r   r   retr  r  r  rl   rm   nn_module_listsource_fn_st	source_fnsource_fn_listr  r  es                  rf   r  z(GraphModuleSerializer.serialize_metadata  s   ))--66;6!,C"iimm,=>>?>' @O?T?T?V7;q!1#Q-a012N  &2%6%6~%FC!"99==):;;<; ". Q<.$"9"9)A,"G!HIN  &2%6%6~%FC!"yy}}Z0080*//X?C
OYY]]8,,6, $

6 2H 
s
/  $CDII;l[\Z]^s$   E +#E&E+ +	F4FFscript_obj_metac                 p    t         j                  d|       t        |j                  |j                        S )Nz[serialize_script_obj_meta] %srW  )r  r\  r*   rA  rX  r   r  s     rf   rc  z/GraphModuleSerializer.serialize_script_obj_metaI  s2     			2OD  %%%//
 	
re   c           	         t        |t        j                  j                        r.|j                  j
                  D cg c]  }|j                   }}n@|t        v sJ t        t        j                  |      j                  j                               }g }t        ||      D ]?  \  }}|j                  t        || j!                  |      t"        j$                               A |S c c}w )NrA  rl  kind)rq   rr   rs   rt   r)  	argumentsrA  r  r:  inspect	signature
parametersr  ziprd  r?   ra  r&   
POSITIONAL)r   rv   ri  rl  
args_namesserialized_args	args_names          rf   r  z-GraphModuleSerializer.serialize_sym_op_inputsR  s    b%**//0.0jj.B.BCs#((CJC>!>g//3>>CCEFJ!*d3 	NIs""",,S1%00	  Ds   C%Nr,  c           
         d }g }t        |t        j                  j                  j                        r|d   }|d   }|j                  ||      }n=t        |t        j                  j                  gt                     sJ t        |      }|J |xs i }t        |j                        D ]  \  }}	|	j                  |v r]|j                  t        |	j                  | j                  ||	j                     |	j                         t"        j$                               q|	j&                  sa|t)        |      k  rS|j                  t        |	j                  | j                  ||   |	j                         t"        j*                               ތ |S )Nr   r$   r  )rq   rr   r  	torchbindCallTorchBindschemars   rt   _registered_extension_typesr-  r  r  rA  rd  r?   ra  r   r&   KEYWORD
kwarg_onlyr
  r  )
r   r,  ri  r  r  r  objmethodr  
schema_args
             rf   r  z&GraphModuleSerializer.serialize_inputsc  sl    fe55??MMNq'C!WF]]3/F..O1L1NO   -V4F!!!2&v'7'78 	MAz&(&&!'__ 00":??3Z__ *11  **q3t9}&&!'__ 00a*//J)44 -	0 re   c                 B   |D cg c]-  }t        d| j                  |      t        j                        / }}|j	                  |j                         D cg c]0  \  }}t        || j                  |      t        j                        2 c}}       |S c c}w c c}}w )zM
        For serializing HOO inputs since HOOs do not have a schema.
         r  )r?   ra  r&   r  extendrj   r  )r   ri  r  ar1  rA  s         rf   r  z*GraphModuleSerializer.serialize_hoo_inputs  s     	
  T11!4<;R;R
 
 	  &||~ D! ,,Q/%--		
 !
s   2B5B
c                 \    t        |      t        u xs t        |t        j                        S ri   )r   r   rq   rr   rP   r   rl  s     rf   is_inductor_sym_int_argz-GraphModuleSerializer.is_inductor_sym_int_arg  s#    
 CyC@:c5<<#@@re   c                     t        |      t        u xsH t        |t        j                  j
                        xr" |j                  | j                  j                  v S ri   )	r   r   rq   rr   rj  rA   rA  rI  r5  r  s     rf   is_sym_int_argz$GraphModuleSerializer.is_sym_int_arg  sG    CyC 
sEHHMM* <D,,;;;	
re   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S ri   )rq   r   rr   rj  rA   rA  rI  r7  r  s     rf   is_sym_float_argz&GraphModuleSerializer.is_sym_float_arg  sE    #u% 
sEHHMM* >D,,===	
re   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S ri   )rq   r   rr   rj  rA   rA  rI  r6  r  s     rf   is_sym_bool_argz%GraphModuleSerializer.is_sym_bool_arg  sE    #t$ 
sEHHMM* =D,,<<<	
re   arg_typec           
          dd l mc m} |j                  |j                  ft        |t        j                  j                        r*|j                  dk(  rgt        |j                  t              sJ t        |j                  j                  |j                        }t        |t        j                        rt!        d      t        |t        j                  j"                        rU j%                         5   j'                  |      }d d d        t)        j*                  t-        |j                              S t/        |      j0                  dk(  rGt        |dd       }t        |dd       }|J d	       |J d
       t)        j*                  | d|       S t!        d|j                   dt/        |              j3                  |      r4t)        j*                  t5        j*                  |j6                              S  j9                  |      r4t)        j*                  t;        j*                  |j6                              S  j=                  |      r4t)        j*                  t?        j*                  |j6                              S t        |j@                  d   tB        jD                        rBt)        j*                  tE        |j6                  |j@                  d   jF                              S |j6                   jH                  v r9 jH                  |j6                     }t)        j*                  tK        |            S t)        j*                  tK        |j6                              S t        |      r9|jM                         }	|	J d       t)        j*                  tK        |	            S t        ||jN                        rv|jM                         }	|	J d       |jQ                         }
|
jS                         jU                         }|
 jV                  |	<   t)        j*                  tE        |	|            S t        |t        jX                        r3t)        j*                  t5        j*                  t        |                  S t        |t        jZ                        r3t)        j*                  t;        j*                  t        |                  S t/        |      t\        u rt)        j*                  |      S t/        |      t        u rt)        j*                  |      S t/        |      t^        u rt)        j*                  |      S t/        |      t`        u rt)        j*                  |      S t/        |      tb        u r5t)        j*                  te        |jf                  |jh                              S |t)        j*                  d      S t        |tj        tl        f      r#to        |      dk(  r|t        |t        jp                        r|js                         }t        |t        jt                        sJ |js                         }t        |t        jp                        r|js                         }t        |t        jv                        rt)        j*                  g        S t        |t        jx                        rt)        j*                  g !      S t        |t        jz                        rt)        j*                  g "      S t        |t        j|                        rt)        j*                  g #      S t        |t        j~                        rt)        j*                  g $      S t!        d%| d&      t        j                  d'       t)        j*                  g $      S t        d( |D              rt)        j*                  tk        |             S t        d) |D              rt)        j*                  tk        |      !      S t        d* |D              rt)        j*                  tk        |      "      S t        d+ |D              rt)        j*                  tk        |      #      S t         fd,|D              rg }|D ]  }t        |t        jX                        r/|j                  t5        j*                  t        |                   Lt/        |      t^        u s^|j                  t5        j*                  |              t)        j*                  |-      S t        d. |D              rAt)        j*                  |D cg c]!  }t;        j*                  t        |            # c}/      S t         fd0|D              rg }|D ]  }t        |t        j                  j                        r0|j                  t5        j*                  |j6                               Wt/        |      t^        u si|j                  t5        j*                  |              t)        j*                  |-      S t         fd1|D              rg }|D ]  }t        |t        j                  j                        r0|j                  t;        j*                  |j6                               Wt        |t`              sh|j                  t;        j*                  |              t)        j*                  |/      S t         fd2|D              rg }|D ]  }t        |t        j                  j                        r0|j                  t?        j*                  |j6                               Wt        |t\              sh|j                  t?        j*                  |              t)        j*                  |3      S t        d4 |D              r^g }|D ]A  }|j                  dk(  rt!        d      |j                  tK        |j6                               C t)        j*                  |$      S t        d5 |D              r,d6 }t)        j*                  tk        t        ||            7      S t        fd8|D              r<t)        j*                  |D cg c]  }tK        |jM                                c}$      S t        fd9|D              r.fd:}t)        j*                  tk        t        ||            7      S t!        d;|D cg c]  }t/        |       c}       t        |t        j                        rt)        j*                  t        |   <      S t        |t        j                        r5t)        j*                  t        |j.                  |j                  =      >      S t        |t        j                        rt)        j*                  t        |   ?      S t        |t        j                        rt)        j*                  t        |   @      S t        |t        j                  j                        r|j                  dA      r|j                  dB      st!        dC| dD      dEto         jV                         }| jV                  |<   |jS                         jU                         }t)        j*                  tE        ||            S t        |t        j                  j                  t        j                  j                  f      r%t)        j*                   j                  |      F      S t!        dGt/        |       dH|       # 1 sw Y   5xY wc c}w c c}w c c}w )INr   get_attrz?getattr nodes containing tensors should not appear in the graph)rA  r  )as_graphLoweredBackendModulemodule_name
backend_idzmodule_name should not be Nonezbackend_id should not be None-	as_stringzUnsupported getattr attribute z with type: as_namerU  as_sym_floatas_sym_boolr  rW  rY  rA  rS  zBuffer must have valid namer   r   r   )realimag)
as_complexTas_none)as_bools)as_ints)	as_floats)
as_stringsr}  zEmpty list with type z nyi.zUnsure how to serialize the given empty list, as we don't know what is the type of this argument. Serializing it as a tensor list by default.c              3   >   K   | ]  }t        |      t        u   y wri   )r   r   ru   r  s     rf   rw   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>M  s     0q47d?0   c              3   >   K   | ]  }t        |      t        u   y wri   )r   r   r  s     rf   rw   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>O       1T!W^1r  c              3   >   K   | ]  }t        |      t        u   y wri   )r   r   r  s     rf   rw   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>Q  s     3!T!W%3r  c              3   >   K   | ]  }t        |      t        u   y wri   )r   r!  r  s     rf   rw   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>S  r  r  c              3   @   K   | ]  }j                  |        y wri   )r  ru   r  r   s     rf   rw   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>U  s     BT11!4B   )as_sym_intsc              3   P   K   | ]  }t        |t        j                           y wri   )rq   rr   rN   r  s     rf   rw   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>`  s     @qZ5>>2@s   $&)as_sym_floatsc              3   @   K   | ]  }j                  |        y wri   )r  r"  s     rf   rw   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>d  s     9T((+9r#  c              3   @   K   | ]  }j                  |        y wri   )r  r"  s     rf   rw   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>m  s     ;!T**1-;r#  c              3   @   K   | ]  }j                  |        y wri   )r  r"  s     rf   rw   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>v  s     :T))!,:r#  )as_sym_boolsc              3   d   K   | ](  }t        |t        j                  j                         * y wri   )rq   rr   rj  rA   r  s     rf   rw   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     ?aZ588==1?rx   c              3   z   K   | ]3  }t        |t        j                  j                  t	        d       f       5 y wri   )rq   rr   rj  rA   r   r  s     rf   rw   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s(     MAZEHHMM4:#>?Ms   9;c                     | t        j                  d      S t        | t        j                  j
                        r*t        j                  t        | j                              S t        d|        NTr  r  rS  z!Unsupported list/tuple argument: )	rB   r   rq   rr   rj  rA   rR   rA  r`   r  s    rf   serialize_optional_tensor_argszMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_args  s`    y5<<TJJ#Auxx}}55<<&4!&&&A   -/PQRPS-TUUre   )as_optional_tensorsc              3   6   K   | ]  }t        |        y wri   )rq   ru   r  inductor_tensor_bufferss     rf   rw   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     IZ#:;Is   c              3   R   K   | ]  }t        |g t        d                y wri   )rq   r   r3  s     rf   rw   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s-      JK
1D 7DdDEs   $'c                     | t        j                  d      S t        |       r.t        j                  t        | j	                                     S t        d|        r.  )rB   r   rq   rR   get_namer`   )r  r4  s    rf   r0  zMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_args  s\    y5<<TJJ#A'>?5<<&4!**,&G   -/PQRPS-TUUre   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 )Utorch._inductor.ir	_inductorirBufferReinterpretViewrq   rr   rj  rA   rv   r,  r!  r  r  r  r]  r`   r1   rP  serialize_graphr%   r   r0   r   ra   r  rQ   rA  r  rO   r  rK   r[  rb  r*   rX  rK  rR   r7  TorchBindObjectget_real_obj_typequalified_namerJ  rP   rN   r   r   r   complexr(   r  r  r:  r   r
  OptionalTypegetElementTypeListTypeBoolTypeIntType	FloatType
StringType
TensorTyper  r  allrd  r   r   r   r   r+   r   memory_format!_TORCH_TO_SERIALIZE_MEMORY_FORMATr   r   _CScriptObject_has_methodrs   rt   rx  rs  )r   rl  r   inductor_irattrr  r  r  
dedup_namearg_namearg_valrX  	elem_typevaluesr  r  r0  custom_obj_namer4  s   `                 @rf   ra  z%GraphModuleSerializer.serialize_input  s   00 ''#

 c588==)vv#!#**c222syy66

CdELL1(Y   ehh&:&:;..0 ; $ 4 4T :;#??!.CJJe!L  $Z((,BB #*$t"DK!(|T!BJ&2T4TT2%1R3RR1#??}Aj\5RSS(8LQUVZQ[P\]  $$S)-44SXXF  &&s+!1!8!8!J  %%c* / 6 6sxx H  CHHUOR-A-AB"3 XX%1J1J# 
 T999!99#((C
Z1PQQSXX1NOO45
 ||~H'F)FF'??^-JKK[889 ||~H'F)FF'&&(G668I)0DX&??1B8Y1WXXU\\*
 ??n.C.CCPSH.UVVU^^,
 ??-44SXF  #Y$??3//#Y#??S11#Y#??#..#Y%??C00#Y'!??'SXXCHHE  [??400dE]+3x1}'!(E,>,>?#+#:#:#<%h??? ( 7 7 9I!)U-?-?@$-$<$<$>	!)U^^<';;#Iu}}='r::#Iu?'<<#Iu/?/?@'"==#Iu/?/?@'"== -/DYKu-UVV KKF
 $??b990C00S	::1S11tCy993s33c;;1S11$s)<<BcBB  GA!!U\\2n&;&;CF&KLaCn&;&;1&EF	G
  6::@C@@TW"Xq#3#:#:3q6#J"X  9S99 GA!!UXX]]3n&;&;AFF&KLaCn&;&;1&EF	G
  6::;s;; KA!!UXX]]3&6&=&=aff&MN#Au-&6&=&=q&IJ	K
  V<<:c:: IA!!UXX]]3o&<&<QVV&LM#At,o&<&<Q&GH	I
  F;;?3??	 BAttz),]  $$^%@AB  )<<MMMV  (,S1OQT-U(V  ISIIKNOaAJJL AO   OR V  (,S1OQT-U(V  %<s=S!d1g=S<TU  U[[)??2KC2PQQU\\*??V-STTU001??!B3!G  U\\*??-G-LMMUXX223/OON3$7u => >  !-S1A1A-B,CDO03D_-		224I??/K  ejj33UZZ5S5STU??t/F/Fs/KLL -d3i[8NxjY }; ;\ #Yr  P* >Ts   8|=&}
!}7}
=}c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        |      S )Nr  )rI  r4  r   rR   r   rA  rz  s      rf   r^  z-GraphModuleSerializer.serialize_tensor_output  sB    4++99999/DX/N&&t,4((re   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S Nr
  )rI  r5  r   rQ   r   rb  s      rf   r_  z.GraphModuleSerializer.serialize_sym_int_output  sH    4++:::::0A(0K''-$$T22re   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S rd  )rI  r7  r   rO   r   rb  s      rf   serialize_sym_float_outputz0GraphModuleSerializer.serialize_sym_float_output  sH    4++<<<<<2Eh2O))$/&&t44re   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S rd  )rI  r6  r   rK   r   rb  s      rf   serialize_sym_bool_outputz/GraphModuleSerializer.serialize_sym_bool_output  sH    4++;;;;;1CH1M((.%%d33re   specc                 t   t         j                  d|       |j                  t        j                  j
                  k(  r$t        |j                  t        j                        rt        |j                  j                        t        u r,t        j                  |j                  j                        }n@t        |j                  j                        t        u r+t        j                  |j                  j                        }nt        |j                  j                        t        u r+t        j                  |j                  j                        }nt        |j                  j                        t         u r+t        j                  |j                  j                        }nP|j                  j                  t        j                  d      }n#t#        d|j                  j                   d	      t%        j                  t'        |j                  j(                  |
            S t%        j                  t+        | j-                  |j                                    S |j                  t        j                  j.                  k(  r}|j0                  J t        |j                  t        j2                        sJ t%        j                  t5        t3        |j                  j(                        |j0                              S |j                  t        j                  j6                  k(  r|j0                  J t        |j                  t        j2                        sJ |j8                  J t%        j                  t;        t3        |j                  j(                        |j0                  |j8                              S |j                  t        j                  j<                  k(  r}|j0                  J t        |j                  t        j2                        sJ t%        j                  t?        t3        |j                  j(                        |j0                              S |j                  t        j                  j@                  k(  r|j0                  J t        |j                  t        jB                        sJ t%        j                  tE        tC        |j                  j(                  |j                  jF                        |j0                              S |j                  t        j                  jH                  k(  rdt        |j                  t        jJ                        sJ t%        j                  tM        tK        |j                  j(                                    S tO        d|       )Nz[serialize_input_spec] %sr   r   r  r   Tr  zUnhandled constant input z to serializerA  rk   )constant_inputrl  )
user_inputr  rl  parameter_name)	parameter)rl  buffer_name
persistent)r  )rl  tensor_constant_name)tensor_constantrW  )rl  r`  )
custom_objtokenUnknown argument kind: )(r  r\  r  rb  	InputKind
USER_INPUTrq   rl  ConstantArgumentr   rk   r   r)   r   r   r!  r   r`   r3   r5   rA  rW   serialize_argument_spec	PARAMETERr,  rR   r8   BUFFERrs  r4   CONSTANT_TENSORr9   
CUSTOM_OBJr*   r6   rX  TOKENrT   r7   r`  )r   ri  constant_specs      rf   serialize_input_specz*GraphModuleSerializer.serialize_input_spec  s   		-t499///$((B$7$78'3.$1$8$8$OM$((..)T1$1$8$8$PM$((..)S0$1$8$8488>>$RM$((..)U2$1$8$8$((..$QMXX^^+$1$8$8$FM(3DHHNN3C=Q  !''#;!XX]]-$  !'',1M1Mdhh1WX  YY",,000;;***dhh(9(9:::##.&DHHMM:#';;  YY",,---;;***dhh(9(9:::??...##(&DHHMM: $#  YY",,666;;***dhh(9(9:::## 9&DHHMM:)-!  YY",,111;;***dhh(<(<===##/)!XX]]dhh6H6H %)KK	  YY",,,,,dhh(8(8999##$%488==9  !#:4&!ABBre   c                 	   t         j                  d|       |j                  t        j                  j
                  k(  r9t        j                  t        | j                  |j                                    S |j                  t        j                  j                  k(  rdt        |j                  t        j                        sJ t        j                  t        t        |j                  j                                    S |j                  t        j                  j                   k(  r}|j"                  J t        |j                  t        j                        sJ t        j                  t%        t        |j                  j                        |j"                              S |j                  t        j                  j&                  k(  r}|j"                  J t        |j                  t        j                        sJ t        j                  t)        t        |j                  j                        |j"                        	      S |j                  t        j                  j*                  k(  r}|j"                  J t        |j                  t        j                        sJ t        j                  t-        t        |j                  j                        |j"                        
      S |j                  t        j                  j.                  k(  r}|j"                  J t        |j                  t        j                        sJ t        j                  t1        t        |j                  j                        |j"                              S |j                  t        j                  j2                  k(  r}|j"                  J t        |j                  t        j                        sJ t        j                  t5        t        |j                  j                        |j"                              S |j                  t        j                  j6                  k(  rdt        |j                  t        j8                        sJ t        j                  t;        t9        |j                  j                                    S t=        d|       )Nz[serialize_output_spec] %srm  )user_outputr  )loss_output)rl  rr  )buffer_mutationro  )parameter_mutation)gradient_to_parameter)rl  user_input_name)gradient_to_user_input)user_input_mutationrw  ry  )r  r\  r  rb  
OutputKindUSER_OUTPUTrC   r   rX   r}  rl  LOSS_OUTPUTrq   rR   r;   rA  BUFFER_MUTATIONr,  r'   PARAMETER_MUTATIONrE   GRADIENT_TO_PARAMETERr-   GRADIENT_TO_USER_INPUTr.   USER_INPUT_MUTATIONrV   r  rT   rD   r`  )r   ri  s     rf   serialize_output_specz+GraphModuleSerializer.serialize_output_spec7  sa   		.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:::$$#8&DHHMM:#';;$  YY"--===;;***dhh(9(9:::$$&=&DHHMM:#';;'  YY"-->>>;;***dhh(9(9:::$$'>&DHHMM:$(KK(  YY"--;;;;;***dhh(9(9:::$$$9&DHHMM:$(KK%  YY"-----dhh(8(8999$$%%488==9  !#:4&!ABBre   sigc           	          t         j                  d       t        |j                  D cg c]  }| j	                  |       c}|j
                  D cg c]  }| j                  |       c}      S c c}w c c}w )Nz
[serialize_signature]input_specsoutput_specs)r  r\  r2   r  r  r  r  )r   r  r   s      rf   serialize_signaturez)GraphModuleSerializer.serialize_signaturey  s^    		+,?BO!2215OADAQAQRA$44Q7R
 	
ORs   A1A6
xc                    t        |t        j                        r*t        j                  t        |j
                              S t        |t        j                        r4t        j                  t        j                  |j
                              S t        |t        j                        r4t        j                  t        j                  |j
                              S t        |t        j                        r| j                  |j                        S t        |t        j                        r5t        j                  t        |j
                  |j                              S t        d      )	Nr  rS  r
  rU  r  rW  rY  TODO)rq   rb  rR   r%   r   rA  rQ   rO   r|  ra  rk   r*   rX  r`  r   r  s     rf   r}  z-GraphModuleSerializer.serialize_argument_spec  s    a**+??^-HII2,,-??n.C.CAFF.STT2../??0@0G0GPQPVPV0WXX2../''002//0??/QVVq{{S  !((re   c                 F      fdt        |t              } |       |S )Nc           	      B   | j                   y | j                   t        u st        j                  | j                         rt        j                  | j
                     j                  }|j                  v rej                  |   j                  }|| j
                  j                  k7  r`t        d| j
                   d| j
                  j                   d| d      t        | j
                  j                        j                  |<   | j                  D ]
  } |        y )Nz%The given TreeSpec's namedtuple type z was found to have field names z6 but somehow previously was found to have field names ro  )field_names)r   r   pytreeis_namedtuple_classSUPPORTED_SERIALIZED_TYPEScontextserialized_type_namerL  r  _fieldsr`   r@   children_specs)tsr  r  childr   store_namedtuple_fieldss       rf   r  zIGraphModuleSerializer.serialize_treespec.<locals>.store_namedtuple_fields  s   wwww*$(B(B277(K'-'H'HJJ(&& % (4+J+JJ"&"A"A,#!k   #bjj&8&88,CBJJ< P==?ZZ=O=O<P QTT_S``ac  &"**2D2DE 334HI ** /'./re   )r   rU   )r   treespecserialized_treespecr  s   `  @rf   serialize_treespecz(GraphModuleSerializer.serialize_treespec  s&    	/2 -X7GH)""re   module_call_signaturec           	         t         j                  d|       t        |j                  D cg c]  }| j	                  |       c}|j
                  D cg c]  }| j	                  |       c}| j                  |j                        | j                  |j                        |j                  x}r|      S d       S c c}w c c}w )Nz$[serialize_module_call_signature] %sr1  r2  in_specout_specforward_arg_names)
r  r\  r>   r1  r}  r2  r  r  r  r  r   r  r  namess       rf   serialize_module_call_signaturez5GraphModuleSerializer.serialize_module_call_signature  s     			8:OP"9N9U9U45,,Q/ :O9V9V45,,Q/ ++,A,I,IJ,,-B-K-KL.@@@@ $
 	
 
 	
s   B<C
c           	          t         j                  d       |D cg c]@  }t        |j                  |j                  r| j                  |j                        nd       B c}S c c}w )Nz
[serialize_module_call_graph]fqnr  )r  r\  r=   r  r  r  r   rG  entrys      rf   serialize_module_call_graphz1GraphModuleSerializer.serialize_module_call_graph  sa     			34 +

  II  88I

 
	
 

s   AA"c                 B   dt         dt        fd}|j                  dk(  r:t        |j                  t
        j                  j                  gt                     sJ t        |j                        }|j                  }t        |      dk(  rg S |j                  d   } ||j                        r_g }t        |      D ]8  \  }}| j                  ||      }	|j                  | j!                  |	|             : t#        j$                  |      gS t        |      dk(  r| j'                  |j(                  |      gS g }
t        t+        ||            D ]L  \  }\  }}|\t        |j,                  t
        j.                  t
        j0                  f      sJ |
j                  t#        j$                  d	
             ht        |t2              rjt        |j,                  t
        j.                  t
        j0                  f      sJ | j                  ||      }	|
j                  | j'                  |	|             t        |t4              rt        |j,                  t
        j6                        r2t        |j,                  j9                         t
        j0                        sJ | j;                  ||      }|J g }t        |      D ];  \  }}|	| j                  ||      }|j                  | j!                  ||             = |
j                  t#        j$                  |             t        |t<        t>        t@        tB        f      r5| j                  ||      }|
j                  | j'                  ||             'tE        dtG        |       d|jI                                 |
S )a5  For a given node, return the dataclass representing its output values.

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

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

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

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

        We want names to be consistent across these two schemes, so that we can
        mostly reuse the names coming from FX. This function computes a mapping from
        the FX representation to our representation, preserving the names.
        r,  r   c                     t        |       }|j                  }t        |      dk7  ry|d   j                  }t	        |t
        j                        xr( t	        |j                         t
        j                        S )Nr$   Fr   )	r-  returnsr
  	real_typerq   rr   rM  rL  rR  )r,  r  r  return_types       rf   _is_single_tensor_list_returnzNGraphModuleSerializer.serialize_outputs.<locals>._is_single_tensor_list_return  sg    ,V4FnnG7|q !!*..Kk5>>: z**,e.>.>@ re   ru  r   r  r}  r$   Tr  zUnhandled output type z from node )%r   r   rv   rq   r,  rr   rs   rt   r  r-  r  r
  r[  r  r  rd  r^  r%   r   r  rA  r  r  rK  rR  r   r:  rM  rL  r  r   rP   r   rN   
ValueErrorr   format_node)r   r   r  r  r  rz  r  r  r[  rA  output_argumentsreturn_schemar  ri  r  msub_user_node_nameuser_node_names                     rf   r  z'GraphModuleSerializer.serialize_outputs  sO   (		# 		$ 		 ww/)jKK%**//P2M2OP/
 	
 
 )5..w<1I99U# )5K&x0 M	T66tSA""4#?#?d#KLM OO{;<<\Q))$))X>?? *3C'4J*K %	&C&$|!!++e.@.@%BRBR-S  
 !''(EFD*-!!++e.@.@%BRBR-S   66tSA ''(=(=dD(IJD$'!!++U^^ !++::<e>N>N 
 !66tSA	 ,,,%dO UDAqy )-)H)HTU)V&KK < <=OQR ST	U
 !''4(HID3x"@A!%!@!@s!K ''(=(=nd(ST ,T$ZLDDTDTDVCWX G%	N  re   c                    |j                   d   }t        |t              rg }t        |      D ]  \  }}| j	                  ||      }t        |t
              r|J g }t        |      D ]j  \  }}	t        |	t        j                        st        dt        |	       d      | j                  ||      }
|j                  | j                  |
|	             l |j                  t        j                  |             ||j                  n|j                   d| }
|j                  | j!                  |
|              |S t        |t"              rg }|j%                         D ]j  \  }}t        |t        j                        st        dt        |       d      | j                  ||      }
|j                  | j                  |
|             l t        j                  |      gS | j!                  |j                  |      gS )zN
        For serializing HOO outputs since HOOs do not have a schema.
        r  z Serialize list output with type z nyir}  r  )r[  rq   r   r  r  r:  rr   r]  r`   r   r  rd  r^  r%   r   rA  r  r	  rj   )r   r   rz  r2  r  element_meta_valr  tensorsjr  rA  r  r  r[  s                 rf   r  z+GraphModuleSerializer.serialize_hoo_outputs:  s    99U#h&G'0': R## 66tQ?	.5$000 G )*: ; N1)!U\\:"0"B47)4 P#   $>>y!Lt'C'CD!'LMN NN8??g#FG
 %0 " $		{(1#6  NN4#8#8?O#PQ1R4 N$'K%^^- M	T!$5(:4:,dK  66tSA""4#?#?d#KLM OO{;<<))$))X>??re   rA  rz  c                    |t        j                  d      S t        |t        j                        r&t        j                  | j                  ||            S t        |t        t        j                  f      r&t        j                  | j                  ||            S t        |t        t        j                  f      r8t        |t              rJ t        j                  | j                  ||            S t        |t        t        j                  f      r&t        j                  | j                  ||            S t        d|       )NTr  rS  r  rU  r  zUnable to serialize output )r%   r   rq   rr   r]  r^  r   rJ   rh  r   rP   r_  r   rN   rf  r`   rb  s      rf   r  z&GraphModuleSerializer.serialize_outputk  s   ??400h-??66tXF  4"78?? ::4J  3"56!(D111??88xH  5%.."9:??!<<T8L 
 :8*EFFre   c                    |j                   d   }i }|j                  D ]H  }|j                  t        j                  u sJ d| d| d       |j
                  ||j                  d   <   J t        |      D ]  \  }}||vs|j
                   d| ||<     g }t        |      D ])  \  }}	|j                  | j                  ||   |	             + |S )Nr  z
User node z of z is incorrectr$   r  )
r[  r  r,  r  r  rA  ri  r  rd  r^  )
r   r   rz  idx_to_namer  r  _arg_listr  r  s
             rf   _handle_getitem_usersz+GraphModuleSerializer._handle_getitem_users  s    99U#JJ 	2D;;("2"22 TF$tfM:2 )-		K		!%		2  ) 	?FC +%&*ii[#>C 	? #,X#6 	AOO,,[^=MN	
 re   graph_modulec                 ,   t        |t        j                  j                        sJ t        j                  d|j                  d             |j                  j                  D ]"  }	  t        | d|j                         |       $ t!        | j"                  j$                  | j"                  j                  | j"                  j&                  | j"                  j(                  | j"                  j*                  | j"                  j,                  | j"                  j.                  | j"                  j0                  | j"                  j2                  	      S # t        $ r:}t        d| d|j                          dt        j                                |d }~ww xY w)	Nz[serialize_graph]

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

6 2H 
s
  $OPQsSs   A	 		A&A!!A&c                    t         j                  d       | j                  |      }t        || j	                  | j
                        | j                  | j                        | j                  |j                        | j                        S )Nz
[serialize])r  r  rG  rv  rL  )r  r\  rE  r1   r  rF  r  rG  r  r[  rL  )r   r  r  s      rf   rZ   zGraphModuleSerializer.serialize  ss    		/"$$\2..t/C/CD">>t?U?UV99,:K:KL'+'F'F
 	
re   ri   )Bra   rb   rc   rb  ExportGraphSignaturer:  r=   r   r   rP  rr   rj  rA   rf  rm  r!  rs  r  r  r   r  r  r	  r  r*   rc  r?   r  r   r  r  r   r  r  r  r  r%   ra  rR   r^  rQ   r_  rO   rf  rh  r3   r  rC   r  r2   r  ArgumentSpecr}  r  r>   r  r  r  r  r  r  r1   r/   rE  r  rZ   rd   re   rf   r[   r[     s=   
G00
G   2 23
G % %4uxx}} 48X%((-- X	<C 	<y/ y/v5HUXX]]4K " ")uxx}} )c3h )V
!33
	
43F * 	--
 
m	-^D4G ,Ad A
T 

t 

d 
RXc] Rh Rh) )
3. 3
5<L 5
4> 4
KC KC) KCZ@C"-- @CJ @CD
r'>'> 
> 
) )X ) #@
%'%;%;
	
$
!%b&8&8!9
	o	
 f ehhmm f X f P/@%((-- /@DN /@bGS GC GH G:%((-- D<P 2
EHH,@,@ 
U 
4DcN 

ehh&:&: 

{ 

re   r[   )	metaclassc                   V    e Zd Zdefdeeeef      defdZde	j                  defdZy)r\   Nopset_versionr   c                     i | _         |r| j                   j                  |       d| j                   vr+t        j                  j	                         | j                   d<   || _        y Naten)r  updaterr   rV  _get_max_operator_versionr   )r   r  r   s      rf   r   z"ExportedProgramSerializer.__init__  sV    
 .0%%m4+++).)K)K)MDv&.re   r{   r   c           
      T   |j                          t        |j                  |j                        }|j	                  |j
                        }t        |j                        }|j                  j                         }|j                  j                         D ]  \  }}||vsJ |||<    t        || j                  |t        t        d   t        d         |j                   D cg c]  }|j"                   c}t$        j&                  |j(                        }	t+        |	t-        |j/                                      t1        |j2                  d      }
t5        |	t7        |
| j8                        t7        || j8                        t7        |j:                  | j8                              S c c}w )zS
        Args:
            exported_program: Exported Program to serialize
        r   r$   )majorminorr  r  r#  schema_version	verifierstorch_versionguards_codeF)in_place)validater[   rF  rG  rZ   r  r'  r#  rJ  copyr}   rj   r,   r  rI   rH   r  dialectrr   __version___guards_codecanonicalizer   r  r#   r|   r   r  r   r~   )r   r{   gm_serializerserialized_graph_moduleserialized_range_constraintsr}   nr   rm   serialized_epnew_state_dicts              rf   rZ   z#ExportedProgramSerializer.serialize  s   
 	!!#-,,.>.P.P
 #0"9"9:J:W:W"X'B..(
$ %2$=$=$B$B$D	$..446 	DAqI%%%IaL	 (0,,:($Q'$Q' +;*D*DEQqyyE++(55
 	]C	(8$9: 6''%
 "$^T5I5IJ$Y0D0DE$ //1E1E	
 	
 Fs   "F%)ra   rb   rc   DEFAULT_PICKLE_PROTOCOLr   r	  r!  r   r   rb  r,   r   rZ   rd   re   rf   r\   r\     sH     376/S#X// /2
"*<*< 2
AS 2
re   r\   c                      e Zd Zej                   G d d             ZdCdZeded   fd       Z	de
fdZde
fd	Z	 dDd
e
deeeeef      dej&                  fdZdedeeej*                  f   fdZdedeeej0                  f   fdZdedeeej4                  f   fdZdedefdZdede j>                  fdZ!deeejD                  jF                  ef      fdZ$de%dejD                  jJ                  fdZ&de#de'ddfdZ(de)de jR                  fdZ*de+de jV                  fdZ,de-de j\                  fd Z/	 	 dEd!e0d"ee1e
ejd                  f   e3f   d#ee1e
e4f   e3f   d$eee5e5ejd                  d%f   e1e
e4f   f   e3f      d&ee1e
e6jn                  f      defd'Z8d(e
d)ejD                  jF                  fd*Z9d+ Z:de#fd,Z;d-e<e=   fd.Z>d/e?de4fd0Z@d/eAde4fd1ZBd2 ZCde#d)ejD                  jF                  fd3ZDde#d)ejD                  jF                  fd4ZEd)ejD                  jF                  d5eeFeGeHf   d6ed7e1e
e4f   fd8ZId)ejD                  jF                  d7e1e
e4f   fd9ZJde#d)ejD                  jF                  ddfd:ZKd;e1e
e
f   de1e
e4f   fd<ZLd=e?de j                  fd>ZNd?eOde j                  fd@ZPdAe<eQ   de<e j                     fdBZRy)Fr]   c                   Z   e Zd ZU ej                  j
                  ed<   ej                  ed<   e	ej                     ed<   eeej                  f   ed<   eeeej                   ej"                  j$                  f   f   ed<   eeef   ed<   eeeej                   df   eeef   f      ed<   y	)
GraphModuleDeserializer.Resultr  r  rG  names_to_symbolsr|   r}   .r~   N)ra   rb   rc   rr   rj  r1   r   rb  r  r:  r=   r	  r!  r   r   r   r]  r   r   r   r   r   r   rd   re   rf   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Qre   r  r   Nc                     i | _         t               | _        t        j                  j                         | _        t        j                  j                         | _	        y ri   )
serialized_name_to_noder   serialized_name_to_metarr   rj  r/   r  r   Modulerr  r   s    rf   r   z GraphModuleDeserializer.__init__%  s8    AC$07	$XX^^%
hhoo're   c              #     K   | j                   | j                  | j                  | j                  | j                  f}t
        j                  j                         | _         t
        j                  j                         | _        i | _        t               | _        t               | _        	 d  |\  | _         | _        | _        | _        | _        y # |\  | _         | _        | _        | _        | _        w xY wwri   )r  rr  r  r	  unbacked_symbolsrr   rj  r/   r   r
  r   r   rN  s     rf   save_graph_modulez)GraphModuleDeserializer.save_graph_module+  s      JJKK((((!!
 XX^^%
hhoo'')$'.y$365		 
,,%
,,%s   B%C4(C ,"C4#C11C4serialized_targetc                 h    |j                  d      \  }}|dd  }t        |   }|j                  |      S )Nr  r$   )split_deserialization_registryfrom_op_name)r   r  r  r  r  s        rf   deserialize_extension_operatorz6GraphModuleDeserializer.deserialize_extension_operatorD  s=    .44S9	7abM	+I6##G,,re   c                    |j                  d      rt        }|j                  d      dd  }n||j                  d      rt        }|j                  d      dd  }nP|j                  d      rt        }|j                  d      dd  }n$|j                  d      r| j                  |      S |S |}|D ]  }t        ||      s|c S t        ||      }  |S )N	_operatorro  r$   rr   r  r  )rp  r  r  rr   r  r  r  r  )r   r  rr  serialized_target_namesr,  rA  s         rf   deserialize_operatorz,GraphModuleDeserializer.deserialize_operatorJ  s    ''
 F&7&=&=c&B12&F#))'2F&7&=&=c&B12&F#))&1F&7&=&=c&B12&F#))#.667HII$$+ 	/D64((( .		/
 re   r   r   c           	          	 ddt         j                  dt        t        t        t
        t        f      dt         j                  f fd}t        j                  |i  j                   j                        } |||      S )z
        Parses and does bottom-up processing of sympy.Expr nodes,
        populating ShapeEnv & caching symbols as needed.
        r  r   r   c                 r   | j                   s| j                  s| j                  r| S t        |       }| j                  D ]  }j                  |        |j                  v rj                  |   } nx| j                  |<   t        | t        j                        rOt        j                  | t        j                  t        j                  f      rj                  j!                  |        |4| j"                  j$                  vrj"                  j'                  | |       j(                  j+                  |      x}r2j"                  j-                  | |j.                  |j0                         t        | t        j                        r-t3        j4                  d      j"                  j6                  | <   | S )N)compiler_mincompiler_maxr$   )skip)
is_Integeris_Float
is_Booleanr!  ri  _parse_sym_exprsymbol_name_to_symbolrq   r   r   r   symbol_is_typer   UNBACKED_INTUNBACKED_FLOATr  r   	shape_env
var_to_valadd_var_to_valsymbol_name_to_rangery  constrain_symbol_ranger%  r&  r    extractvar_to_stack)r  r   r   rl  vrr   s        rf   _process_sym_exprzBGraphModuleDeserializer._parse_sym_expr.<locals>._process_sym_exprk  sd    ~~
 s888 .C((-. t99944X>C;>D..x8!#u||49W9Wd//1D1DE: --11#6#4>>3L3L(LNN11#t<2266x@@2@NN99%'XX%'XX :  c5<<07H7P7PVW7XDNN//4Jre   )localsri   )
r   Exprr   r   r   r   r   sympifysympy_functionsr!  )r   r   r   r-  r   s   `    rf   r   z'GraphModuleDeserializer._parse_sym_exprc  s|     HL!	!	#+E#tU2B,C#D!	ZZ!	F }}Id**Id.H.HI
 !t,,re   r   c                    |j                   }|j                  dk(  ry|j                  d }n1|j                  j                  dk(  sJ |j                  j                   }| j                  |j                  |      }| j
                  j                  ||      S |j                  dk(  rt        |      t        u sJ |S t        d|j                   d|j                          )Nr   r   r   zSymInt has invalid field type  with value )	rk   r   r   r   r   r%  create_symintnoder   r`   r   r   r  r   r  s        rf   deserialize_sym_intz+GraphModuleDeserializer.deserialize_sym_int  s    gg66Yxxxx}}000xx~~&&s||T:C>>33Cd3CCVVx9###J 0QWWIN re   c                    |j                   }|j                  dk(  r]|j                  r|j                  j                  nd }| j	                  |j
                  |      }| j                  j                  ||      S |j                  dk(  rt        |t              sJ |S t        d|j                   d|j                          )Nr   r   r   z SymFloat has invalid field type r3  )rk   r   r   r   r   r   r%  create_symfloatnoderq   r   r`   r5  s        rf   deserialize_sym_floatz-GraphModuleDeserializer.deserialize_sym_float  s    gg66Y(+388$$dD&&s||T:C>>55c5EEVVz!c5)))J 2166(,qwwiP re   c                 4   |j                   }|j                  dk(  r6| j                  |j                        }| j                  j                  |      S |j                  dk(  rt        |t              sJ |S t        d|j                   d|j                          )Nr   r   zSymBool has invalid field type r3  )	rk   r   r   r   r%  create_symboolnoderq   r   r`   )r   r   r  r   s       rf   deserialize_sym_boolz,GraphModuleDeserializer.deserialize_sym_bool  s    gg66Y''5D>>44T::VVy c4(((J 1!&&aggYO re   r   c                 d     j                   5  t        t        t        j                  t         fd|j                  D              t         fd|j                  D              t        |j                        t        |j                     |j                              cd d d        S # 1 sw Y   y xY w)Nc              3   @   K   | ]  }j                  |        y wri   r6  ru   r  r   s     rf   rw   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>  s     UC$2237Ur#  c              3   @   K   | ]  }j                  |        y wri   r?  r@  s     rf   rw   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>  s     WC$2237Wr#  )r   r   r   )fake_tensor_moder   r   rr   empty_stridedr   r   r   r   r   r   r   r   )r   r   s   ` rf   r   z/GraphModuleDeserializer.deserialize_tensor_meta  s     "" 
	##U;CTCTUUW;CVCVWW-k.@.@A3K4E4EF"-";";	
	 
	 
	s   BB&&B/r  c                 X    t        j                  |j                  |j                        S )NrW  )rb  r*   rA  rX  r  s     rf   deserialize_script_obj_metaz3GraphModuleDeserializer.deserialize_script_obj_meta  s)     ## %%%//
 	
re   c                 p   |j                   dk(  r#| j                  |j                  j                     S |j                   dk(  r#| j                  |j                  j
                     S |j                   dk(  r#| j                  |j                  j
                     S |j                   dk(  r#| j                  |j                  j
                     S |j                   dk(  r|j                  S |j                   dk(  r|j                  S |j                   dk(  r|j                  S |j                   dk(  ry t        d	|       )
NrT  rV  r  r  r   r   r   r  z"Unable to deserialize output node )r   r  rT  rA  rV  r  r  r  r   r   r   r`   )r   rh  s     rf   deserialize_graph_outputz0GraphModuleDeserializer.deserialize_graph_output  s
   ;;+%//0@0@0E0EFF[[L(//0A0A0I0IJJ[[M)//0B0B0J0JKK[[N*//0C0C0K0KLL[[H$== [[J&??"[[I%>>![[I% #EfX!NOOre   serialized_graphc           	      
    t         j                  d       |j                  j                         D ]0  \  }}t         j                  d||       |f fd	 j                  |<   2 |j
                  j                         D ]0  \  }}t         j                  d||       |f fd	 j                  |<   2 |j                  j                         D ]0  \  }}t         j                  d||       |f fd	 j                  |<   2 |j                  j                         D ]0  \  }}t         j                  d||       |f fd		 j                  |<   2 |j                  j                         D ]/  \  }}t         j                  d
|       |f fd	 j                  |<   1 t         j                  d       t        |j                        D ]  \  }}	t         j                  d|	       |	j                  dv rK|	j                  j                  }
 j                  j                  |
      }|
|_         j!                  |
|       v|	j                  dk(  r}|	j                  j                  dk(  rK|	j                  j"                  }
 j                  j                  |
      }|
|_         j!                  |
|       t%        d|	j                   d      |	j                  dv ro j&                  j(                  |   j*                  j                  xs d| }
 j                  j                  |
      } j-                  |	      |j.                  d<   t%        d|	        |j0                  D ]0  }	  j3                  |j4                        } j7                  ||       2 g }|j>                  D ]8  }t         j                  d|       |jA                   jC                  |             : |jD                  rtG        |      dk(  sJ |d   }ntI        |      } j                  jK                  |      }|jD                  r*|jL                  d   j.                  d   |j.                  d<   n,tI        d |jL                  d   D              |j.                  d<    j                  j0                  D ]`  }|j.                  jO                  d      x}!tQ        jR                  |d jT                   jV                  d      x}sR||j.                  d <   b tG         jV                        dk(  sJ  j                  S # t8        $ r)}t%        d| dt;        j<                                |d }~ww xY w)!Nz
[deserialize_graph]z([deserialize_tensor_meta] %s (input): %sc                 &    j                  |       S ri   )r   rm   r   s    rf   <lambda>z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>  s    t'C'CA'F re   z$[deserialize_sym_int] %s (input): %sc                 &    j                  |       S ri   r?  rK  s    rf   rL  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>  s    (@(@(C re   z&[deserialize_sym_float] %s (input): %sc                 &    j                  |       S ri   )r9  rK  s    rf   rL  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>  s    $*D*DQ*G re   z%[deserialize_sym_bool] %s (input): %sc                 &    j                  |       S ri   )r<  rK  s    rf   rL  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>  s    )B)B1)E re   z [deserialize_script_obj_meta] %sc                 &    j                  |       S ri   )rE  rK  s    rf   rL  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>  s    $*J*J1*M re   z
[deserialize graph nodes]z[deserialize input] %s)rT  rZ  rV  r  z Deserializing a constant symint z as an input)r   r   r   r  r	  rl  r  zInvalid input type zFailed deserializing node r  z[deserialize output] %sr$   r   c              3      K   | ]9  }t        |t        j                  j                        r|j                  d    n| ; yw)r  N)rq   rr   rj  rA   r[  )ru   rl  s     rf   rw   z<GraphModuleDeserializer.deserialize_graph.<locals>.<genexpr>P  s6      , $.c588==#AsJ,s   ?Ard   T)r%  pendingsimplifyunbacked_bindings),r  r\  r4  rj   r	  r5  r7  r6  r9  r  r1  r   rk   rA  r  rR  sync_fx_noder  r`   r  r  rl  deserialize_inputr[  r3  r  r,  deserialize_noder  r  r  r2  rd  rG  r8  r
  r   rh  ri  ry  r    _free_unbacked_symbols_with_pathr%  r  )r   rH  rA  tensor_valuesym_int_valuesym_float_valuesym_bool_valuer  r  input_	node_nameplaceholder_nodeserialized_noder,  r  r2  rh  output_noder   r  rT  s   `                    rf   deserialize_graphz)GraphModuleDeserializer.deserialize_graph  s   		)* #3"@"@"F"F"H 	D,II@$U%F ((.	 $4#B#B#H#H#J 	D-II<dMR&C ((.	 &6%F%F%L%L%N 	!D/II>oV(G ((.	 %5$D$D$J$J$L 	 D.II=t^T'E ((.	 &6%G%G%M%M%O 	!D/II8/J(M ((.	 			/0"#3#:#:;  	EIAvII.7{{<<"LL--	#'::#9#9)#D  )2 %!!)-=>,<<$$	1 & 4 4I'+zz'='=i'H$ -6$)%%i1AB(:6<<.U   !  !NN66q9==BBOA3i	#'::#9#9)#D /3/E/Ef/M %%e,$':6(%CDDA 	EF  055 	O22?3I3IJ%%ov>	 &.. 	BFII/8NN488@A	B 33w<1$$$ajGGnGjj''033&1&6&6q&9&>&>u&EKU#&+ ,&++A., 'KU# JJ$$ 
	CDyy}}U++8%4%U%U"nn 11!& !  2C		-.
	C 4(()Q...zzS  $00AAWXaXlXlXnWops   -T  	U)$UUr`  r,  c           
      ~
   dt         fd}|t        v s1|t        j                  j                  j
                  j                  k(  rq|j                  d   j                  j                  }| j                  |j                        }| j                  j                  d||i |      }| j                  ||       n|t        j                  j                   j"                  u rt%        d      t'        |t        j(                  j*                        rS| j-                  |j                        \  }}| j/                  |j0                        }g ||j3                         D ]R  }	t'        |	t        j4                  j6                        s(|	j8                  dk(  s8|	j:                  j=                  |       T t?        |j                        dk(  rItA        |j                  d   d      r0tC        |d	d
      r#|j                  d   jD                  jF                  nd }| j                  j                  d||||      }| jI                  ||       |j:                  j=                  |       nt'        |t        j(                  jJ                  gtM                     rt ||      r#|j                  d   jD                  jF                  nd }| jO                  ||      \  }}| j                  j                  d||||      }| jI                  ||       n?t'        |tP              rd| ddz   dz   dz   nd}
t%        |
d| dtS        |       dz         |j:                  j=                  | j/                  |j0                               tT        jW                  d|jF                  |jX                  |jZ                  |j\                  |j:                  j_                  d             |t        j                  j                  j`                  j                  k(  rzt'        |jZ                  d   x}t               s|j:                  d   }t'        |t        jb                        r| jd                  jg                  |jh                  jj                  d|       n|t        j                  j                  jl                  j                  k(  re|jZ                  d   j:                  d   }t'        |t        jn                        r/| jd                  jq                  |jh                  jj                         |j8                  dvrd|j:                  vri |j:                  d<   y y y )Nr   c                     t        |       }|j                  }t        |      dk(  xr' t        |d   j                  t
        j                        S )Nr$   r   )r-  r  r
  rq   r  rr   rR  )r,  r  r  s      rf   _is_single_tensor_returnzJGraphModuleDeserializer.deserialize_node.<locals>._is_single_tensor_returnf  sG    ,V4FnnGw<1$ 
$$e&6&6* re   r   ru  z_deserialize nyi for torch._higher_order_ops.triton_kernel_wrap.triton_kernel_wrapper_functionalr  r$   rT  r  TzWe failed to resolve z to an operator. z]If it's a custom op/custom triton op, this is usually because the custom op is not registeredzU when deserializing. Please import the custom op to register it before deserializing.z+ Otherwise, please file an issue on github.r  z" Unsupported target type for node z: ro  z)[deserialize_node] %s: %s(%s, {%s}) -> %sr  )rR  rh  r  )9r   r  rr   opsr  itemr  r2  rk   r  deserialize_sym_op_inputsr1  r  create_nodedeserialize_sym_op_outputsr  r  r  r`   rq   rs   rx  deserialize_hoo_inputsdeserialize_metadatarv  r_  rj  rA   rv   r[  r  r
  r  r  rT  rA  deserialize_outputsrt   r  deserialize_inputsr!  r   r  r\  r,  ri  r  ry  _assert_scalarrJ   r%  guard_or_defer_runtime_assertr   r   sym_constrain_range_for_sizerP   _constrain_range_for_size)r   r`  r,  re  rA  ri  fx_noder  rv  r  _additional_msgrl  r   r  s                 rf   rW  z(GraphModuleDeserializer.deserialize_nodee  sp   	 	 hyy~~""**+ #**1-33;;D11/2H2HIDjj,,_fdBPTUG++OWE&&99ZZ[ !q  

 > >?667M7MNLD&001I1IJH.t.fmmo. ,a/ADDJ4F FFMM(+," ../14O33A6DO-JDQ  ''*4499   jj,,vtG $$_g>LL)UZZ**K-H-JK
 ,F3  ''*4499 
  226?KLD&jj,,vtG $$_g> fc* ,F83DEuvmn DD   !66Gr$v,WXYZ 
 	D55o6N6NOP		7LLNNLLNNLLU#	
 UYY^^22:::gll1o5s=xxdEMM2NN@@		G uyy~~BBJJJ,,q/&&u-C#u||,88G JJ77!5.0GLL*+ 6 8re   r  c           	         t         j                  d|       |j                  dk(  rSt        j                  t        j
                  j                  | j                  |j                  j                        d       S |j                  dk(  rvt        j                  t        j
                  j                  t        j                  |j                  j                  j                        |j                  j                        S |j                  dk(  rt        j                  t        j
                  j                  t        j                  |j                   j                  j                        |j                   j"                  |j                   j$                        S |j                  dk(  rvt        j                  t        j
                  j&                  t        j                  |j(                  j                  j                        |j(                  j*                        S |j                  d	k(  rt        j                  t        j
                  j,                  t        j.                  |j0                  j                  j                  |j0                  j                  j2                  
      |j0                  j4                        S |j                  dk(  rbt        j                  t        j
                  j6                  t        j8                  |j:                  j                  j                        d       S |j                  dk(  r|t        j                  t        j
                  j                  t        j<                  |j>                  j                  | jA                  |j>                  jB                              d       S tE        d|       )Nz[deserialize_input_spec] %srn  r  rl  r,  rq  r  r  )r  rl  r,  rs  ru  rv  rW  rx  rl  rk  zUnknown input spec )#r  r\  r   rb  r3   rz  r{  deserialize_argument_specrn  rl  r~  rR   rq  rA  rp  r  r  rr  rs  r  ru  rt  r  r*   rv  rX  r`  r  rT   rx  r|  rl  deserialize_constant_inputrk   r`  )r   r  s     rf   deserialize_input_specz.GraphModuleDeserializer.deserialize_input_spec  s   		/366\!<<\\,,221<<3C3CD 
 VV{"<<\\++%%1;;??+?+?@{{11 
 VVx<<\\((%%188<<+<+<=xx++88..	  VV((<<\\11%%1+<+<+@+@+E+EF((== 
 VV|#<<\\,,(())..!,,:J:J:T:T ||33  VVw<<\\''$$!''++*:*:; 
 VV''<<\\,,''))..99!:J:J:P:PQ   !#6qc!:;;re   oc                    t         j                  d|       |j                  dk(  rSt        j                  t        j
                  j                  | j                  |j                  j                        d       S |j                  dk(  rbt        j                  t        j
                  j                  t        j                  |j                  j                  j                        d       S |j                  dk(  rvt        j                  t        j
                  j                  t        j                  |j                  j                  j                        |j                  j                         S |j                  dk(  rvt        j                  t        j
                  j"                  t        j                  |j$                  j                  j                        |j$                  j&                        S |j                  dk(  rvt        j                  t        j
                  j(                  t        j                  |j*                  j                  j                        |j*                  j&                        S |j                  d	k(  rvt        j                  t        j
                  j,                  t        j                  |j.                  j                  j                        |j.                  j0                        S |j                  d
k(  rvt        j                  t        j
                  j2                  t        j                  |j4                  j                  j                        |j4                  j0                        S |j                  dk(  rbt        j                  t        j
                  j6                  t        j8                  |j:                  j                  j                        d       S t=        d|       )Nz[deserialize_output_spec] %sr  rv  r  r  r  r  r  r  r  rx  zUnknown output spec )r  r\  r   rb  rC   r  r  rw  r  rl  r  rR   r  rA  r  r  rr  r  r  rp  r  r  r  r  r  r  r  r  rT   rx  r`  )r   rz  s     rf   deserialize_output_specz/GraphModuleDeserializer.deserialize_output_spec	  s   		0!466]"==]]..221==3D3DE 
 VV}$==]]..%%1==+<+<+A+AB 
 VV((==]]22%%1+<+<+@+@+E+EF((44 
 VV++==]]55%%1+?+?+C+C+H+HI++:: 
 VV..==]]88%%1+B+B+F+F+K+KL..== 
 VV//==]]99%%1+C+C+G+G+L+LM//?? 
 VV,,==]]66%%1+@+@+D+D+I+IJ,,<< 
 VVw==]](($$!''++*:*:;  !#7s!;<<re   r  c           	      
   t         j                  d       t        j                  |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j                  |       c}      S c c}w c c}w )Nz
[deserialize_signature]r  )r  r\  rb  r  r  ry  r  r|  )r   r  r  rz  s       rf   deserialize_signaturez-GraphModuleDeserializer.deserialize_signatureE	  sd    		-.&&ADQA44Q7QCFCSCSTa$66q9T
 	
QTs   A;B 
r  serialized_state_dictr}   r~   .r(  c           	      6   t         J | a 	 t        j                  d       t        j                  d      | _        t        dd| j
                        | _        i dt        j                  j                  j                  j                  dt        j                  j                  j                  j                  dt        j                  j                  j                  j                  d	t        j                  j                  j                  j                  d
t        j                  j                  j                  j                   dt        j                  j                  j                  j"                  dt        j                  j                  j                  j$                  dt        j                  j                  j                  j&                  dt        j                  j                  j                  j(                  dt        j                  j                  j                  j*                  dt        j                  j                  j                  j,                  dt        j                  j                  j                  j.                  dt        j                  j                  j                  j0                  dt        j                  j                  j                  j2                  dt        j                  j                  j                  j4                  dt        j                  j                  j                  j6                  dt        j                  j                  j                  j8                  t        j                  j                  j                  j:                  t        j                  j                  j                  j<                  t        j                  j                  j                  j>                  t        j                  j                  j                  j@                  t        j                  j                  j                  jB                  d| _"        i | _#        tI        |      | _%        | jM                  |jN                        | _'        i | _(        tS               | _*        d\  }}d tV        jX                  tV        jZ                  fD        \  }}	|r|j]                         D ]  \  }
}|j^                  }t        j`                  tc        |td               |jf                        | jP                  |
<   |
ji                  |      r$tk        |
tm        |      d        }to        ||      }|
ji                  |	      stk        |
tm        |	      d        }to        ||      } tq        |dz         D ]!  }ts        | j
                  jt                         # tq        |dz         D ]!  }ts        | j
                  jv                         # |tm        |      dkD  rtI        |      | _<        nd | _<        | j{                  |j|                         t        | jx                        5  | j                  |j                        }d d d        t        j                  | j                  | j|                        }i }|j                  j                  d      x}rt        j                  |      |d<   t        |d      r9i |d<   |j                  j]                         D ]  \  }}|j                  |d   |<    ||_L        t        j                  || jN                  | jF                  tI        |      | jJ                  | jx                        d a S # 1 sw Y   xY w# d a w xY w)Nz
[deserialize]T)assume_static_by_defaultF)allow_fallback_kernelsallow_non_fake_inputsr%  FloorDivModularIndexingWhere	PythonModModCleanDiv	CeilToInt
FloorToIntCeilDivLShiftRShiftPowByNaturalFloatPowFloatTrueDiv
IntTrueDiv!IsNonOverlappingAndDenseIndicatorTruncToFloat)
TruncToInt
RoundToIntRoundDecimalToFloatIdentity)r  c              3   .   K   | ]  }t         |     y wri   )r   )ru   r   s     rf   rw   z6GraphModuleDeserializer.deserialize.<locals>.<genexpr>	  s      @"#
1@s   r$   r   r  rL  )r  r  rG  r  r|   r}   r~   )Or   r  r\  r   ShapeEnvr%  r   rB  rr   utils_sympy	functionsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r1  r!  r  r}   r~  r  r(  r   r  r   r$  r#  rj   r%  r   r  r   r&  rp  r   r
  maxrangenextunbacked_symfloat_counterunbacked_symint_counterr~   rb  r  r   deserialize_module_call_graphrG  rb  _create_graph_module_for_exportrr  rv  ry  r   r   r  rL  r  r[  r]   r  )r   r  r  r}   r~   r(  count_unbacked_symfloatcount_unbacked_symintunbacked_symfloat_prefixunbacked_symint_prefixrl   r,  r%  r  r  rG  r  r[  r  type_fieldss                        rf   deserializez#GraphModuleDeserializer.deserializeL	  s=    %,,, $h	)II'(,55tTDN$2',&*..%D!
$
 EKK..88AA$ "5;;#5#5#?#?#O#O$ ++55;;$ U[[//99CC$ u{{))3377$ EKK..88AA$ U[[//99CC$ ekk00::EE$ 5;;--77??$ %++,,66==$ %++,,66==$   2 2 < < I I!$" EKK..88AA#$$  2 2 < < I I%$& ekk00::EE'$( 4U[[5G5G5Q5Q5s5s)$*  2 2 < < I I+$, $kk00::EE#kk00::EE % 2 2 < < I I ;;--77??!KK..88AA5$D 8 CED&7	BDN!77'11DN )+D% %(ED!=C:#%:@(,(;(;T=N=N'O@<$&< $1779 
NEArHHE3B3N3N)%&92884D--a0 ||$<=#&>"?"A BC256Mq2Q/&<=#&<"="? @A034I10M-
N 2Q67 ?T^^==>?0145 =T^^;;<= )c..AA.E&@&P#&*#""#:#@#@A78K8KL $($F$F+==%! ==dkk4::VLD099==hGGvG!%F!3X.0LM5712 -GGMMOS @F@R@RD56u=	S
 !%L*11).."3!%!;!;56KL..#22 2  %)!5 4 %)!s,   U9^ C!^ '^D^ ^^ ^rA  rs  c                     || j                   v rt        d| d      ||_        || j                   |<   d|j                  vsJ | j                  |   |j                  d<   y )NzNode z& has already been deserialized before.r  )r  r`   rA  r[  r	  )r   rA  rs  s      rf   rU  z$GraphModuleDeserializer.sync_fx_node	  sg    4/// 5.T!UVV-4$$T*GLL((("::4@Ure   c                 ,     t         fd|D              S )Nc              3   T   K   | ]  }j                  |j                         ! y wri   )rV  rl  )ru   inputr   s     rf   rw   zDGraphModuleDeserializer.deserialize_sym_op_inputs.<locals>.<genexpr>	  s      K5T++EII6Ks   %()r   )r   r1  s   ` rf   rh  z1GraphModuleDeserializer.deserialize_sym_op_inputs	  s    KFKKKre   c                 t   t        |      j                  }|j                  D ci c]  }|j                  |j                   }}|j                  D ci c](  }|j                  | j                  |j                        * }}g }t               }|D ]  }	|	j                  |v r||	j                     }
||	j                     }|t        j                  k(  r|j                  |
       U|t        j                  k(  r/t        j                  |	j                        s|
||	j                  <   |	j                          xr |	j                   }|r|j                  ||	j                            t        j                  |	j                        rn|	j                  rJ t!        |      dkD  r2t               }|j#                  t%        |j'                                      |j                  ||	j                            e|	j                  |v su||	j                     ||	j                  <    t)        |      |fS c c}w c c}w Nr   )r-  r  r1  rA  r  rV  rl  r   r&   r  rd  r  keyword	iskeywordhas_default_valuer  r
  r  r:  r_  r   )r   r,  r`  schema_argsr  argument_kindsactual_argsri  r  r  rl  r  is_positionals                rf   rn  z*GraphModuleDeserializer.deserialize_inputs	  s   -f5??>M>T>TUU%**ejj0UU )//
 JJ..uyy99
 
 (3% 	KJ+-!*//2%joo6<222KK$\111':K:KOO; /2F:??+ 0022P:;P;P7P  K
89"":??3%0000v;?(]FKKV]]_ 56K
89??k1.9*//.JF:??+7	K8 T{F""G V
s   H0-H5r1  c                     g }i }|D ]d  }|j                   dk7  r)| j                  |j                        ||j                   <   ;|j                  | j                  |j                               f t	        |      |fS )zO
        For deserializing HOO inputs since HOOs do not have a schema.
        r  )rA  rV  rl  rd  r   )r   r1  ri  r  r]  s        rf   rk  z.GraphModuleDeserializer.deserialize_hoo_inputs	  st      	@F{{b &*&<&<VZZ&Hv{{#D226::>?		@
 dV$$re   inpc                 h    j                   }j                  }|dk(  ry |dk(  r# j                  j                  j                     S |dk(  rt
        j                     S |dk(  rt        j                     S |dk(  rt        j                     S |dk(  rt        |t              sJ  j                         5   j                  |j                         t!        j"                   j$                   j                        }d d d         j$                  j'                  |j                          j                  j)                  d|j                  |j                        S |d	k(  rt+        j,                        S |d
k(  rj.                  S |dk(  rj0                  S |dk(  rj2                  S |dk(  rj4                  S |dk(  r4t7        j8                  j:                  j8                  j<                        S |dk(  r j?                  j@                        S |dk(  r j?                  jB                        S |dk(  r j?                  jD                        S t        |tF              rtI        |      dk(  rg S |dk(  r(|D cg c]  } j                  |j                      }}|S |dv rtG        |      S |dv r|D cg c]  } j?                  |       c}S |dk(  r fd}tG        tK        ||            S tM        d       |dk(  rhjN                  j                   j                  v r# j                  jN                  j                     S  jP                  jN                  j                     S |dk(  r jS                  jT                        S tM        d       # 1 sw Y   xY wc c}w c c}w )Nr  rT  r8  r:  r;  r  r  r  r9  r   r   r   r	  r  rV  r  r  r   r~  )r  r  r  r  )r$  r*  r&  r1  c                     | j                   dk(  ry | j                   dk(  r#j                  | j                  j                     S t	        d       )Nr  rT  Unhandled argument )r   r  rk   rA  r`   )r  r  r   s    rf    deserialize_optional_tensor_argszSGraphModuleDeserializer.deserialize_input.<locals>.deserialize_optional_tensor_args<
  sJ    vv*#;.#;;AGGLLII,/B3%-HIIre   r  rZ  r?  )+rk   r   r  rT  rA  r   r8  !_SERIALIZE_TO_TORCH_MEMORY_FORMATr:  _SERIALIZE_TO_TORCH_LAYOUTr;  rq   r0   r  rb  r  rb  r  rr  register_moduleri  r   r9  r   r   r   r	  rJ  r  r  r  deserialize_sym_argumentrV  r  r  r:  r
  r   r`   rZ  r}   r  r?  )r   r  rk   typ_	submodulerl  resultr  s   ``      rf   rV  z)GraphModuleDeserializer.deserialize_input
  sq   		xx9 [ //0B0BCC%%,S-?-?@@''4S5I5IJJ[ -cmm<<Ze]333'') X&&u{{3>>t{{DJJW	X KK''

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

ZZ *  
 [ %cmm44X::Z<<Y;;[ == \!3>>..0C0CDD\!00@@^#001A1ABB]"00AAt$5zQ	%LQRS$66sxx@RRKKE{"IIFKLs55c:LL..J C @%HII$':3%%@AA_$  %%)E)EE33C4E4E4J4JKK>>#"3"3"8"899]",,S__== #6se!<==wX X> S Ms   8AN> N*9N/N'c                 `   |j                   dk(  rt        |j                        S |j                   dk(  rt        |j                        S |j                   dk(  rt        |j                        S |j                   dk(  rt        |j                        S |j                   dk(  ry t        d| d      )Nr   r   r	  r   r  zUnhandled constant argument z to deserialize)
r   r   r   r   r   r!  r	  r   r   r`   )r   r  s     rf   rx  z2GraphModuleDeserializer.deserialize_constant_inputQ
  s    88xszz?"XX#&&XX$s}}%%XX"$$XX" #?uO!TUUre   c                    t        |t              rC|j                  dk(  r|j                  S |j                  dk(  r| j                  |j
                     S t        |t              rC|j                  dk(  r|j                  S |j                  dk(  rl| j                  |j
                     S t        |t              rC|j                  dk(  r|j                  S |j                  dk(  r| j                  |j
                     S t        d|       )Nr   r  r   r   z Unknown symbolic argument type: )rq   rQ   r   r   r  r  rO   r   rK   r   r`   )r   sym_args     rf   r  z0GraphModuleDeserializer.deserialize_sym_argument_
  s    g~.||x'~~%*33GOODD!12||z)'''*33GOODD1||y(&*33GOODD?yIJJre   c                 j    | j                  |j                  d   j                  j                  |       y r  )rU  r2  rk   r  )r   r`  rs  s      rf   rj  z2GraphModuleDeserializer.deserialize_sym_op_outputsq
  s)    /11!4::BBGLre   c                     t        |j                        dk(  ry t        |j                        dk(  rEd|j                  v r7t        |dd      s*|j                  d   j                  dk7  r fd} |||      S t        |j                        dk(  rP|j                  d   j                  dk(  r4 j                  |j                  d   j                  j                  |       y t        |j                        dk(  rft        |j                  d   j                  t        t        t        f      r4 j                  |j                  d   j                  j                  |       y t        |j                        dk(  rc|j                  d   j                  dk(  rGd |j                  d	<   |j                   j                   j#                  |j                         d
       y  j%                  ||       y )Nr   r$   ztorch.ops.higher_orderr  Tr  c                    g }d }| j                   d   j                  dk(  r| j                   d   j                  }nKt        | j                   d   j                  t
        t        t        f      r| j                   d   j                  }j                  | j                        }|J j                  |||d|       t        |      |j                  d<   |j                  |j                  <   y )Nr   rT  r  )r2  r   rT  rq   rk   rQ   rK   rO   rl  rv  generate_getitemr   r[  r  rA  )r`  rs  rz  rl  deserialized_metadatar   s        rf   #_deserialize_hop_with_single_returnzXGraphModuleDeserializer.deserialize_outputs.<locals>._deserialize_hop_with_single_return
  s    &("**1-22kA)11!4>>C#++A.44#_6FG *11!4::C(,(A(A#,,)% &%%haAVW&+HoU#=D,,W\\:re   rT  r  _unused)r
  r2  r,  r  r   rU  rT  rA  rq   rk   rQ   rK   rO   r  r[  _renamer  _target_to_strdeserialize_multiple_outputs)r   r`  rs  r  s   `   rf   rm  z+GraphModuleDeserializer.deserialize_outputst
  s   &&'1, ''(A-(O,B,BBO-JDQ''*//9<& 7PP ''(A-''*//;>o55a8BBGGQ(()Q.:##A&,,_.>?4
 o55a8>>FFP''(A-''*//9< #'GLLOOtzz88HIQR))/7Cre   rl  r  r  c                    t        |t              r|j                  }nQt        |t              r|j                  }n4t        |t
              r|j                  }nt        dt        |             | j                  j                  dt        j                  ||f|      }| j                  ||       |j                  | j                  |          |j                  j!                  |       y )Nz+generate_getitem got unknown argument type ru  r  )rq   rR   rA  rQ   r  rO   r`  r   r  ri  r  r  rU  rd  r	  r[  r  )r   rz  rs  rl  r  r  rA  individual_outputs           rf   r  z(GraphModuleDeserializer.generate_getitem
  s     c>*88D^,;;D-.;;D =d3i[I  !JJ22cN	 3 
 	$ 1244T:; 	%%&;<re   c                 V   t        |      D ]  \  }}t        |t        t        t        f      r| j                  |||||       8t        |t              sJ |j                  dv r | j                  |||j                  ||       x|j                  dv r| j                  j                  dt        j                  ||f      }|j                  g        | j                  |d   ||j                  |       |j                  j!                  |       |d   |j                  d<   |j                  dk(  rl| j                  j                  dt        j                  ||fd      }|j                  d        d |j                  d<   |j                  j!                  |       t#        d|        y )	N)rT  rV  r  )r~  r$  r&  r  r  r  r  r*  ru  r  r  r  r  z Unimplemented node output type: )r  rq   rR   rQ   rO   r  r%   r   rk   r  ri  r  r  rd  generate_getitemsr[  r  NotImplementedError)	r   rz  rs  ri  r  r  rl  list_outputr  s	            rf   r  z)GraphModuleDeserializer.generate_getitems
  s    "$ ,	THC#@PQR%%gsC1F c8,,,xxFF%%gsyy#7L  	 	 #jj44#$$cN
 #&&RL+syy:O   ''(=>*22,  'Y&$(JJ$:$:#$$cN"	 %; %! %04!&&u-!&&--.CD),LSE*RSSY,	Tre   c                    | j                  |j                        }g }t        |j                        dk(  rt	        |j                  d   j
                  t              sJ t	        |j                  d   j
                  d   t              sJ | j                  |||j                  d   j                  |       n| j                  |||j                  |       t        |      |j                  d<   || j                  |j                  <   y )Nr$   r   r  )rl  rv  r
  r2  rq   rk   r:  rR   r  r~  r   r[  r  rA  )r   r`  rs  r  rz  s        rf   r  z4GraphModuleDeserializer.deserialize_multiple_outputs
  s     !% 9 9/:R:R S !&&'1,o55a8>>EEEo55a8>>qA>RRR""''*55%	 ""'?#:#:<Q
 $HoU5<$$W\\2re   rv  c                 d    i }|j                  d      x}r||d<   dt        f fd}|j                  d      x}r3d d t        fd|j                  t              D              }||d<   |j                  d      x}rNg }|j                  t              D ]/  }	|	j                  d	      \  }
}|j                  |
 ||      f       1 ||d<   |j                  d
      x}r!t        |j                  t                    |d
<   |j                  d      x}rt        j                  |      |d<   |S )Nr  r  c                 <   d }| j                  d      r%t        j                  }| j                  d      dd  }n=| j                  d      rt        }| j                  d      dd  }nj	                  |       S |}|D ]  }t        ||      s| c S t        ||      }  |S )Nztorch.nnro  r"   rr   r$   )rp  rr   r   r  r  r  r  )r  rr  r  r,  rA  r   s        rf   deserialize_meta_funczKGraphModuleDeserializer.deserialize_metadata.<locals>.deserialize_meta_func"  s    F ++J7*;*A*A#*Fqr*J'"--g6*;*A*A#*Fqr*J'001BCCF/ 3vt,,,$VT2F	3
 Mre   r  c                     | ||ffS ri   rd   )keyr  r  s      rf   import_nn_module_stackzLGraphModuleDeserializer.deserialize_metadata.<locals>.import_nn_module_stack7  s    T2J&re   c                     g }d\  }}d\  }}t        |       D ]>  \  }}||v r|dz  }||v r|dz  }|dk(  s |dk(  s&|j                  | ||        |dz   }@ |j                  | |d         t        |      dk(  sJ |S )N)r   r   )z[(z)]r$   r  r      )r  rd  r
  )rv  r   startr  r  rD  endcs           rf   metadata_splitzDGraphModuleDeserializer.deserialize_metadata.<locals>.metadata_split;  s    q!1'1 (FCAvQaQca1f

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

8EF+,3x1}$}
re   c              3   4   K   | ]  }  |         y wri   rd   )ru   rg  r  r  s     rf   rw   z?GraphModuleDeserializer.deserialize_metadata.<locals>.<genexpr>K  s#      # 't(<=#s   r  r  r  r  )	ry  r!  r	  r  r  rd  r   r   r   )r   rv  r  r  r  nn_module_stack_strr  source_fn_st_strr  source_fn_strrA  
target_strtorch_fn_str
custom_strr  r  s   `             @@rf   rl  z,GraphModuleDeserializer.deserialize_metadata  sO    ",,}55;5!,C	S 	& #+,,/@"AAA'  # #/55lC# O &5C!"'||,=>>>L!1!7!7!E O#0#6#6s#; j##T+@+L$MNO &2C!"#<<
33<3#L$6$6|$DEC
O!h//:/ JJz2CM
re   r  c                 b   t         j                  d|       |j                  dk(  r*t        j                  |j
                  j                        S |j                  dk(  r*t        j                  |j                  j                        S |j                  dk(  r*t        j                  |j                  j                        S |j                  dk(  r:t        j                  |j                  j                  | j                  |            S t        j                  d| j                  |            S )	Nz[deserialize_argument_spec] %srT  r  rV  r  rZ  rk  r  )r  r\  r   rb  rR   rT  rA  rQ   rV  r  rO   r  r|  rZ  rV  r  s     rf   rw  z1GraphModuleDeserializer.deserialize_argument_speca  s    		2A666[ $$!++*:*:;;VV|#$$!,,*>*>??VV~%&&ANN,B,BCCVV&&&__))1G1G1J  &&Bd6L6LQ6OPPre   r  c           	      \   t        j                  |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j                  |       c}t        |j                        t        |j                        |j                  x}r|      S d       S c c}w c c}w )Nr  )	rb  r>   r1  rw  r2  r   r  r  r  r  s       rf   !deserialize_module_call_signaturez9GraphModuleDeserializer.deserialize_module_call_signaturep  s     %%;P;W;W67..q1 <Q;X;X67..q1 ##8#@#@A#$9$B$BC.@@@@ $
 	
 
 	
s   B$B)
rG  c           	          t         j                  d       |D cg c]J  }t        j                  |j                  |j
                  r| j                  |j
                        nd       L c}S c c}w )Nz 
[deserialize_module_call_graph]r  )r  r\  rb  r=   r  r  r  r  s      rf   r  z5GraphModuleDeserializer.deserialize_module_call_graph  sg     			56 +

  II  ::5??K

 
	
 

s   AA,)r   Nri   )NN)Sra   rb   rc   dataclassesr	   r  r   r   r   r  r!  r  r  r   r   r   r   r   r   r/  r   rP   rr   r6  rN   r9  rJ   r<  rS   r   r   r*   rb  rE  rj  rA   rG  r/   rb  r   rW  r3   ry  rC   r|  r2   r  r~  r1   r	  r]  r   r   r   r   r   r  rU  rh  rn  r:  r?   rk  r%   rV  r)   rx  r  rj  rm  rR   rQ   rO   r  r  r  rl  r  rw  r>   r  r=   r  rd   re   rf   r]   r]     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t1 t1h t14 t1l3<	 3<bll 3<j3= 3= 3=j
 
B<S<S 
 QUu)!,u)  %T#u||*;%<e%CDu) c3h./	u)
 !%ellC/0$sCx.@A5HI
u) 'tC1L1L,L'MNu) 
u)nA Auxx}} AL%#$ %#N%T--@ %L>X L># L>\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  	!
re   c                   d   e Zd Zddeeeef      fdZdeeej                  f   deee
j                  f   dee
j                  e	f   fdZ	 ddd	d
edeeeej                   f   ef   deeeej                   f   ef   deeeeej                   df   eeef   f   ef      dej                  f
dZy)r^   Nexpected_opset_versionc                     i | _         |r| j                   j                  |       d| j                   vr,t        j                  j	                         | j                   d<   y y r  )r  r  rr   rV  r  )r   r  s     rf   r   z$ExportedProgramDeserializer.__init__  sR    68#!''../EF44427((2T2T2VD''/ 5re   r(  r!  r   c                     t         j                  d       i }|j                         D ]K  \  }}|j                  |      x}rt         j                  d||       |||<   6t         j	                  d|       M |S )Nz 
[deserialize_range_constraints]z([deserialize_range_constraints] %s -> %sz;Symbol %s did not appear in the graph that was deserialized)r  r\  rj   ry  r  )r   r(  r!  r#  rl   rm   symbols          rf   deserialize_range_constraintsz9ExportedProgramDeserializer.deserialize_range_constraints  s    
 			56(..0 	DAq.22155v5		DaK,-!&)QST	 ! re   F_unsafe_skip_version_checkr{   r|   r}   r~   .c                   t        |t              sJ |j                  }|j                  t        d   k7  r@|j                  dk(  r|j
                  dk(  s"|s t        d|j                   dt         d      |j                  j                         D ci c]M  \  }}|t        j                  t        |j                  t               t        |j                  t                    O }	}}t               j!                  |j"                  ||||	      }
| j%                  |	|
j&                        }t)        j                  |
j"                  |
j"                  j*                  |
j,                  |
j.                  ||
j0                  |
j2                  |
j4                  |j6                  D cg c]  }t9        |       c}	      }|j:                  |_        t>        jA                  d|       |S c c}}w c c}w )Nr   zSerialized schema version z+ does not match our current schema version ro  )	rootr  rF  r|   r#  rG  r~   r}   r  z
[deserialize]: %s)!rq   r,   r  r  rH   r  r`   r#  rj   r   r   r  min_valr   max_valr]   r  r  r  r  rb  r  r  r|   rG  r~   r}   r  r   r  r  r  r\  )r   r{   r|   r}   r~   r  versionrl   rm   r(  resr#  r  s                rf   r  z'ExportedProgramDeserializer.deserialize  s    *O<<<"11 ==N1--MMQ7==A#5-$01A1P1P0Q RAAO@PPQS  )::@@B 

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

 4 Bs   1E-&E2 E7r  c                 j    t        j                  t        |       t        d      j	                  d      S )NF)r   	allow_nanr   )r   r   r   r   r   )r  s    rf   _to_json_bytesr    s+    ::(-;%PWW re   r{   r  c                 J   t        | j                        5  t        ||      j                  |       }d d d        t	        j
                  t              sJ t        |j
                        }t        ||j                  |j                  |j                        }|S # 1 sw Y   hxY wri   )r   r~   r\   rZ   rq   r{   r,   r  rz   r|   r}   )r{   r  r   serialized_program
json_bytesr   s         rf   rZ   rZ     s    
 
00@0O0O	P &6?

)$
% 	& (99?KKK 2 C CDJ!%%$$))	H O& &s   BB"c           	         t        | t              rJ d|  d       t        j                  |       t        k(  rt        | j                  |      S t        j                  |       t        j                  k(  rWt        d       t        j                  |       v r7|y t        j                  |       }t        |      dk(  sJ t        |d   |      S t        | t              rt        | t              rt        |t              sJ t        |      dk(  sJ t        t        |j!                                     }t        t        |j#                                     }t        |t              sJ | j$                  |   } | j&                  di |t        ||      iS t)        j*                  |       rai }t        j,                  |       }t)        j.                  |       D ]*  }|j0                  }	|	|vrt        ||	   ||	         }
|
||	<   ,  | di |S t        |t2              rBt        |      dk(  r|S t        j                  |       d   }|D cg c]  }t        ||       c}S t        |t              rFt        j                  |       d   }|j5                         D ci c]  \  }}|t        ||       c}}S | t6        k(  rt7        |      S |S c c}w c c}}w )NzUnresolved class type: 'z'.r"   r   r$   rd   )rq   r!  typing
get_originr   r   
__origin__r   r   get_argsr
  
issubclassrY   r	  r  iterr  r_  r   r   r  r  get_type_hintsr  rA  r:  rj   r   )r   dataty_argsrH  _value
field_typer  
type_hintsr  rA  new_field_objd_typerg   v_typerl   rm   s                   rf   r   r   &  ss   #s#G'?uB%GG#*!#..$77-$t*PS@T2T<//#&7|q   !'!*d33	C	:c6#:$%%%4yA~~T$))+&'d4;;=)*%%%%((/
szzLU$6z6$JKLL		!	!#	&**3/
 ##C( 	)A66D4.z$/?dLM(F4L	) }V}	D$	t9>K%a(7;<!"61-<<	D$	%a(=AZZ\JTQ%fa00JJ	T{K = Ks   KK	r   artifact_bytesc                 j    |j                  d      }t        j                  |      }t        | |      }|S r  )r   r   r   r   )r   r'  artifact_strartifact_dictartifact_dataclasss        rf   _bytes_to_dataclassr,  Q  s3    !((1LJJ|,M+C?re   Fr  r  c                    t        | j                  t              sJ t        t        | j                        }t        |      j                  || j                  | j                  | j                  |      S )Nr  )
rq   r{   r   r,  r,   r^   r  r|   r}   r~   )r   r  r  serialized_exported_programs       rf   r  r  X  sr     h//777"522# ''=>JJ##= K  re   c                 $    dt         fdfd fd} |j                        }t        |      t        j                        k(  sJ i fd}fd} D ]  } ||        |D ]  }	|	j                  D ]  }
 ||
         |D ]&  }	|	j                  D ]  } ||j
                          ( |D ]  }
 ||
        |D ]  }	|	j                  j                           t        t        j                  j                         t        j                  d                  }t        t        j                  j                         t        j                  d                  }t        t        j                  j                         t        j                  d                  }t        t        j                   j                         t        j                  d                  }t        t        j"                  j                         t        j                  d                  }d}|D ]  }|j                  D ]  }|j
                  }|j$                  d	k(  st'        |j(                  j*                  j                  |j(                  j*                  j                  |j(                  j*                        \  |j(                  _        }d
| |j(                  _        |dz  }  t/         ||||||j0                  |	      fS )Nr  c                 :   | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   d	k(  ry | j                   d
k(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  r| j
                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry t        d|        )Nr  rT  r~  r   r  r   r  r	  r  r  rV  r$  r  r&  r8  r:  r;  r9  r   r  r  r*  r  r1  rZ  r?  z+Unknown input type to the ExportedProgram: )r   rT  r~  rV  r$  r  r&  r  r*  r1  rZ  r`  r/  s    rf   _get_argumentz*_canonicalize_graph.<locals>._get_argumentn  s   66YVV{";;VV|#<<VVxVVy VVz!VV{"VV{"VV|#VV|#VV|#<<VV}$== VV~%>>!VV&??"VV''VV))VV{"VV{"VVy VVz!VV}$== VV~%>>!VVz!VV,,(((VV&??"VV}$ #Nqc!RSSre   c                 b    t        |t              sJ t        j                  |  |             y ri   )rq   r%   r  tree_map)r  r  r1  s     rf   for_argsz%_canonicalize_graph.<locals>.for_args  s&    !X&&&=+,re   c                 0    t          G d d             }t               i i g i g }dt        t           fdD ]  }fd} ||        t	               D ]2  \  }fd}|j
                  D ]  } ||         |g d      <   4 t	               D ]3  \  }fd}	|j                  D ]  } |	|j                          5 fd	}
fd
D ]  } |
|        dt        f fd}j                         D ]  \  }|j                  dk(  s |        t              dkD  rt        j                        \  }}    }|j
                  D ]  } |
|        |j                  |       v sJ    j                  D ]E  }|   }|j                  dkD  sJ |xj                  dz  c_
        |j                  dk(  s> ||       G    j                  j!                          t              dkD  r|S )Nc                   (    e Zd ZU ee   ed<   eed<   y)6_canonicalize_graph.<locals>.sort_nodes.<locals>.EdgesoutsinsN)ra   rb   rc   r:  r   r   rd   re   rf   Edgesr7    s    s)OHre   r:  r   c                    | y t        | t              r| j                  S t        | t        t        t
        f      r8| j                  dk(  r| j                  S | j                  dv ry t        d|        t        | t              rC| j                  dk(  r| j                  j                  S | j                  dk(  ry t        d|        t        | t              r| j                  S t        d|        )Nr  )r   r   r   Unknown argument type: rT  r  zUnknown optional tensor type: )rq   rR   rA  rQ   rK   rO   r   r  r`  rB   rT  r*   r/  s    rf   r7  z9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_name  s    y!^,vvAAQRS66Y&99$VV@@(+B1#)FGGA5666[(;;+++VVy((+I!)MNNA01vv$'>qc%BCCre   c                 >     |       x}rj                  |       y y ri   )r   )r  r   r7  graph_inputss     rf   	add_inputz:_canonicalize_graph.<locals>.sort_nodes.<locals>.add_input  s%     #1# $$Q' $re   c                 2     |       x}r|vsJ |<   y y ri   rd   )r  r   	def_tabler7  r  s     rf   add_defz8_canonicalize_graph.<locals>.sort_nodes.<locals>.add_def  s.     #1#I---#&IaL $re   r   c                      |       x}rL|v ry |vr|v sJ y |   }|   j                   j                            xj                  dz  c_        y y )Nr$   )r8  rd  r9  )	r  r   srcr}   rA  edgesr7  r>  r  s	      rf   add_edgez9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_edge  sk     #1#I~	) L000#A,C#JOO**3/#JNNa'N $re   c                 D     |       x}r|vsJ t              |<   y y ri   )r
  )r  r   r7  ranks     rf   add_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_rank  s0    QKq}$}d)Q  re   c                 ,     |       }|r	|vr|   S y)Nr  rd   )r  r   r}   r7  rH  s     rf   get_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_rank  s"    AQi'Awre   r  c                     fd}|    }|j                   D cg c]   }|j                   ||j                        f" }}t        j                  |j
                  || f       y c c}w )Nc                 (    g  fd|        S )Nc                 2    j                   |             S ri   )rd  )r  rK  rankss    rf   rL  zc_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks.<locals>.<lambda>  s    5<<#< re   rd   )r  rO  r4  rK  s    @rf   	get_rankszQ_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks  s    <a@re   )r1  rA  rl  heapqheappushr,  )	r  rP  r   r  	args_rank
candidatesr4  rK  r3  s	        rf   add_candidatez>_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate  s[    
 :D=A[[I!&&)AEE"23IIINN:Y'DE Js   %A&r$   )r	   r   r   r!  r  r2  r1  rl  r   rj   r9  r
  rQ  heappoprd  r8  clear)r3  r:  r  r  r?  r   rB  rz  r  rF  rI  rU  r  r  rT  rA  rE  r7  rK  r>  r  rH  r}   r4  sorted_inputss   `             @@@@@@@@rf   
sort_nodesz'_canonicalize_graph.<locals>.sort_nodes  sI   		 	 
	 "%$&	"$IK
!	D8C= 	D0  	#A( Y"	# #5) 
	&IC'
 \\ %!$% r1E#J
	& #5) 	*IC	( 	( [[ *155)*	* 	$
	  	"AXq!	"	Fs 	F 	F kkm 	#FCuuzc"	# *o!j1IAq#:D\\ &1%&JJt%<<c
 ($Kuuqy y
55A:!$'( #JOO!!# *o! 
re   c                    fd}| y t        | t              r# || j                  j                        | _        y t        | t              r3| j
                  dk(  r# || j                  j                        | _        y y t        | t              r3| j
                  dk(  r# || j                  j                        | _        y y t        | t              r3| j
                  dk(  r# || j                  j                        | _        y y t        | t              r# || j                  j                        | _        y t        d|        )Nc                 n    dt               }| vsJ || <   | |v sJ |j                  |       ||<   |S )Nr  )r
  pop)r\  r_  new_name
name_tables      rf   r  z8_canonicalize_graph.<locals>.rename_def.<locals>._rename)  sR    3z?+,H:---#+Jx v%%%%zz(3F8Ore   r  r<  )rq   rR   rA  r4  rQ   r   r  r5  rO   r7  rK   r6  r*   r9  r`  )r  r  r  r^  s     rf   
rename_defz'_canonicalize_graph.<locals>.rename_def(  s   	 9a(QVVU%8%89AF>*vv"#AIIu/C/CD	 #+,vv"#AIIu/E/EF	 #?+vv"#AIIu/D/DE	 #,-QVVU%<%<=AF #:1#!>??re   c                 &   | y t        | t              r,j                  | j                  | j                        | _        y t        | t        t
        f      r<| j                  dk(  r,j                  | j                  | j                        | _        y y t        | t              r<| j                  dk(  r,j                  | j                  | j                        | _        y y t        | t              rZ| j                  dk(  rJj                  | j                  j                  | j                  j                        | j                  _        y y t        | t              r,j                  | j                  | j                        | _        y t        d|        )Nr  rT  r<  )rq   rR   ry  rA  rQ   rO   r   r  rK   rB   rT  r*   r`  )r  r^  s    rf   replace_usez(_canonicalize_graph.<locals>.replace_useC  s   9a(^^AFFAFF3AFN,<=>vv"&NN199aii@	 #?+vv"&NN199aii@	 #12vv$#->>!++2B2BAKKDTDT#U  %,-^^AFFAFF3AF #:1#!>??re   r   r  r  _gr$   )	r1  r2  r3  r4  r5  r7  r6  r8  r9  )r%   r3  r
  r2  r1  rl  rv  rW  r	  sortedr4  rj   r  
itemgetterr5  r7  r6  r9  r   _canonicalize_graphr  r  rA  r/   r8  )rX  sorted_outputsr  r}   rY  sorted_nodesr_  ra  r  r  rz  sorted_tensor_valuessorted_sym_int_valuessorted_sym_float_valuessorted_sym_bool_valuessorted_custom_obj_valuescounterr   r  r  r1  r4  r^  s   ` ``                @@@rf   rf  rf  k  s   6T 6Tr-un ekk*L|EKK 0000 "$J@6@&   Q   $ 	$AZ#	$$  ) 	)A[!%%(	))  !a !  	

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

 ! %'wi.

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

    This function canonicalizes an ExportedProgram by:

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

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

    Returns:
        ExportedProgram: The canonicalized exported program.
    r   rb  c                     | j                   S ri   )r  )r  s    rf   rL  zcanonicalize.<locals>.<lambda>  s    PQPUPU re   r   c                 2   | \  }\  }}t        |t              sJ |j                  dk(  rdd |fS |j                  dk(  rd|j                  j                  |fS |j                  dk(  rd|j
                  j                  |fS |j                  dk(  rd|j                  j                  |fS |j                  d	k(  rd
|j                  j                  |fS |j                  dk(  rdd |fS |j                  dk(  rd|j                  j                  |fS t        d|       )Nrn     rq  r$   r  r"   ru  r  rv  r  rx  r   rl     Unknown input type: )rq   r3   r   rq  rp  r  rr  ru  rt  rv  r`  rl  rA  r`  )r  r  _argri  s       rf   
rank_inputz canonicalize.<locals>.rank_input  s   \dD$	***99$dC<YY+%dnn33S88YY("dkk--s22YY++d**??DDYY,&doo55s::YY'!dC<YY**d))..33 #7v!>??re   c                 
   | \  }\  }}t        |t              sJ |j                  dk(  rdd |fS |j                  dk(  rdd |fS |j                  dk(  rd|j                  j                  |fS |j                  dk(  rd|j
                  j                  |fS |j                  dk(  rd	|j                  j                  |fS |j                  d
k(  rdd |fS |j                  dk(  rdd |fS |j                  dk(  rdd |fS t        d|       )Nr  r  r  r  r$   r  r"   r  rr  r  rs  r  r  rx  r   Unknown output type: )	rq   rC   r   r  rp  r  rr  r  r`  )r   r  ru  ri  s       rf   rank_outputz!canonicalize.<locals>.rank_output  s   \dD$
+++99%dC<YY-'dC<YY..d--<<cAAYY++d**66;;YY11d00??DDYY22dC<YY//dC<YY'!dC< #8!?@@re   c              3   &   K   | ]	  \  }}|  y wri   rd   ru   r  r  s      rf   rw   zcanonicalize.<locals>.<genexpr>  s     *Fa1*F   rd   c              3   &   K   | ]	  \  }}|  y wri   rd   r{  s      rf   rw   zcanonicalize.<locals>.<genexpr>  s     (EvsA(Er|  c                    t        | t              sJ | j                  dk(  r| j                  j                  }|j                  dk(  r!|j
                  }|j                     |_        y |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_        y |j                  dk(  ry t        d|       |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_        y |j                  dk(  ry t        d	|       |j                  d
v ry t        d|       | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  ry t        d|        )Nrn  rT  rV  r  r   Unknown sym_int type: r  r   Unknown sym_float type: )r  r   r   r   r	  rZ  rt  rq  r  ru  rv  rx  rl  )rq   r3   r   rn  rl  rT  rA  rV  r  r`  r  rq  r  ru  rv  rx  )ri  rl  r   r   r  t_custom_objtokreplace_tables          rf   replace_inputz#canonicalize.<locals>.replace_input  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!>??re   c                 B   t        	t              sJ 	j                  dk(  r	j                  j                  }|j                  dk(  r!|j
                  }|j                     |_        y |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_        y |j                  dk(  ry t        d|       |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_        y |j                  dk(  ry t        d	|       |j                  d
v ry t        d|       	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  rI	j                  }|j                  j                     |j                  _        |j                      |_        y 	j                  dk(  rI	j"                  }|j                  j                     |j                  _        |j                      |_        y 	j                  dk(  r+	j$                  j                  }|j                     |_        y t        d	       )Nr  rT  rV  r  r   r  r  r   r  )r  r   r   r   r	  rt  r  r  r  r  r  r  rx  rx  )rq   rC   r   r  rl  rT  rA  rV  r  r`  r  r  r  r  r  r  r  r  rx  )
r   rl  r   r   r  gur  r  ri  s
           rf   replace_outputz$canonicalize.<locals>.replace_output/  s   $
+++99%""&&Cxx;&MM&qvv.\)NN66Y& -aii 8AIVVx'(+A!)EFF^+$$66Y& -aii 8AIVVz)(+CA3)GHHVV$';C5%ABBYY-'  $$A"166*AFYY++$$((A"166*AFYY..''++A"166*AFYY11**..A"166*AFYY22++A&quuzz2AEEJ -a.?.? @AYY//((A&quuzz2AEEJ -a.?.? @AYY'!**..C$SXX.CH #8!?@@re   r  )r  r  rG  r  )"r  deepcopyr   r	  rd  r  rj   r  re  r#  r  r  rG  r  r  r
  r1  r  r2  r  r   r   r   r!  r  r  rf  r,   r1   r2   r:  r  r  r  )rb  r}   r  r#  r  rG  r  r  rv  ry  
sorted_insrX  r  sorted_outsrg  r  sorted_graphr  r  r  ri  s                      @@rf   r  r    s   , 
r	B#,suI 0 0 6 6 8h>Q>QRS>TUVMr##))+1D1DQ1GH (Kr@@oV))IOO!!Eu||I$9$9 ::::u}}Y%;%;!<<<<@5hsmS!89 @(AE#x}c"9: A, #ellI$9$9:;J :%(*F:*F%G"{#emmY%;%;<=;K $'(E(E#F NL"5~ui#L-5@n3Aj  d  t  $ -!,/ 0
 $+((,,&& re   c                   |    e Zd ZdZedefd       Zedefd       Zedefd       Zede	j                  fd       Zy)	ExtensionHandlerz6
    Base class for handling extension operators.
    r   c                 2    t        | j                   d      )Nz  namespace() must be implementedr  r  r   s    rf   r  zExtensionHandler.namespace      !S]]O3S"TUUre   c                 2    t        | j                   d      Nz op_name() must be implementedr  r   rv   s     rf   r  zExtensionHandler.to_op_name      !S]]O3Q"RSSre   rA  c                 2    t        | j                   d      r  r  )r   rA  s     rf   r  zExtensionHandler.from_op_name  r  re   c                 2    t        | j                   d      )Nz  op_schema() must be implementedr  r  s     rf   r+  zExtensionHandler.op_schema  r  re   N)ra   rb   rc   r   classmethodr!  r  r  r  rr   FunctionSchemar+  rd   re   rf   r  r  |  s     V# V V Ts T T T T T Ve22 V Vre   r  op_typeextension_handlerc                 b   t        |t              sJ d| d       | t        vs
J |  d       t        | t              sJ | j
                  j                  d      s| j
                  j                  d      rJ |j                         t        vsJ |t        | <   |t        |j                         <   y)zJRegister custom de/serialization method for a node with non-standard type.zExpected ExtensionHandler, got ro  z is already registered.rr   builtinsN)	r  r  r*  rq   r   rb   rp  r  r  )r  r  s     rf   register_extensionr    s    
 ')9: 
)*;)<A>: 11VgY>U3VV1gt$$$%%g.((4  &&(0IIII'8G$?P/99;<re   c                  <    t        t        j                               S ri   )r   r*  r  rd   re   rf   r  r    s    (--/00re   r*  r  ri   (  r  r  r   r  rQ  r  r   r   r  loggingr  r  r  r  collectionsr   r   collections.abcr   r   r   
contextlibr   r	   r
   enumr   r   r   r   r   r   r   r   r   rr   torch.export.exported_programexportr{   rb  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    torch.utils._tritonr!   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   rU   rV   rW   rX   unionrY   __all__	getLoggerra   r  r  r`   r	  rn   r   r   r   MetaTyper  r  uint8BYTEint8CHARuint16UINT16int16SHORTint32INTint64LONGfloat16HALFfloat32FLOATfloat64DOUBLE	complex32COMPLEXHALF	complex64COMPLEXFLOAT
complex128COMPLEXDOUBLEBOOLbfloat16BFLOAT16float8_e4m3fnFLOAT8E4M3FNfloat8_e5m2
FLOAT8E5M2float8_e4m3fnuzFLOAT8E4M3FNUZfloat8_e5m2fnuzFLOAT8E5M2FNUZr   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PreserveFormatrU  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truedivr  anyrz   r   r   r   r   r   r   r   r   r   r   r/  r   r   r   r   r]  r   r   r   r   r   r   r  r!  r  r  r  r   r"  r'  r-  r/  r   r<  r[   r\   r]   r^   JSONEncoderr   r   r  rZ   r   r,  r  rf  r   r  r  r  r  r*  r  rd   re   rf   <module>r	     s[	         	        / 8 8 % (  I I I   * * Q 0 D ; 1 ) > - 6 7 4 * 05 5 5 5 5 5 5 5 5 5 5 5 5 5l  g!	\ 	.DdO . 	LL		NN	MM	  	KK	JJ
 
LL*## 
KK!!	
 
KK 
KK 
MM:?? 
MM:## 
MM:$$ 
OOZ++ 
OOZ,, 
j.. 
JJ
 
NNJ'' 
00  
z,,!" 
:44#$ 
:44% , ))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      #d #24& 4U\\ 4@HV, @sCx @F 0 FU38_ F)
 )u{{ )v # 
(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 P
e P
 P
f& @
% @
 @
F u
 u
 u
p# QE Q Qh$$"" $6   /32((DcN+  	*(VS % C  8<  %	 $T#s(^4
 &h
5$sCx. !hX	 :>cc$,SX$6ccLV V,Q#YQ,-Q&1 DF d3i.>)??@ E?A 4T*:%; ;< Are   