
    Vh$                       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 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mZ d dl Z d dl!Z!d dl"m#c m$Z% d dl&m'Z' d d	l(m)Z) d d
l*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0 d dl1m2Z3 d dl4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z:m;Z; d dl<m=Z= ddl>m?Z? ddl@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZr ddlsmtZt g dZu e	j                  ew      Zx G d dey      Zzde{eef   fdZ|ee-e}e!j                  e~e!j                  ee!j                  e%j                  f   ZdZdZi e!j                  eaj                  e!j
                  eaj                  e!j                  eaj                  e!j                  eaj                  e!j                  eaj                  e!j                  eaj                  e!j                  eaj                   e!j"                  eaj$                  e!j&                  eaj(                  e!j*                  eaj,                  e!j.                  eaj0                  e!j2                  eaj4                  e!j                  eaj6                  e!j8                  eaj:                  e!j<                  eaj>                  e!j@                  eajB                  Z e|e      Ze!jH                  eUjJ                  e!jL                  eUjN                  e!jP                  eUjR                  e!jT                  eUjV                  e!jX                  eUjZ                  e!j\                  eUj\                  e!j^                  eUj`                  iZ e|e      Ze!jf                  eWjh                  e!jj                  eWjl                  e!jn                  eWjp                  e!jr                  eWjt                  iZ e|e      Zejz                  ej|                  ej~                  ej                  ej                  ej                  ej                  ej                  e
j                  e!j                  ej                  ej                  ej                  ej                  ej                  ej                  e!j                  e!j                  e!j                  e!j                  e!j                  e!j                  ej                  ej                  hZ ed eD              rJ e G d d             Ze G d  d!             ZdeFd"e!j                  fd#Zd$ee!j                  e!j                  e!j                  e j                  f   fd%Zd$ee}e!j                  f   d"ejfd&Zd$ee~e!j                  f   d"ehfd'Zd$eee!j                  f   d"edfd(Zd)e!j                  d"emfd*Zdaed+   ed,<   d-e-fd.Zd/ed0ed"e-fd1Zefd2ee   d3e}d"efd4Zd5ee{eef   eed6f   ef   fd7Zd8e j                  d9ed"ee}   fd:Zd8ee}   d"e j                  fd;Zd<e j                  d=e;fd>Zd?e{e j                  e=f   d"e{ee`f   fd@ZdA Ze G dB dC             Z G dD dEe      Ze G dF dGeH             Ze G dI dJeH             Ze G dK d+eH             Ze G dL dMeH             Z G dN dOej                        ZdP ZdQed"efdRZdefdSe%j                  dTee{ee}f      d3e}d"efdUZdV Z	 dgdWdXd2edYee{ee}f      d"e%j                  fdZZd"eeJe{eef   f   fd[Zdgd\eGd]ee e      d"eGfd^Z G d_ d`      Zdaee   dbee   fdcZdd Zi Ze{ee   ee   f   ede<   i Ze{eee   f   edf<   y)h    N)OrderedDict
namedtuple)contextmanager)	dataclassfield)Enum)	AnnotatedAnyCallablecastfinalOptionalUnion)Iterator)load_verifier)&_enable_graph_inputs_of_type_nn_module)FakeScriptObject)
FakeTensorFakeTensorMode)symbolic_shapes)_pytree)treespec_dumpstreespec_loads)int_oo)
prefix_strSymT)ValueRanges   )remove_proxy_from_state_dict   )2ArgumentArgumentKindBufferMutationSpecConstantValueCustomObjArgumentDeviceExportedProgramGradientToParameterSpecGradientToUserInputSpecGraphGraphArgumentGraphModuleGraphSignature	InputSpecInputToBufferSpecInputToConstantInputSpecInputToCustomObjSpecInputTokenSpecInputToParameterSpecInputToTensorConstantSpecLayoutLossOutputSpecMemoryFormatModuleCallEntryModuleCallSignatureNamedArgumentNamedTupleDefNodeOptionalTensorArgument
OutputSpecOutputTokenSpecRangeConstraint
ScalarTypeSCHEMA_VERSIONSchemaVersionSymBoolSymBoolArgumentSymExprSymExprHintSymFloatSymFloatArgumentSymIntSymIntArgumentTensorArgument
TensorMetaTokenArgumentTREESPEC_VERSIONUserInputMutationSpecUserInputSpecUserOutputSpec)_Union)	serializeGraphModuleSerializerExportedProgramSerializerGraphModuleDeserializerExportedProgramDeserializerc                       e Zd Zy)SerializeErrorN)__name__
__module____qualname__     M/home/dcms/DCMS/lib/python3.12/site-packages/torch/_export/serde/serialize.pyrZ   rZ   r   s    r_   rZ   dc                 j    | j                         D ci c]  \  }}|j                  | c}}S c c}}w N)itemsvalue)ra   kvs      r`   _reverse_maprh   v   s(    #$779-41aAGGQJ---s   /;c              #   d   K   | ](  }t        |t        j                  j                         * y wrc   )
isinstancetorch_ops
OpOverload).0ops     r`   	<genexpr>rq      s!     Hz"ejj334H   .0c                   6    e Zd ZU eed<   eed<   eed<   eed<   y)SerializedArtifactexported_program
state_dict	constantsexample_inputsN)r[   r\   r]   bytes__annotations__r^   r_   r`   rt   rt      s    r_   rt   c                   6    e Zd ZU eed<   eed<   eed<   eed<   y)_SerializedProgramru   rv   rw   rx   N)r[   r\   r]   r'   rz   ry   r^   r_   r`   r|   r|      s    %%r_   r|   returnc                     | j                    t        j                  | j                        S t        j                  | j                  | j                         S )N)typer   index)r   rl   devicer   )ra   s    r`   deserialize_devicer      s7    ww||((<<QVV17733r_   sc                     t        | t        j                  t        j                  t        j                  f      r| j
                  j                  } t        j                  j                  j                  |       S rc   )rk   rl   rJ   rD   rH   nodeexprsympyprintingreprsreprr   s    r`   _print_sympyr      sG    !ellEMM5>>BCFFKK>>$$Q''r_   c                 v   t        | t        j                  t        j                  t
        f      rt        j                  |       rt        j                  t        |             S t        | t        j                  t        j                  f      sJ | j                  j                  (t        j                  t        t        |                   S t        j                  t        t        |       t        j                  | j                  j                                    S t        d|  dt        |        d      )Nas_intas_exprhintz,SymInt should be either symbol or int, got `` of type ``)rk   rl   rJ   r   Symbolintr   is_concrete_intcreater   r   rF   r   rG   rZ   r   r   s    r`   serialize_sym_intr      s    !ellELL#67**1-==A//a%,,!=>>>vv{{"}}W\!_-EFF}}#$Q(//qvv{{C  :1#[a	QRS
 	
r_   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   )rk   rl   rH   r   r   floatr   is_concrete_floatr   r   r   rF   r   rG   rZ   r   r   s    r`   serialize_sym_floatr      s    !ennellE:;,,Q/??E!H55a%..%,,!?@@@vv{{"w|A/GHH#$Q(//E  >qcTRSWIUVW
 	
r_   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   )rk   rl   rD   boolr   is_concrete_boolr   rF   r   rZ   r   r   s    r`   serialize_sym_boolr     sz    !emmT*+++A.>>$q'22>>a9  <QC{4PQ7)STU
 	
r_   tc                    t        t        | j                     | j                  D cg c]  }t	        |       c}| j
                  t        | j                  j                  | j                  j                        | j                         D cg c]  }t	        |       c}t	        d      t        | j                           S c c}w c c}w )z.
    Extract a TensorMeta describing `t`.
    r   r   )dtypesizesrequires_gradr   stridesstorage_offsetlayout)rM   _TORCH_TO_SERIALIZE_DTYPEr   shaper   r   r&   r   r   r   stride_TORCH_TO_SERIALIZE_LAYOUTr   )r   r   s     r`   serialize_tensor_metar   !  s     '0-.WW5 #5oo188==?/0xxz:!"1%:(+)!((3 5 ;s   C
CrW   _CURRENT_DESERIALIZERfake_tensorc                     t        | t        j                  j                        }t	        |       }t        j                  t        |      t              j                  d      }t        ||ffS )Nclsutf-8)rk   rl   nn	Parameterr   jsondumps_dataclass_to_dictEnumEncoderencode_reconstruct_fake_tensor)r   is_parametertensor_metatensor_meta_bytess       r`   _reduce_fake_tensorr   3  sY    k588+=+=>L'4K

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

8V_E "":.G"":.s   AB B(
serialized.c                     t        | t        t        f      r| S t        |       dk(  ri S t	        j
                  |       }|j                  d       t        j                  |d      }t        |t        t        f      sJ |S )Nr   F)weights_only)	rk   dicttuplelenr   r   seekrl   load)r   r   r   s      r`   deserialize_torch_artifactr   b  si    *tUm,
:!	ZZ
#F
KKNzz&u5Hh...Or_   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   rk   Integerr   logwarningr   mathr   r   RuntimeError)r   r   s     r`   _sympy_int_to_intr   o  s    
uxx  
y6'""#u}}%3x KK	Cy#v zz#	6	yy~4VH=>>r_   c                     | |S | t         j                  k(  rt        S | t         j                   k(  rt         S t        j                  |       S rc   )r   infr   r   r   )r   defaults     r`   _int_to_sympy_intr     s@    
{
dhh
txxiw==r_   symsym_typec                 P    t        t        |       t        t        |         d        S rc   )r   strr   r   )r   r   s     r`   _symbol_indexr     s#    s3xJx012344r_   range_constraintsc                     | j                         D ci c]C  \  }}t        |      t        t        |j                  d      t        |j
                  d            E c}}S c c}}w )Nr   r   )rd   r   r@   r   lowerupper)r   rf   rg   s      r`   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 )	rk   rl   rm   rn   _schemar   _serialization_registry	op_schemar   )targets    r`   _get_schema_from_targetr    s^    &%**//0~~	f0	0&tF|4>>vFF
0f?
@@r_   c                   @   e Zd ZU  ee      Zee   ed<    ee      Zee   ed<    ee      Z	ee
   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<   d	Zeed
<    ee      Zeeef   ed<   y)
GraphState)default_factoryinputsoutputsnodestensor_valuessym_int_valuessym_bool_valuessym_float_valuesFis_single_tensor_returncustom_obj_valuesN)r[   r\   r]   r   listr  r!   rz   r  r	  r<   r   r
  r   rM   r  rJ   r  rD   r  rH   r  r   r  r%   r^   r_   r`   r  r    s    "48FDN8#D9GT(^9d3E4:3+0+FM4Z(F(-d(CNDf%C*/*EOT#w,'E,1$,Gd3=)G$)T)6;D6QtC!223Qr_   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)rk   r  	TypeErrorr[   r   __new__r   )metaclsnamebases	classdictbs        r`   r  zFinal.__new__  sQ     	WA!U#&4T UVV	W ||GT5$y/BBr_   N)r[   r\   r]   r  r^   r_   r`   r  r    s    Cr_   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)7rU   graph_signaturemodule_call_graphc                 h    t               | _        || _        || _        i | _        i | _        i | _        y rc   )r  graph_stater  r  custom_objsduplicate_getitem_nodestreespec_namedtuple_fields)selfr  r  s      r`   __init__zGraphModuleSerializer.__init__  s6    
 &<.!2=?79$DF'r_   c              #   r   K   | j                   }t               | _         	 d  || _         y # || _         w xY wwrc   )r  r  r#  saveds     r`   save_graph_statez&GraphModuleSerializer.save_graph_state  s3       %<	%$DuDs   7+ 7	47r   c           
          |j                   dk(  sJ |j                  d   }t        j                  d|j                  |       t        |t        j                        r2t        j                  | j                  |j                  |            }nLt        |t        j                        r2t        j                  | j                  |j                  |            }n t        |t        j                        rt        d      t        |t        t         t"        t$        t'        d       f      r| j)                  |      }nt        |t*        j,                        rj|j.                  }t        j                  t-        |j                  |            }| j1                  |      | j2                  j4                  |j                  <   nt        d	|j                  d          | j2                  j6                  j9                  |       y )
Nplaceholderr   z[handle_placeholder] %s: %s	as_tensor
as_sym_intz,SymFloat graph input is not implemented yet.r  	class_fqnas_custom_objz Unimplemented graph input type: )rp   metar   debugr  rk   rl   Tensorr!   r   serialize_tensor_outputrJ   serialize_sym_int_outputrH   AssertionErrorr   r   r   r   r   serialize_inputepr%   r0  serialize_script_obj_metar  r  r  append)r#  r   r   graph_inputr0  s        r`   handle_placeholderz(GraphModuleSerializer.handle_placeholder  st   ww-'''ii		/C@c5<<("//D4P4PQUQZQZ\_4`aKU\\*"//T5R5RSWS\S\^a5bcK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&&{3r_   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)rp   r   argsr   r4  r  rk   rl   fxr<   r  r  r9  r  r   r  )r#  r   	node_argsargs       r`   handle_outputz#GraphModuleSerializer.handle_output  s    ww("""499~"H$HH"IIaL			*DIIyAi/7;D4(,(<(<Y(G'HD$i%777MV'Wc(<(<S(A'WD$'Ws   C?r}   c                     t        |t              r|S |j                  j                  d      r-|j                  j	                  dd      }| d|j
                   S |j                   d|j
                   S )Nz
torch._opsz	torch.ops.)rk   r   r\   
startswithreplacer[   )r#  r  modules      r`   serialize_operatorz(GraphModuleSerializer.serialize_operator  sr    fc"M)),7 &&..|[IFXQv/00''(&//):;;r_   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-                  |            }nt        |j                  t        j.                  j6                        rdt8        fd}|j                  t        j:                  j<                  u rt?        |j                        }|j                  d   j
                  }tA        |jB                  jD                  |      sJ tG        |jB                  jD                  |      }|jH                  |d<   d |d<    fd	}t%         j'                  |j                         jK                  ||j                         ||       j-                  |      d
      }nt%         j'                  |j                         jK                  |j                  |j                         jM                  |       j-                  |       ||            }nCtO        |j                        tP        v rtO        |j                        tP        v sJ tO        |j                         d       tP        tO        |j                           }	|	jS                         }
|	jU                  |j                        }t        |
tV              rt        |tV              sJ d|
vrd|vsJ t%        d|
 d|  j3                  |j                  |j                  |j                         j5                  |       j-                  |            }ntY        d|j                   d       jZ                  j\                  j_                  |       y )Ncall_functionr   z-[handle_call_function] %s: %s(%s, {%s}) -> %sr   )r  r  r  metadatar}   c                     t        | j                  t        j                  j                        sJ | j
                  j                  dd       }|d uxr t        |t        j                        S )Nr   )rk   r  rl   rm   HigherOrderOperatorr3  getr5  )r   meta_vals     r`   _is_hop_single_tensor_returnzPGraphModuleSerializer.handle_call_function.<locals>._is_hop_single_tensor_return'  sO    !$++uzz/M/MNNN99==5t+R
8U\\0RRr_   r    c                     | j                   j                  dd       }g }t        |      D ]8  \  }}j                  | |      }|j	                  j                  ||             : t        j                  |      gS )Nr   
as_tensors)r3  rQ  	enumerate_output_node_name_at_indexr<  r6  r!   r   )r   rR  tensor_argsidxr3  r  r#  s         r`   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Dr_   F)r  r  r  rN  is_hop_single_tensor_returnz* is not supported in export serialization.:#zSerializing z is not supported)0rp   r3  rQ  r   r4  r  r  rA  kwargsoperatorgetitem_SYM_OPSrk   rl   rJ   rD   rH   r   r<   rK  serialize_sym_op_inputsserialize_outputserialize_metadatarm   rn   serialize_inputsserialize_outputsrP  r   _higher_order_opsaoti_call_delegater  hasattrgraphowning_modulegetattr	aoti_pathserialize_hoo_inputsserialize_hoo_outputsr   r   	namespace
to_op_namer   rZ   r  r	  r<  )r#  r   rR  ex_noderS  serializable_argslowered_module_namelowered_moduler[  handlerrq  op_names   `           r`   handle_call_functionz*GraphModuleSerializer.handle_call_function
  s   ww/)))99=='		A499dkk[_[d[dfjfqfqs{| ;;(*** KK8#$Hu||U]]\a\j\j>k)l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'?'?!!$ (,!!$E 224;;?445FT8>!44T:05 224;;?44TYYL 66t<!44T:0LT0R $++"99$(??  BDDUCV  WA  BB  B?-d4;;.?@G))+I((5Gi-*Wc2JJJi'Cw,>>>9+Qwi0,,T[[$))T[[Q..t4006	G !<}<M!NOO%%g.r_   c                 D    t         j                  d|j                         y )Nz[handle_get_attr] %s)r   r4  r  )r#  r   s     r`   handle_get_attrz%GraphModuleSerializer.handle_get_attrg  s    		($))4r_   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`  ra  rA  r  r!  )r#  r   r   	user_nodeusers        r`   _output_node_at_indexz+GraphModuleSerializer._output_node_at_indexj  s    	JJ 	MD;;("2"22Stf<R4SS2		!$$ $I ?HnnD00;	M r_   c                 d    | j                  ||      }||j                   d| S |j                  S )N_unused_)r  r  )r#  r   r   r~  s       r`   rX  z0GraphModuleSerializer._output_node_name_at_indexw  s9    ..tU;	ii[00>>!r_   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   ,)rk   r   r   r   )r   pathtys      r`   export_nn_module_stackzHGraphModuleSerializer.serialize_metadata.<locals>.export_nn_module_stack  sS    !#u-#c(a-??b!$,,,!"c***czB&r_   r  source_fn_stackr   r    torch_fncustomz-Failed to serialize custom metadata for node z with error )r3  rQ  rd   ST_DELIMITERjoinrK  r  r   r   	ExceptionrZ   r  )r#  r   retr  r  r  rf   rg   nn_module_listsource_fn_st	source_fnsource_fn_listr  r  es                  r`   re  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] %sr/  )r   r4  r%   r  r0  r#  r  s     r`   r;  z/GraphModuleSerializer.serialize_script_obj_meta  s2     			2OD  %%%//
 	
r_   c           	         t        |t        j                  j                        r.|j                  j
                  D cg c]  }|j                   }}n@|t        v sJ t        t        j                  |      j                  j                               }g }t        ||      D ]?  \  }}|j                  t        || j!                  |      t"        j$                               A |S c c}w )Nr  rD  kind)rk   rl   rm   rn   r   	argumentsr  rb  r  inspect	signature
parameterskeyszipr<  r:   r9  r"   
POSITIONAL)r#  rp   rA  rD  
args_namesserialized_args	args_names          r`   rc  z-GraphModuleSerializer.serialize_sym_op_inputs  s    b%**//0.0jj.B.BCs#((CJC>!>g//3>>CCEFJ!*d3 	NIs""",,S1%00	  Ds   C%Nr  c           
         d }g }t        |t        j                  j                  j                        r|d   }|d   }|j                  ||      }n=t        |t        j                  j                  gt                     sJ t        |      }|J |xs i }t        |j                        D ]  \  }}	|	j                  |v r]|j                  t        |	j                  | j                  ||	j                     |	j                         t"        j$                               q|	j&                  sa|t)        |      k  rS|j                  t        |	j                  | j                  ||   |	j                         t"        j*                               ތ |S )Nr   r    r  )rk   rl   rh  	torchbindCallTorchBindschemarm   rn   _registered_extension_typesr  rW  r  r  r<  r:   r9  r   r"   KEYWORD
kwarg_onlyr   r  )
r#  r  rA  r_  r  r  objmethodi
schema_args
             r`   rf  z&GraphModuleSerializer.serialize_inputs  s^    fe55??MMNq'C!WF]]3/Ffuzz'<'<&]?Z?\&]^^^,V4F!!!2&v'7'78 	MAz&(&&!'__ 00
1H*//Z)11  **q3t9}&&!'__ 00a*//J)44 )	, r_   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:   r9  r"   r  extendrd   r  )r#  rA  r_  ar  r  s         r`   ro  z*GraphModuleSerializer.serialize_hoo_inputs  s     
  ((+!,,
 
 	  &||~ D! ,,Q/%--		
 %
s   2B5B
c                 \    t        |      t        u xs t        |t        j                        S rc   )r   r   rk   rl   rJ   r#  rD  s     r`   is_inductor_sym_int_argz-GraphModuleSerializer.is_inductor_sym_int_arg  s#    
 CyC@:c5<<#@@r_   c                     t        |      t        u xsH t        |t        j                  j
                        xr" |j                  | j                  j                  v S rc   )	r   r   rk   rl   rB  r<   r  r  r  r  s     r`   is_sym_int_argz$GraphModuleSerializer.is_sym_int_arg  sG    CyC 
sEHHMM* <D,,;;;	
r_   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S rc   )rk   r   rl   rB  r<   r  r  r  r  s     r`   is_sym_float_argz&GraphModuleSerializer.is_sym_float_arg  sE    #u% 
sEHHMM* >D,,===	
r_   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S rc   )rk   r   rl   rB  r<   r  r  r  r  s     r`   is_sym_bool_argz%GraphModuleSerializer.is_sym_bool_arg  sE    #t$ 
sEHHMM* =D,,<<<	
r_   arg_typec           
      h    dd l mc m} |j                  |j                  ft        |t        j                  j                        r|j                  dk(  rt        |j                  t              sJ t        |j                  j                  |j                        }t        |t        j                        rt!        d      t        |t        j                  j"                        rU j%                         5   j'                  |      }d d d        t)        j*                  t-        |j                              S t!        d|j                   dt/        |              j1                  |      r4t)        j*                  t3        j*                  |j4                        	      S  j7                  |      r4t)        j*                  t9        j*                  |j4                        
      S  j;                  |      r4t)        j*                  t=        j*                  |j4                              S t        |j>                  d   t@        jB                        rBt)        j*                  tC        |j4                  |j>                  d   jD                              S |j4                   jF                  v r9 jF                  |j4                     }t)        j*                  tI        |            S t)        j*                  tI        |j4                              S t        |      r9|jK                         }|J d       t)        j*                  tI        |            S t        ||jL                        rv|jK                         }|J d       |jO                         }|jQ                         jS                         }	| jT                  |<   t)        j*                  tC        ||	            S t        |t        jV                        r3t)        j*                  t3        j*                  t        |            	      S t        |t        jX                        r3t)        j*                  t9        j*                  t        |            
      S t/        |      tZ        u rt)        j*                  |      S t/        |      t        u rt)        j*                  |      S t/        |      t\        u rt)        j*                  |      S t/        |      t^        u rt)        j*                  |      S |t)        j*                  d      S t        |t`        tb        f      r#te        |      dk(  r|t        |t        jf                        r|ji                         }t        |t        jj                        sJ |ji                         }
t        |
t        jf                        r|
ji                         }
t        |
t        jl                        rt)        j*                  g       S t        |
t        jn                        rt)        j*                  g       S t        |
t        jp                        rt)        j*                  g       S t        |
t        jr                        rt)        j*                  g       S t        |
t        jt                        rt)        j*                  g       S t!        d|
 d      tv        jy                  d       t)        j*                  g       S t{        d  |D              rt)        j*                  ta        |            S t{        d! |D              rt)        j*                  ta        |            S t{        d" |D              rt)        j*                  ta        |            S t{        d# |D              rt)        j*                  ta        |            S t{         fd$|D              rg }|D ]  }t        |t        jV                        r/|j}                  t3        j*                  t        |                   Lt/        |      t\        u s^|j}                  t3        j*                  |              t)        j*                  |%      S t{        d& |D              rAt)        j*                  |D cg c]!  }t9        j*                  t        |            # c}'      S t{         fd(|D              rg }|D ]  }t        |t        j                  j                        r0|j}                  t3        j*                  |j4                               Wt/        |      t\        u si|j}                  t3        j*                  |              t)        j*                  |%      S t{         fd)|D              rg }|D ]  }t        |t        j                  j                        r0|j}                  t9        j*                  |j4                               Wt        |t^              sh|j}                  t9        j*                  |              t)        j*                  |'      S t{         fd*|D              rg }|D ]  }t        |t        j                  j                        r0|j}                  t=        j*                  |j4                               Wt        |tZ              sh|j}                  t=        j*                  |              t)        j*                  |+      S t{        d, |D              r^g }|D ]A  }|j                  dk(  rt!        d      |j}                  tI        |j4                               C t)        j*                  |      S t{        d- |D              r,d. }t)        j*                  ta        t        ||            /      S t{        fd0|D              r<t)        j*                  |D cg c]  }tI        |jK                                c}      S t{        fd1|D              r.fd2}t)        j*                  ta        t        ||            /      S t!        d3|D cg c]  }t/        |       c}       t        |t        j                        rt)        j*                  t        |   4      S t        |t        j                        r5t)        j*                  t        |j.                  |j                  5      6      S t        |t        j                        rt)        j*                  t        |   7      S t        |t        j                        rt)        j*                  t        |   8      S t        |t        j                  j                        r|j                  d9      r|j                  d:      st!        d;| d<      d=te         jT                         }| jT                  |<   |jQ                         jS                         }	t)        j*                  tC        ||	            S t        |t        j                  j                  t        j                  j                  f      r%t)        j*                   j                  |      >      S t!        d?t/        |       d@|       # 1 sw Y   xY wc c}w c c}w c c}w )ANr   get_attrz?getattr nodes containing tensors should not appear in the graph)r  rk  )as_graphzUnsupported getattr attribute z with type: as_namer-  as_sym_floatas_sym_boolr   r/  r1  r  r+  zBuffer must have valid namer   	as_stringr   r   Tas_none)as_bools)as_ints)	as_floats)
as_stringsrU  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rc   )r   r   ro   r  s     r`   rq   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     0q47d?0   c              3   >   K   | ]  }t        |      t        u   y wrc   )r   r   r  s     r`   rq   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>       1T!W^1r  c              3   >   K   | ]  }t        |      t        u   y wrc   )r   r   r  s     r`   rq   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     3!T!W%3r  c              3   >   K   | ]  }t        |      t        u   y wrc   )r   r   r  s     r`   rq   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  r  r  c              3   @   K   | ]  }j                  |        y wrc   )r  ro   r  r#  s     r`   rq   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     BT11!4B   )as_sym_intsc              3   P   K   | ]  }t        |t        j                           y wrc   )rk   rl   rH   r  s     r`   rq   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     @qZ5>>2@s   $&)as_sym_floatsc              3   @   K   | ]  }j                  |        y wrc   )r  r  s     r`   rq   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     9T((+9r  c              3   @   K   | ]  }j                  |        y wrc   )r  r  s     r`   rq   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     ;!T**1-;r  c              3   @   K   | ]  }j                  |        y wrc   )r  r  s     r`   rq   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     :T))!,:r  )as_sym_boolsc              3   d   K   | ](  }t        |t        j                  j                         * y wrc   )rk   rl   rB  r<   r  s     r`   rq   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     ?aZ588==1?rr   c              3   z   K   | ]3  }t        |t        j                  j                  t	        d       f       5 y wrc   )rk   rl   rB  r<   r   r  s     r`   rq   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s(     MAZEHHMM4:#>?Ms   9;c                     | t        j                  d      S t        | t        j                  j
                        r*t        j                  t        | j                              S t        d|        NTr  r  r+  z!Unsupported list/tuple argument: )	r=   r   rk   rl   rB  r<   rL   r  rZ   r  s    r`   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Ur_   )as_optional_tensorsc              3   6   K   | ]  }t        |        y wrc   )rk   ro   r  inductor_tensor_bufferss     r`   rq   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     IZ#:;Is   c              3   R   K   | ]  }t        |g t        d                y wrc   )rk   r   r  s     r`   rq   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s-      JK
1D 7DdDEs   $'c                     | t        j                  d      S t        |       r.t        j                  t        | j	                                     S t        d|        r  )r=   r   rk   rL   get_namerZ   )r  r  s    r`   r  zMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_args  s\    y5<<TJJ#A'>?5<<&4!**,&G   -/PQRPS-TUUr_   z&Unsupported list/tuple argument type: )as_scalar_typer   )	as_device)as_memory_format)	as_layout__getstate____setstate__z!Unable to serialize custom class z7. Please define serialization methods via def_pickle()._custom_obj_)as_operatorzUnsupported argument type: z with schema arg_type )Ptorch._inductor.ir	_inductorirBufferReinterpretViewrk   rl   rB  r<   rp   r  r   rm  rk  rl  r5  rZ   r,   r(  serialize_graphr!   r   r+   r   r  rK   r  r  rI   r  rE   r3  r:  r%   r0  r!  rL   r  TorchBindObjectget_real_obj_typequalified_namer   rJ   rH   r   r   r   r  r   r   OptionalTypegetElementTypeListTypeBoolTypeIntType	FloatType
StringType
TensorTyper   r   allr<  mapr   r   r   r&   r   memory_format!_TORCH_TO_SERIALIZE_MEMORY_FORMATr   r   _CScriptObject_has_methodrm   rn   rP  rK  )r#  rD  r  inductor_irattrrk  
dedup_namearg_namearg_valr0  	elem_typevaluesr  r  r  custom_obj_namer  s   `               @r`   r9  z%GraphModuleSerializer.serialize_input   s    	10 ''#

 c588==)vv#!#**c222syy66

CdELL1(Y   ehh&:&:;..0 ; $ 4 4T :;#??!.CJJe!L  )8LQUVZQ[P\]  $$S)-44SXXF  &&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&??/)D  U\\*
 ??n.C.CCPSH.UVVU^^,
 ??0@0G0GPSTWPX0YZZ#Y$??3//#Y#??S11#Y#??#..#Y%??C00[??400dE]+3x1}'!(E,>,>?#+#:#:#<%h??? ( 7 7 9I!)U-?-?@$-$<$<$>	!)U^^<';;#Iu}}='r::#Iu?'<<#Iu/?/?@'"==#Iu/?/?@'"== -/DYKu-UVV KKF
 $??b990C00S	::1S11tCy993s33c;;1S11$s)<<BcBB  GA!!U\\2n&;&;CF&KLaCn&;&;1&EF	G
  6::@C@@TW"Xq#3#:#:3q6#J"X  9S99 GA!!UXX]]3n&;&;AFF&KLaCn&;&;1&EF	G
  6::;s;; KA!!UXX]]3&6&=&=aff&MN#Au-&6&=&=q&IJ	K
  V<<:c:: IA!!UXX]]3o&<&<QVV&LM#At,o&<&<Q&GH	I
  F;;?3??	 BAttz),]  $$^%@AB  )<<MMMV  (,S1OQT-U(V  ISIIKNOaAJJL AO   OR V  (,S1OQT-U(V  %<s=S!d1g=S<TU  U[[)??2KC2PQQU\\*??V-STTU001??!B3!G  U\\*??-G-LMMUXX223/OON3$7u => >  !-S1A1A-B,CDO03D_-		224I??/K  ejj33UZZ5S5STU??t/F/Fs/KLL #>tCykI_`h_i!jkkc; ;B #Yr  P* >Ts   8z"&z%!z*z/
z"c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        |      S )Nr  )r  r
  r   rL   r#  r  rR  s      r`   r6  z-GraphModuleSerializer.serialize_tensor_output'  sB    4++99999/DX/N&&t,4((r_   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S Nr  )r  r  r   rK   r   r  s      r`   r7  z.GraphModuleSerializer.serialize_sym_int_output,  sH    4++:::::0A(0K''-$$T22r_   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S r  )r  r  r   rI   r   r  s      r`   serialize_sym_float_outputz0GraphModuleSerializer.serialize_sym_float_output1  sH    4++<<<<<2Eh2O))$/&&t44r_   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S r  )r  r  r   rE   r   r  s      r`   serialize_sym_bool_outputz/GraphModuleSerializer.serialize_sym_bool_output6  sH    4++;;;;;1CH1M((.%%d33r_   specc                 t   t         j                  d|       |j                  t        j                  j
                  k(  r$t        |j                  t        j                        rt        |j                  j                        t        u r,t        j                  |j                  j                        }n@t        |j                  j                        t        u r+t        j                  |j                  j                        }nt        |j                  j                        t        u r+t        j                  |j                  j                        }nt        |j                  j                        t         u r+t        j                  |j                  j                        }nP|j                  j                  t        j                  d      }n#t#        d|j                  j                   d	      t%        j                  t'        |j                  j(                  |
            S t%        j                  t+        | j-                  |j                                    S |j                  t        j                  j.                  k(  r}|j0                  J t        |j                  t        j2                        sJ t%        j                  t5        t3        |j                  j(                        |j0                              S |j                  t        j                  j6                  k(  r|j0                  J t        |j                  t        j2                        sJ |j8                  J t%        j                  t;        t3        |j                  j(                        |j0                  |j8                              S |j                  t        j                  j<                  k(  r}|j0                  J t        |j                  t        j2                        sJ t%        j                  t?        t3        |j                  j(                        |j0                              S |j                  t        j                  j@                  k(  r|j0                  J t        |j                  t        jB                        sJ t%        j                  tE        tC        |j                  j(                  |j                  jF                        |j0                              S |j                  t        j                  jH                  k(  rdt        |j                  t        jJ                        sJ t%        j                  tM        tK        |j                  j(                                    S tO        d|       )Nz[serialize_input_spec] %sr   r   r  r   Tr  zUnhandled constant input z to serializer  re   )constant_inputrD  )
user_inputr  rD  parameter_name)	parameter)rD  buffer_name
persistent)r   )rD  tensor_constant_name)tensor_constantr/  )rD  r  )
custom_objtokenUnknown argument kind: )(r   r4  r  r:  	InputKind
USER_INPUTrk   rD  ConstantArgumentr   re   r   r$   r   r   r   r   rZ   r.   r0   r  rQ   serialize_argument_spec	PARAMETERr  rL   r3   BUFFERr+  r/   CONSTANT_TENSORr4   
CUSTOM_OBJr%   r1   r0  TOKENrN   r2   r8  )r#  r!  constant_specs      r`   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(+DTXX^^DTTa)bcc ''#;!XX]]-$  !'', 88B  
 YY",,000;;***dhh(9(9:::##.&DHHMM:#';;  YY",,---;;***dhh(9(9:::??...##(&DHHMM: $#  YY",,666;;***dhh(9(9:::## 9&DHHMM:)-!  YY",,111;;***dhh(<(<===##/)!XX]]dhh6H6H %)KK	  YY",,,,,dhh(8(8999##$%488==9  !#:4&!ABBr_   c                 V   t         j                  d|       |j                  t        j                  j
                  k(  r9t        j                  t        | j                  |j                                    S |j                  t        j                  j                  k(  rdt        |j                  t        j                        sJ t        j                  t        t        |j                  j                                    S |j                  t        j                  j                   k(  r}|j"                  J t        |j                  t        j                        sJ t        j                  t%        t        |j                  j                        |j"                              S |j                  t        j                  j&                  k(  r}|j"                  J t        |j                  t        j                        sJ t        j                  t)        t        |j                  j                        |j"                        	      S |j                  t        j                  j*                  k(  r}|j"                  J t        |j                  t        j                        sJ t        j                  t-        t        |j                  j                        |j"                  
            S |j                  t        j                  j.                  k(  r}|j"                  J t        |j                  t        j                        sJ t        j                  t1        t        |j                  j                        |j"                  
            S |j                  t        j                  j2                  k(  rdt        |j                  t        j4                        sJ t        j                  t7        t5        |j                  j                                    S t9        d|       )Nz[serialize_output_spec] %sr%  )user_outputr  )loss_output)rD  r*  )buffer_mutationr'  )gradient_to_parameter)rD  user_input_name)gradient_to_user_input)user_input_mutationr/  r1  )r   r4  r  r:  
OutputKindUSER_OUTPUTr>   r   rR   r5  rD  LOSS_OUTPUTrk   rL   r6   r  BUFFER_MUTATIONr  r#   GRADIENT_TO_PARAMETERr(   GRADIENT_TO_USER_INPUTr)   USER_INPUT_MUTATIONrP   r:  rN   r?   r8  )r#  r!  s     r`   serialize_output_specz+GraphModuleSerializer.serialize_output_spec  s   		.599111$$*t/K/KDHH/UV  YY"--333dhh(9(9:::$$*~488==/QR  YY"--777;;***dhh(9(9:::$$ 2&DHHMM: $!  YY"--===;;***dhh(9(9:::$$&=&DHHMM:#';;'  YY"-->>>;;***dhh(9(9:::$$'>&DHHMM:$(KK(  YY"--;;;;;***dhh(9(9:::$$$9&DHHMM:$(KK%  YY"-----dhh(8(8999$$%%488==9  !#:4&!ABBr_   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   r4  r-   rP  r<  rQ  rL  )r#  rM  r   s      r`   serialize_signaturez)GraphModuleSerializer.serialize_signature  s^    		+,?BO!2215OADAQAQRA$44Q7R
 	
ORs   A1A6
xc                    t        |t        j                        r*t        j                  t        |j
                              S t        |t        j                        r4t        j                  t        j                  |j
                              S t        |t        j                        r4t        j                  t        j                  |j
                              S t        |t        j                        r| j                  |j                        S t        |t        j                        r5t        j                  t        |j
                  |j                              S t        d      )	Nr  r+  r  r-  r  r/  r1  TODO)rk   r:  rL   r!   r   r  rK   rI   r4  r9  re   r%   r0  r8  r#  rS  s     r`   r5  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  !((r_   c                 F      fdt        |t              } |       |S )Nc           	         | j                   y | j                   t        k(  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 rG  )field_names)r   r   pytreeSUPPORTED_SERIALIZED_TYPEScontextserialized_type_namer"  rY  _fieldsrZ   r;   children_specs)tsr]  rY  childr#  store_namedtuple_fieldss       r`   rb  zIGraphModuleSerializer.serialize_treespec.<locals>.store_namedtuple_fields  s    wwww*$'-'H'H'T'i'i$'4+J+JJ"&"A"ABV"W"c"cK"bjj&8&88,CBJJ< P==?ZZ=O=O<P QTT_S``ac  MZfhfpfpfxfxLyD334HI** /'./r_   )r   rO   )r#  treespecserialized_treespecrb  s   `  @r`   serialize_treespecz(GraphModuleSerializer.serialize_treespec  s&    	/& -X7GH)""r_   module_call_signaturec           	         t         j                  d|       t        |j                  D cg c]  }| j	                  |       c}|j
                  D cg c]  }| j	                  |       c}| j                  |j                        | j                  |j                        |j                  x}r|      S d       S c c}w c c}w )Nz$[serialize_module_call_signature] %sr  r  in_specout_specforward_arg_names)
r   r4  r9   r  r5  r  re  ri  rj  rk  r#  rf  rS  namess       r`   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L1F1X1X(X(Xe

 
	
 `d

 
	
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   r4  r8   rq  r  rn  r#  r  entrys      r`   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_typerk   rl   r  r  r	  )r  r  rw  return_types       r`   _is_single_tensor_list_returnzNGraphModuleSerializer.serialize_outputs.<locals>._is_single_tensor_list_return&  sg    ,V4FnnG7|q !!*..Kk5>>: z**,e.>.>@ r_   rM  r   r   rU  r    Tr  zUnhandled output type z from node )%r
   r   rp   rk   r  rl   rm   rn   r  r  rw  r   r3  rW  rX  r<  r6  r!   r   rd  r  r  rx  r  r	  r   r  r  r  r  r   rJ   r   rH   
ValueErrorr   format_node)r#  r   rz  r  rw  rR  rY  rZ  r3  r  output_argumentsreturn_schemar~  rA  r  msub_user_node_nameuser_node_names                     r`   rg  z'GraphModuleSerializer.serialize_outputs  s>   (		# 		$ 		 ww/)juzzG\G\F}_z_|F}.~~~(5..w<1I99U# )5K&x0 M	T66tSA""4#?#?d#KLM OO{;<<\Q))$))X>?? *3C'4J*K #	&C&$|!!++e.@.@%BRBR-S  
 !''(EFD*-!-"9"9E<N<NPUP`P`;abbb66tSA ''(=(=dD(IJD$'!!++U^^ !++::<e>N>N 
 !66tSA	 ,,,%dO UDAqy )-)H)HTU)V&KK < <=OQR ST	U
 !''4(HID3x"@A!%!@!@s!K ''(=(=nd(ST ,T$ZLDDTDTDVCWX C#	J  r_   c                    |j                   d   }t        |t              rg }t        |      D ]  \  }}| j	                  ||      }t        |t
              r|J g }t        |      D ]j  \  }}	t        |	t        j                        st        dt        |	       d      | j                  ||      }
|j                  | j                  |
|	             l |j                  t        j                  |             ||j                  n|j                   d| }
|j                  | j!                  |
|              |S | j!                  |j                  |      gS )zN
        For serializing HOO outputs since HOOs do not have a schema.
        r   z Serialize list output with type z nyirU  r  )r3  rk   r   rW  r  r  rl   r5  rZ   r   rX  r<  r6  r!   r   r  rd  )r#  r   rR  r  r  element_meta_valr~  tensorsjr  r  s              r`   rp  z+GraphModuleSerializer.serialize_hoo_outputsv  sY    99U#h&G'0': R## 66tQ?	.5$000 G )*: ; N1)!U\\:"03STXYZT[S\\`1a"bb#>>y!Lt'C'CD!'LMN NN8??g#FG
 %0 " $		{(1#6  NN4#8#8?O#PQ-R0 N))$))X>??r_   r  rR  c                    |t        j                  d      S t        |t        j                        r&t        j                  | j                  ||            S t        |t        t        j                  f      r&t        j                  | j                  ||            S t        |t        t        j                  f      r8t        |t              rJ t        j                  | j                  ||            S t        |t        t        j                  f      r&t        j                  | j                  ||            S t        d|       )NTr  r+  r  r-  r  zUnable to serialize output )r!   r   rk   rl   r5  r6  r   rD   r   r   rJ   r7  r   rH   r  rZ   r  s      r`   rd  z&GraphModuleSerializer.serialize_output  s   ??400h-??66tXF  4"78?? ::4J  3"56!(D111??88xH  5%.."9:??!<<T8L 
 :8*EFFr_   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  )
r3  r}  r  r`  ra  r  rA  rW  r<  r6  )
r#  r   rR  idx_to_namer  rZ  _arg_listr  r  s
             r`   _handle_getitem_usersz+GraphModuleSerializer._handle_getitem_users  s    99U#JJ 	2Dx///:D6dV=9:/(,		K		!%		2  ) 	?FC +%&*ii[#>C 	? #,X#6 	AOO,,[^=MN	
 r_   graph_modulec                 ,   t        |t        j                  j                        sJ t        j                  d|j                  d             |j                  j                  D ]"  }	  t        | d|j                         |       $ t!        | j"                  j$                  | j"                  j                  | j"                  j&                  | j"                  j(                  | j"                  j*                  | j"                  j,                  | j"                  j.                  | j"                  j0                  | j"                  j2                  	      S # t        $ r:}t        d| d|j                          dt        j                                |d }~ww xY w)	Nz[serialize_graph]

%sF)print_outputhandle_zFailed serializing node z in graph: 
 Original exception )	r  r	  r
  r  r  r  r  r  r  )rk   rl   rB  r,   r   r4  print_readablerk  r	  rm  rp   r  rZ   r|  	traceback
format_excr*   r  r  r
  r  r  r  r  r  r  )r#  r  r   r  s       r`   r  z%GraphModuleSerializer.serialize_graph  se   ,(<(<===		+\-H-HV[-H-\] &&,, 	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r3  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 )rQ  r   r4  r   r   r  rZ   )r#  r3  r  r  r  s        r`   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])rk  r  r  rN  r"  )r   r4  r  r,   rR  r  rt  r  r  r3  r"  )r#  r  rk  s      r`   rT   zGraphModuleSerializer.serialize  ss    		/"$$\2..t/C/CD">>t?U?UV99,:K:KL'+'F'F
 	
r_   rc   )Br[   r\   r]   r:  ExportGraphSignaturer  r8   r$  r   r(  rl   rB  r<   r>  rE  r   rK  ry  r{  r   r  rX  r   re  r%   r;  r:   rc  r
   rf  ro  r   r  r  r  r  r!   r9  rL   r6  rK   r7  rI   r  r   r.   r<  r>   rL  r-   rR  ArgumentSpecr5  re  r9   rn  rt  rg  rp  rd  r  r,   r*   r  r  rT   r^   r_   r`   rU   rU     sC   
G00
G   2 23
G % %4uxx}} 40X%((-- X	<C 	<[/ [/z5HUXX]]4K " ")uxx}} )c3h )V
!33
	
43F * 	))
 
m	)VD4G 0Ad A
T 

t 

d 
 .2El%c]El	ElN) )
3. 3
5<L 5
4> 4
KC KC) KCZ7C"-- 7CJ 7Cr
r'>'> 
> 
) )X ) #4
%'%;%;
	
 
!%b&8&8!9
	o	
 b ehhmm b X b H"@%((-- "@DN "@HGS GC GH G:%((-- D<P 2
EHH,@,@ 
U 
0DcN 

ehh&:&: 

{ 

r_   rU   )	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)rV   Nopset_versionr   c                     i | _         |r| j                   j                  |       d| j                   vr+t        j                  j	                         | j                   d<   || _        y Naten)r  updaterl   r  _get_max_operator_versionr   )r#  r  r   s      r`   r$  z"ExportedProgramSerializer.__init__  sT    -/%%m4+++).)K)K)MDv&.r_   ru   r}   c           
      \   |j                          t        |j                  |j                        }|j	                  |j
                        }t        |j                        }i }|j                  j                         D ]
  \  }}|||<    |j                  j                         D ]  \  }}||vsJ |||<    t        || j                  |t        t        d   t        d         |j                  D 	cg c]  }	|	j                    c}	t"        j$                        }
t'        |
t)        |j+                                      t-        |j.                  d      }t1        |
t3        || j4                        t3        || j4                        t3        |j6                  | j4                              S c c}	w )zS
        Args:
            exported_program: Exported Program to serialize
        r   r    )majorminorr  r  r   schema_version	verifierstorch_versionF)in_place)validaterU   r  r  rT   r  r   r   r   rd   rw   r'   r  rC   rB   r  dialectrl   __version__canonicalizesetr  r   rv   r|   r   r   rx   )r#  ru   gm_serializerserialized_graph_moduleserialized_range_constraintsrw   ncr   rg   serialized_epnew_state_dicts               r`   rT   z#ExportedProgramSerializer.serialize  s   
 	!!#-,,.>.P.P
 #0"9"9:J:W:W"X'B..(
$ %'	!--335 	DAqIaL	$..446 	DAqI%%%IaL	 (0,,:($Q'$Q' +;*D*DEQqyyE++

 	]C	(8$9: 6''%
 "$^T5I5IJ$Y0D0DE$%5%D%DdFZFZ[	
 	
 Fs   1F))r[   r\   r]   DEFAULT_PICKLE_PROTOCOLr   r   r   r   r$  r:  r'   r|   rT   r^   r_   r`   rV   rV     sC    AE^u /htCH~&> /X[ /1
"*<*< 1
AS 1
r_   rV   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)FrW   c                      e Zd ZU ej                  j
                  ed<   ej                  ed<   e	ej                     ed<   eeej                  f   ed<   eeeej                   ej"                  j$                  f   f   ed<   eeeej                   eej(                  f   f   ed<   eeeej                   df   eeef   f      ed<   y	)
GraphModuleDeserializer.Resultr  r  r  names_to_symbolsrv   rw   .rx   N)r[   r\   r]   rl   rB  r,   rz   r:  r  r  r8   r   r   r   r   r   r5  r   r   r   r  r   r   r
   r^   r_   r`   Resultr  C  s    hh****** 2 233sELL011eELL%((2D2D$DEEFFU5<<1A5CUCU#UVVWW uU\\3->'?c3h'O!PQQr_   r  r}   Nc                     i | _         i | _        t        j                  j	                         | _        t        j                  j                         | _        y rc   )	serialized_name_to_nodeserialized_name_to_metarl   rB  r*   rk  r   ModulerJ  )r#  s    r`   r$  z GraphModuleDeserializer.__init__M  s6    AC$<>$XX^^%
hhoo'r_   c              #     K   | j                   | j                  | j                  | j                  f}t        j
                  j                         | _         t        j                  j                         | _        i | _        i | _        	 d  |\  | _         | _        | _        | _        y # |\  | _         | _        | _        | _        w xY wwrc   )	rk  rJ  r  r  rl   rB  r*   r   r  r&  s     r`   save_graph_modulez)GraphModuleDeserializer.save_graph_moduleS  s      JJKK((((	
 XX^^%
hhoo'')$')$	 
,,
,,s   BCB& 
C&CCserialized_targetc                 h    |j                  d      \  }}|dd  }t        |   }|j                  |      S )Nr]  r    )split_deserialization_registryfrom_op_name)r#  r  rq  rx  rw  s        r`   deserialize_extension_operatorz6GraphModuleDeserializer.deserialize_extension_operatori  s=    .44S9	7abM	+I6##G,,r_   c                 H   |j                  d      rt        }|j                  d      dd  }nP|j                  d      rt        }|j                  d      dd  }n$|j                  d      r| j	                  |      S |S |}|D ]  }t        ||      s|c S t        ||      }  |S )N	_operatorrG  r    rl   r^  )rH  r`  r  rl   r  rj  rm  )r#  r  rJ  serialized_target_namesr  r  s         r`   deserialize_operatorz,GraphModuleDeserializer.deserialize_operatoro  s    ''
 F&7&=&=c&B12&F#))'2F&7&=&=c&B12&F#))#.667HII$$+ 	/D64((( .		/
 r_   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                    | 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                         | S )N)compiler_mincompiler_max)
is_Integeris_Float
is_Booleanr   rA  _parse_sym_exprsymbol_name_to_symbolrk   r   r   r   symbol_is_typer   UNBACKED_INTUNBACKED_FLOATunbacked_symbolsadd	shape_env
var_to_valadd_var_to_valsymbol_name_to_rangerQ  constrain_symbol_ranger   r   )r   r   r   rD  vrr#  s        r`   _process_sym_exprzBGraphModuleDeserializer._parse_sym_expr.<locals>._process_sym_expr  s4   ~~
 s888 .C((-. t99944X>C;>D..x8"35+::3ARARTXTgTg@hi--11#6 $4>>#<#<<NN11#t<2266x@@2@NN99%'XX%'XX : 
 Jr_   )localsrc   )
r   Exprr   r   r   r   r   sympifysympy_functionsr  )r#  r   r   r  r   s   `    r`   r  z'GraphModuleDeserializer._parse_sym_expr  su    
 	5::  	XeCuDT>U5V  	bgblbl  	D }}Id**Id.H.HI
 !t,,r_   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 )	re   r   r   r  r   r  create_symintnoder   rZ   r#  r   r   r   r   s        r`   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 r_   c                    |j                   }|j                  dk(  r]|j                  r|j                  j                  nd }| j	                  |j
                  |      }| j                  j                  ||      S |j                  dk(  rt        |t              sJ |S t        d|j                   d|j                          )Nr   r   r   z SymFloat has invalid field type r  )re   r   r   r   r  r   r  create_symfloatnoderk   r   rZ   r  s        r`   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 r_   c                 4   |j                   }|j                  dk(  r6| j                  |j                        }| j                  j                  |      S |j                  dk(  rt        |t              sJ |S t        d|j                   d|j                          )Nr   r   zSymBool has invalid field type r  )	re   r   r  r   r  create_symboolnoderk   r   rZ   )r#  r   r   r   s       r`   deserialize_sym_boolz,GraphModuleDeserializer.deserialize_sym_bool  s    gg66Y''5D>>44T::VVy c4(((J 1!&&aggYO r_   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rc   r  ro   r   r#  s     r`   rq   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>  s     UC$2237Ur  c              3   @   K   | ]  }j                  |        y wrc   r  r  s     r`   rq   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>  s     WC$2237Wr  )r   r   r   )fake_tensor_moder   r   rl   empty_stridedr   r   r   r   r   _SERIALIZE_TO_TORCH_DTYPEr   r   )r#  r   s   ` r`   r   z/GraphModuleDeserializer.deserialize_tensor_meta  s     "" 
	##U;CTCTUUW;CVCVWW-k.@.@A3K4E4EF"-";";	
	 
	 
	s   BB&&B/r  c                 X    t        j                  |j                  |j                        S )Nr/  )r:  r%   r  r0  r  s     r`   deserialize_script_obj_metaz3GraphModuleDeserializer.deserialize_script_obj_meta  s)     ## %%%//
 	
r_   c                 p   |j                   dk(  r#| j                  |j                  j                     S |j                   dk(  r#| j                  |j                  j
                     S |j                   dk(  r#| j                  |j                  j
                     S |j                   dk(  r#| j                  |j                  j
                     S |j                   dk(  r|j                  S |j                   dk(  r|j                  S |j                   dk(  r|j                  S |j                   dk(  ry t        d	|       )
Nr,  r.  r  r  r   r   r   r  z"Unable to deserialize output node )r   r  r,  r  r.  r  r  r  r   r   r   rZ   )r#  r@  s     r`   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Or_   serialized_graphc           	         t         j                  d       |j                  j                         D ]S  \  }}t         j                  d||       | j	                  |      }t         j                  d||       || j
                  |<   U |j                  j                         D ]S  \  }}t         j                  d||       | j                  |      }t         j                  d||       || j
                  |<   U |j                  j                         D ]S  \  }}t         j                  d||       | j                  |      }t         j                  d||       || j
                  |<   U |j                  j                         D ]S  \  }}	t         j                  d||	       | j                  |	      }
t         j                  d	||
       |
| j
                  |<   U |j                  j                         D ]9  \  }}t         j                  d
|       | j                  |      | j
                  |<   ; t         j                  d       t        |j                        D ]  \  }}t         j                  d|       |j                   dv rK|j"                  j$                  }| j&                  j)                  |      }||_        | j+                  ||       v|j                   dk(  r}|j"                  j                   dk(  rK|j"                  j,                  }| j&                  j)                  |      }||_        | j+                  ||       t/        d|j"                   d      |j                   dv rh| j0                  j2                  |   j4                  j$                  }| j&                  j)                  |      }| j7                  |      |j8                  d<   xt/        d|        |j:                  D ]0  }	 | j=                  |j>                        }| jA                  ||       2 g }|jH                  D ]8  }t         j                  d|       |jK                  | jM                  |             : |jN                  rtQ        |      dk(  sJ |d   }ntS        |      }| j&                  jU                  |      }|jN                  r*|jV                  d   j8                  d   |j8                  d<   n,tS        d |jV                  d   D              |j8                  d<   | j&                  j:                  D ]`  }|j8                  jY                  d      x}!t[        j\                  |d| j^                  | j`                  d      x}sR||j8                  d<   b tQ        | j`                        dk(  sJ | j&                  S # tB        $ r)}t/        d| dtE        jF                                |d }~ww xY w)Nz
[deserialize_graph]z([deserialize_tensor_meta] %s (input): %sz)[deserialize_tensor_meta] %s (output): %sz$[deserialize_sym_int] %s (input): %sz%[deserialize_sym_int] %s (output): %sz&[deserialize_sym_float] %s (input): %sz'[deserialize_sym_float] %s (output): %sz%[deserialize_sym_bool] %s (input): %sz&[deserialize_sym_bool] %s (output): %sz [deserialize_script_obj_meta] %sz
[deserialize graph nodes]z[deserialize input] %s)r,  r2  r.  r  z Deserializing a constant symint z as an input)r   r   r   r  r  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)rk   rl   rB  r<   r3  )ro   rD  s     r`   rq   z<GraphModuleDeserializer.deserialize_graph.<locals>.<genexpr>l  s6      , $.c588==#AsJ,s   ?Ar^   T)r  pendingsimplifyunbacked_bindings)1r   r4  r
  rd   r   r  r  r  r  r  r  r  r  r  rW  r  r   re   r  rk  r*  sync_fx_noder  rZ   r  rP  rD  deserialize_inputr3  r	  r  r  deserialize_noder  r  r  r  r<  r  r  r   r   r@  rA  rQ  r    _free_unbacked_symbols_with_pathr  r  )r#  r  r  tensor_valuerR  sym_int_valueint_valsym_float_value	float_valsym_bool_valuebool_valr  r  input_	node_nameplaceholder_nodeserialized_noder  r  r  r@  output_noder   r   r   s                            r`   deserialize_graphz)GraphModuleDeserializer.deserialize_graph  s{   		)* #3"@"@"F"F"H 	:D,II@$U33LAHIIA4R19D((.		: $4#B#B#H#H#J 	9D-II<dMR..}=GII=tWM18D((.		9 &6%F%F%L%L%N 	;!D/II>oV22?CIII?yQ1:D((.		; %5$D$D$J$J$L 	: D.II=t^T00@HII>hO19D((.		: &6%G%G%M%M%O 	!D/II8/J151Q1Q2D((.	 			/0"#3#:#:; 	EIAvII.7{{<<"LL--	#'::#9#9)#D  )2 %!!)-=>,<<$$	1 & 4 4I'+zz'='=i'H$ -6$)%%i1AB(+KFLL>Ye)fgg !  !NN66q9==BB	#'::#9#9)#D /3/E/Ef/M %%e,$':6(%CDD=	EB  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		e,,9)8)Y)YR4>>4CXCXcg* % 
 2C		-.		C 4(()Q...zzQ  $00AAWXaXlXlXnWops   --V..	W 7$WW r  r  c           
      P   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                  ||       n6t        |t        j                   j"                        rS| j%                  |j                        \  }}| j'                  |j(                        }g ||j+                         D ]R  }	t        |	t        j,                  j.                        s(|	j0                  dk(  s8|	j2                  j5                  |       T t7        |j                        dk(  rIt9        |j                  d   d      r0t;        |dd	      r#|j                  d   j<                  j>                  nd }| j                  j                  d||||      }| jA                  ||       |j2                  j5                  |       nt        |t        j                   jB                  gtE                     rt ||      r#|j                  d   j<                  j>                  nd }| jG                  ||      \  }}| j                  j                  d||||      }| jA                  ||       ntI        d
| dtK        |             |j2                  j5                  | j'                  |j(                               tL        jO                  d|j>                  |jP                  |jR                  |jT                  |j2                  jW                  d             |j0                  dvrd|j2                  vri |j2                  d<   y y y )Nr}   c                     t        |       }|j                  }t        |      dk(  xr' t        |d   j                  t
        j                        S )Nr    r   )r  rw  r   rk   rx  rl   r	  )r  r  rw  s      r`   _is_single_tensor_returnzJGraphModuleDeserializer.deserialize_node.<locals>._is_single_tensor_return  s@    ,V4FnnGw<1$[GAJ4H4H%JZJZ)[[r_   r   rM  r  r    r,  r\  Tz!Unsupported target type for node z: z)[deserialize_node] %s: %s(%s, {%s}) -> %sr   )r*  r@  r  ),r   rb  rl   opsr  itemr   r  re   r  deserialize_sym_op_inputsr  rk  create_nodedeserialize_sym_op_outputsrk   rm   rP  deserialize_hoo_inputsdeserialize_metadatarN  r  rB  r<   rp   r3  r  r   rj  rm  r,  r  deserialize_outputsrn   r  deserialize_inputsrZ   r   r   r4  r  rA  r_  rQ  )
r#  r  r  r  r  rA  fx_noder_  rN  rS  s
             r`   r  z(GraphModuleDeserializer.deserialize_node  s   	\ 	\ h,,444"**1-33;;D11/2H2HIDjj,,_fdBPTUG++OWE

 > >?667M7MNLD&001I1IJH.t.fmmo. ,a/ADDJ4F FFMM(+," ../14O33A6DO-JDQ  ''*4499   jj,,vtG $$_g>LL)!6!6 W9T9V WX ,F3  ''*4499 
  226?KLD&jj,,vtG $$_g> 3O3DBtF|nU  	D55o6N6NOP		7LLNNLLNNLLU#	
 ::66;LT[T`T`;`.0GLL*+ <a6r_   r  c           	         t         j                  d|       |j                  dk(  rSt        j                  t        j
                  j                  | j                  |j                  j                        d       S |j                  dk(  rvt        j                  t        j
                  j                  t        j                  |j                  j                  j                        |j                  j                        S |j                  dk(  rt        j                  t        j
                  j                  t        j                  |j                   j                  j                        |j                   j"                  |j                   j$                        S |j                  dk(  rvt        j                  t        j
                  j&                  t        j                  |j(                  j                  j                        |j(                  j*                        S |j                  d	k(  rt        j                  t        j
                  j,                  t        j.                  |j0                  j                  j                  |j0                  j                  j2                  
      |j0                  j4                        S |j                  dk(  rbt        j                  t        j
                  j6                  t        j8                  |j:                  j                  j                        d       S |j                  dk(  r|t        j                  t        j
                  j                  t        j<                  |j>                  j                  | jA                  |j>                  jB                              d       S tE        d|       )Nz[deserialize_input_spec] %sr&  r  rD  r  r)  r  r   )r  rD  r  r+  r-  r.  r/  r0  r$  r#  zUnknown input spec )#r   r4  r   r:  r.   r2  r3  deserialize_argument_specr&  rD  r6  rL   r)  r  r(  r7  r   r*  r+  r8  r-  r,  r9  r%   r.  r0  r  r:  rN   r0  r4  r$  deserialize_constant_inputre   r8  )r#  r  s     r`   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!:;;r_   oc                    t         j                  d|       |j                  dk(  rSt        j                  t        j
                  j                  | j                  |j                  j                        d       S |j                  dk(  rbt        j                  t        j
                  j                  t        j                  |j                  j                  j                        d       S |j                  dk(  rvt        j                  t        j
                  j                  t        j                  |j                  j                  j                        |j                  j                         S |j                  dk(  rvt        j                  t        j
                  j"                  t        j                  |j$                  j                  j                        |j$                  j&                        S |j                  dk(  rvt        j                  t        j
                  j(                  t        j                  |j*                  j                  j                        |j*                  j,                        S |j                  d	k(  rvt        j                  t        j
                  j.                  t        j                  |j0                  j                  j                        |j0                  j,                        S |j                  d
k(  rbt        j                  t        j
                  j2                  t        j4                  |j6                  j                  j                        d       S t9        d|       )Nz[deserialize_output_spec] %sr>  r   r?  r  r@  rA  rC  rD  r0  zUnknown output spec )r   r4  r   r:  r>   rE  rF  r!  r>  rD  rG  rL   r?  r  rH  r@  r*  rI  rA  r(  rJ  rC  rB  rK  rD  r:  rN   r0  r8  )r#  r$  s     r`   deserialize_output_specz/GraphModuleDeserializer.deserialize_output_spec  ss   		0!466]"==]]..221==3D3DE 
 VV}$==]]..%%1==+<+<+A+AB 
 VV((==]]22%%1+<+<+@+@+E+EF((44 
 VV..==]]88%%1+B+B+F+F+K+KL..== 
 VV//==]]99%%1+C+C+G+G+L+LM//?? 
 VV,,==]]66%%1+@+@+D+D+I+IJ,,<< 
 VVw==]](($$!''++*:*:;  !#7s!;<<r_   rM  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]rO  )r   r4  r:  r  rP  r#  rQ  r&  )r#  rM  r  r$  s       r`   deserialize_signaturez-GraphModuleDeserializer.deserialize_signature3  sd    		-.&&ADQA44Q7QCFCSCSTa$66q9T
 	
QTs   A;B 
r  serialized_state_dictrw   rx   .r  c           	      l   t         J | a 	 t        j                  d       t        j                  d      | _        t        dd| j
                        | _        i dt        j                  j                  j                  j                  dt        j                  j                  j                  j                  dt        j                  j                  j                  j                  d	t        j                  j                  j                  j                  d
t        j                  j                  j                  j                   dt        j                  j                  j                  j"                  dt        j                  j                  j                  j$                  dt        j                  j                  j                  j&                  dt        j                  j                  j                  j(                  dt        j                  j                  j                  j*                  dt        j                  j                  j                  j,                  dt        j                  j                  j                  j.                  dt        j                  j                  j                  j0                  dt        j                  j                  j                  j2                  dt        j                  j                  j                  j4                  dt        j                  j                  j                  j6                  dt        j                  j                  j                  j8                  t        j                  j                  j                  j:                  t        j                  j                  j                  j<                  t        j                  j                  j                  j>                  t        j                  j                  j                  j@                  t        j                  j                  j                  jB                  d| _"        i | _#        tI        |      | _%        | jM                  |jN                        | _'        i | _(        tS               | _*        d\  }}d tV        jX                  tV        jZ                  fD        \  }}	|r|j]                         D ]  \  }
}|j^                  }|j`                  dk\  rtc        d|      }t        jd                  tg        |th               |j`                        | jP                  |
<   |
jk                  |      r$tm        |
to        |      d        }tc        ||      }|
jk                  |	      stm        |
to        |	      d        }tc        ||      } tq        |dz         D ]!  }ts        | j
                  jt                         # tq        |dz         D ]!  }ts        | j
                  jv                         # |to        |      dkD  rtI        |      | _<        nd | _<        | j{                  |j|                         t        | jx                        5  | j                  |j                        }d d d        t        j                  | j                  | j|                        }i }|j                  j                  d      x}rt        j                  |      |d<   t        |d      r9i |d<   |j                  j]                         D ]  \  }}|j                  |d   |<    ||_L        t        j                  || jN                  | jF                  tI        |      | jJ                  | jx                        d a S # 1 sw Y   xY w# d a w xY w) Nz
[deserialize]T)assume_static_by_defaultF)allow_fallback_kernelsallow_non_fake_inputsr  FloorDivModularIndexingWhere	PythonModModCleanDiv	CeilToInt
FloorToIntCeilDivLShiftRShiftPowByNaturalFloatPowFloatTrueDiv
IntTrueDiv!IsNonOverlappingAndDenseIndicatorTruncToFloat)
TruncToInt
RoundToIntRoundDecimalToFloatIdentity)rD  c              3   .   K   | ]  }t         |     y wrc   )r   )ro   r   s     r`   rq   z6GraphModuleDeserializer.deserialize.<locals>.<genexpr>t  s      @"#
1@s   r   r    r   r  r"  )r  r  r  r  rv   rw   rx   )Or   r   r4  r   ShapeEnvr  r   r  rl   utils_sympy	functionsr.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  r  r  r   rw   r(  r  r  r  r  r   r  r  rd   r   r   maxr   r   r   rH  r   r   rangenextunbacked_symfloat_counterunbacked_symint_counterrx   r  rk  r   deserialize_module_call_graphr  r:  _create_graph_module_for_exportrJ  rN  rQ  r   r   rj  r"  rY  r3  rW   r  )r#  r  r)  rw   rx   r  count_unbacked_symfloatcount_unbacked_symintunbacked_symfloat_prefixunbacked_symint_prefixrf   r  r   r  r  r  r  r3  r  type_fieldss                        r`   deserializez#GraphModuleDeserializer.deserialize:  sO    %,,, $e	)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78O8Y8YZDN )+D% 8;uD!=C:#%:@(,(;(;T=N=N'O@<$&< $1779 
NEArHHExx1} #Au3B3N3NO`afiohoOprtrzrz3{D--a0||$<=#&>"?"@ AB256Mq2Q/&<=#&<"="> ?@034I10M-
N 2Q67 ?T^^==>?0145 =T^^;;<= )c..AA.E&@&P#&*#""#:#@#@A78K8KL $($F$F+==%! ==TZZL D099==hGGvG!%F!3X.0LM5712%<%W%W%]%]%_ SME6@F@R@RD56u=S $L*11).."3!%!;!;56KL..#22 2  %)!3 2 %)!s,   V^/ !C!^/ ^"D^/ "^,'^/ /^3r  r  c                     || j                   v rt        d| d      ||_        || j                   |<   d|j                  vsJ | j                  |   |j                  d<   y )NzNode z& has already been deserialized before.r   )r  rZ   r  r3  r  )r#  r  r  s      r`   r  z$GraphModuleDeserializer.sync_fx_node  sg    4/// 5.T!UVV-4$$T*GLL((("::4@Ur_   c                 ,     t         fd|D              S )Nc              3   T   K   | ]  }j                  |j                         ! y wrc   )r  rD  )ro   inputr#  s     r`   rq   zDGraphModuleDeserializer.deserialize_sym_op_inputs.<locals>.<genexpr>  s      K5T++EII6Ks   %()r   )r#  r  s   ` r`   r  z1GraphModuleDeserializer.deserialize_sym_op_inputs  s    KFKKKr_   c                 t   t        |      j                  }|j                  D ci c]  }|j                  |j                   }}|j                  D ci c](  }|j                  | j                  |j                        * }}g }t               }|D ]  }	|	j                  |v r||	j                     }
||	j                     }|t        j                  k(  r|j                  |
       U|t        j                  k(  r/t        j                  |	j                        s|
||	j                  <   |	j                          xr |	j                   }|r|j                  ||	j                            t        j                  |	j                        rn|	j                  rJ t!        |      dkD  r2t               }|j#                  t%        |j'                                      |j                  ||	j                            e|	j                  |v su||	j                     ||	j                  <    t)        |      |fS c c}w c c}w Nr   )r  r  r  r  r  r  rD  r   r"   r  r<  r  keyword	iskeywordhas_default_valuer  r   r  r  r  r   )r#  r  r  schema_argsr[  argument_kindsactual_argsrA  r_  r  rD  r  is_positionals                r`   r  z*GraphModuleDeserializer.deserialize_inputs  s   -f5?? )//
 JJ

"
 
 )//
 JJ..uyy99
 
 (3% 	KJ+-!*//2%joo6<222KK$\111':K:KJOO:\.1F:??+ 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:??+3	K4 T{F""I

s   H0-H5r  c                     g }i }|D ]d  }|j                   dk7  r)| j                  |j                        ||j                   <   ;|j                  | j                  |j                               f t	        |      |fS )zO
        For deserializing HOO inputs since HOOs do not have a schema.
        r  )r  r  rD  r<  r   )r#  r  rA  r_  r  s        r`   r  z.GraphModuleDeserializer.deserialize_hoo_inputs  st      	@F{{b &*&<&<VZZ&Hv{{#D226::>?		@
 dV$$r_   inpc                     j                   }j                  }|dk(  ry |dk(  r# j                  j                  j                     S |dk(  rt
        j                     S |dk(  rt        j                     S |dk(  rt        j                     S |dk(  rt        |t              sJ  j                         5   j                  |j                         t!        j"                   j$                   j                        }d d d         j$                  j'                  |j                          j                  j)                  d|j                  |j                        S |d	k(  rt+        j,                        S |d
k(  rj.                  S |dk(  rj0                  S |dk(  rj2                  S |dk(  rj4                  S |dk(  r j7                  j8                        S |dk(  r j7                  j:                        S |dk(  r j7                  j<                        S t        |t>              rtA        |      dk(  rg S |dk(  r(|D cg c]  } j                  |j                      }}|S |dv rt?        |      S |dv r|D cg c]  } j7                  |       c}S |dk(  r fd}t?        tC        ||            S tE        d       |dk(  rhjF                  j                   j                  v r# j                  jF                  j                     S  jH                  jF                  j                     S |dk(  r jK                  jL                        S tE        d       # 1 sw Y   hxY wc c}w c c}w )Nr  r,  r  r  r  r  r  r  r  r   r   r   r  r.  r  r  r   rV  )r  r  r  r  )r  r  r  r  c                     | j                   dk(  ry | j                   dk(  r#j                  | j                  j                     S t	        d       )Nr  r,  Unhandled argument )r   r  re   r  rZ   )r  rf  r#  s    r`    deserialize_optional_tensor_argszSGraphModuleDeserializer.deserialize_input.<locals>.deserialize_optional_tensor_args$	  sJ    vv*#;.#;;AGGLLII,/B3%-HIIr_   ri  r2  r  )'re   r   r  r,  r  r  r  !_SERIALIZE_TO_TORCH_MEMORY_FORMATr  _SERIALIZE_TO_TORCH_LAYOUTr  rk   r+   r  r  rk  r:  rP  rJ  register_moduler  r   r  r   r   r   r  deserialize_sym_argumentr.  r  r  r  r   r  rZ   r2  rw   r  r  )r#  rf  re   typ_	submodulerD  resultrj  s   ``      r`   r  z)GraphModuleDeserializer.deserialize_input  sH   		xx9 [ //0B0BCC%%,S-?-?@@''4S5I5IJJ[ -cmm<<Ze]333'') X&&u{{3>>t{{DJJW	X KK''

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

ZZ *  
 [ %cmm44X::Z<<Y;;[ == \!00@@^#001A1ABB]"00AAt$5zQ	%LQRS$66sxx@RRKKE{"IIFKLs55c:LL..J C @%HII$':3%%@AA_$  %%)E)EE33C4E4E4J4JKK>>#"3"3"8"899]",,S__== #6se!<==sX X: S Ms   8AM$ M1 M6$M.c                 `   |j                   dk(  rt        |j                        S |j                   dk(  rt        |j                        S |j                   dk(  rt        |j                        S |j                   dk(  rt        |j                        S |j                   dk(  ry t        d| d      )Nr   r   r  r   r  zUnhandled constant argument z to deserialize)
r   r   r   r   r   r   r  r   r   rZ   )r#  rf  s     r`   r"  z2GraphModuleDeserializer.deserialize_constant_input9	  s    88xszz?"XX#&&XX$s}}%%XX"$$XX" #?uO!TUUr_   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: )rk   rK   r   r   r  r  rI   r   rE   r   rZ   )r#  sym_args     r`   rn  z0GraphModuleDeserializer.deserialize_sym_argumentG	  s    g~.||x'~~%*33GOODD!12||z)'''*33GOODD1||y(&*33GOODD?yIJJr_   c                 j    | j                  |j                  d   j                  j                  |       y r]  )r  r  re   r  )r#  r  r  s      r`   r  z2GraphModuleDeserializer.deserialize_sym_op_outputsY	  s)    /11!4::BBGLr_   c                 L   t        |j                        dk(  ry t        |j                        dk(  r|j                  d   j                  dk(  rd|j                  v rt	        |dd      s}g }|j                  d   j
                  }| j                  |j                        }| j                  |||d|       t        |      |j                  d<   || j                  |j                  <   y | 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    r,  ztorch.ops.higher_orderr\  Tr   r  _unused)r   r  r   r  rm  r,  r  rN  generate_getitemr   r3  r  r  r  rk   re   rK   rE   rI   r  _renamerk  _target_to_strdeserialize_multiple_outputs)r#  r  r  rR  rD  deserialized_metadatas         r`   r  z+GraphModuleDeserializer.deserialize_outputs\	  s   &&'1,''(A-''*//;> )O,B,BB1NPTU&(%--a0::(,(A(A/BZBZ([%%%haAVW&+HoU#=D,,W\\:o55a8BBGGQ(()Q.:##A&,,~P`.a4
 o55a8>>FFP(()Q.?3J3J13M3R3RV_3_"&GLLOOtzz88HIQR))/7Cr_   rD  rZ  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 rM  r  )rk   rL   r  rK   r  rI   r8  r   rk  r  r`  ra  r  r<  r  r3  r  )r#  rR  r  rD  rZ  r|  r  individual_outputs           r`   rx  z(GraphModuleDeserializer.generate_getitem	  s     c>*88D^,;;D-.;;D =d3i[I  !JJ22cN	 3 
 	$ 1244T:; 	%%&;<r_   c                 V   t        |      D ]  \  }}t        |t        t        t        f      r| j                  |||||       8t        |t              sJ |j                  dv r | j                  |||j                  ||       x|j                  dv r| j                  j                  dt        j                  ||f      }|j                  g        | j                  |d   ||j                  |       |j                  j!                  |       |d   |j                  d<   |j                  dk(  rl| j                  j                  dt        j                  ||fd      }|j                  d        d |j                  d<   |j                  j!                  |       t#        d|        y )	N)r,  r.  r  )rV  r  r  r  r  r  r  r  rM  rD  r   r  r  z Unimplemented node output type: )rW  rk   rL   rK   rI   rx  r!   r   re   rk  r  r`  ra  r<  generate_getitemsr3  r  NotImplementedError)	r#  rR  r  rA  r|  rZ  rD  list_outputr~  s	            r`   r  z)GraphModuleDeserializer.generate_getitems	  s    "$ &	THC#@PQR%%hcCXYc8,,,xxFF%%hCI^_ 	 	 #jj44#$$cN
 #&&x|[#))Mbc  ''(=>*22,  'Y&$(JJ$:$:#$$cN"	 %; %! %04!&&u-!&&--.CD),LSE*RSSM&	Tr_   c                    | j                  |j                        }g }t        |j                        dk(  rt	        |j                  d   j
                  t              sJ t	        |j                  d   j
                  d   t              sJ | j                  |||j                  d   j                  |       n| j                  |||j                  |       t        |      |j                  d<   || j                  |j                  <   y )Nr    r   r   )r  rN  r   r  rk   re   r  rL   r  rV  r   r3  r  r  )r#  r  r  r|  rR  s        r`   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""8Wo6M6Ma6P6[6[]rs""8Wo6M6MOde $HoU5<$$W\\2r_   rN  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.nnrG  r   rl   r    )rH  rl   r   r  r  rj  rm  )r  rJ  r  r  r  r#  s        r`   deserialize_meta_funczKGraphModuleDeserializer.deserialize_metadata.<locals>.deserialize_meta_func	  s    F ++J7*;*A*A#*Fqr*J'"--g6*;*A*A#*Fqr*J'001BCCF/ 3vt,,,$VT2F	3
 Mr_   r  c                     | ||ffS rc   r^   )keyr  r  s      r`   import_nn_module_stackzLGraphModuleDeserializer.deserialize_metadata.<locals>.import_nn_module_stack
  s    T2J&r_   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      )rW  r<  r   )rN  outstartr  r  r  endr  s           r`   metadata_splitzDGraphModuleDeserializer.deserialize_metadata.<locals>.metadata_split
  s    q!1'1 (FCAvQaQca1f

8EC#89 #a( 

8EF+,3x1}$}
r_   c              3   4   K   | ]  }  |         y wrc   r^   )ro   r  r  r  s     r`   rq   z?GraphModuleDeserializer.deserialize_metadata.<locals>.<genexpr>
  s#      # 't(<=#s   r  r  r  r  )	rQ  r   r   r  r  r<  r   r   r   )r#  rN  r  r  r  nn_module_stack_strr  source_fn_st_strr  source_fn_strr  
target_strtorch_fn_str
custom_strr  r  s   `             @@r`   r  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
r_   rS  c                 b   t         j                  d|       |j                  dk(  r*t        j                  |j
                  j                        S |j                  dk(  r*t        j                  |j                  j                        S |j                  dk(  r*t        j                  |j                  j                        S |j                  dk(  r:t        j                  |j                  j                  | j                  |            S t        j                  d| j                  |            S )	Nz[deserialize_argument_spec] %sr,  r  r.  r  r2  r#  r  )r   r4  r   r:  rL   r,  r  rK   r.  r  rI   r  r4  r2  r  rV  s     r`   r!  z1GraphModuleDeserializer.deserialize_argument_spec,
  s    		2A666[ $$!++*:*:;;VV|#$$!,,*>*>??VV~%&&ANN,B,BCCVV&&&AOO,@,@H^H^_`Habb&&Bd6L6LQ6OPPr_   rf  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 )Nrh  )	r:  r9   r  r!  r  r   ri  rj  rk  rl  s       r`   !deserialize_module_call_signaturez9GraphModuleDeserializer.deserialize_module_call_signature9
  s     %%;P;W;W67..q1 <Q;X;X67..q1 ##8#@#@A#$9$B$BC1F1X1X(X(Xe

 
	
 `d

 
	
s   B$B)
r  c           	          t         j                  d       |D cg c]J  }t        j                  |j                  |j
                  r| j                  |j
                        nd       L c}S c c}w )Nz 
[deserialize_module_call_graph]rp  )r   r4  r:  r8   rq  r  r  rr  s      r`   rO  z5GraphModuleDeserializer.deserialize_module_call_graphH
  sg     			56 +

  II  ::5??K

 
	
 

s   AA,)r}   Nrc   )NN)Sr[   r\   r]   dataclassesr   r  r$  r   r   r  r   r  r  r   r   r   r   r   r   r  r  rJ   rl   r  rH   r  rD   r  rM   r   r   r%   r:  r  rB  r<   r  r*   r  r   r  r.   r#  r>   r&  r-   r  r(  r,   r   r5  ry   r
   r   r   r   rW  r  r  r  r  r:   r  r!   r  r$   r"  rn  r  r  rL   rK   rI   rx  r  r{  r  r  r!  r9   r  r8   rO  r^   r_   r`   rW   rW   A  sc   R R R( 8D>  *- -c ,+- +-8E#tUBR<S3T +-`e`j`j +-ZV c5<<6G0H &x E%:O4P g %emm8K2L  
 
0
			
P(5PSAS;T2U P(r% rEHHNN rhM1 M1h M14 M1^3<	 3<bll 3<j-= -= -=^
 
B<S<S 
 cgQUp)!,p)  %T#u||*;%<e%CDp) c3h./	p)
 !uU5<<3D-EtCQTH~-U'VX]']!^_p) 'tC1L1L,L'MNp) 
p)dA Auxx}} AL&#$ &#P%T--@ %J>X J># J>XVm V VK$M$ M M&D4 &D%((-- &DP= = >>3CCD	=
 =  $CH~=<-T -T
  $CH~-T^=#=.3hhmm=	=.BT#s(^ BS#X BHQ8 Q Q
%8
			

!%o!6
	b  	!
r_   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)rX   Nexpected_opset_versionc                     i | _         |r| j                   j                  |       d| j                   vr,t        j                  j	                         | j                   d<   y y r  )r  r  rl   r  r  )r#  r  s     r`   r$  z$ExportedProgramDeserializer.__init__[
  sR    68#!''../EF44427((2T2T2VD''/ 5r_   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   r4  rd   rQ  r   )r#  r  r  r   rf   rg   symbols          r`   deserialize_range_constraintsz9ExportedProgramDeserializer.deserialize_range_constraintsb
  s    
 			56(..0 	^DAq.22155v5		DaK,-!&)Y[\]	^ ! r_   F_unsafe_skip_version_checkru   rv   rw   rx   .c                   t        |t              sJ |j                  }|j                  t        d   k7  r@|j                  dk(  r|j
                  dk(  s"|s t        d|j                   dt         d      |j                  j                         D ci c]M  \  }}|t        j                  t        |j                  t               t        |j                  t                    O }	}}t               j!                  |j"                  ||||	      }
| j%                  |	|
j&                        }t)        j                  |
j"                  |
j"                  j*                  |
j,                  |
j.                  ||
j0                  |
j2                  |
j4                  |j6                  D cg c]  }t9        |       c}	      }t:        j=                  d|       |S c c}}w c c}w )Nr   zSerialized schema version z+ does not match our current schema version rG  )	rootrk  r  rv   r   r  rx   rw   r  z
[deserialize]: %s)rk   r'   r  r  rB   r  rZ   r   rd   r   r   r   min_valr   max_valrW   rW  r  r  r  r:  rk  r  rv   r  rx   rw   r  r   r   r4  )r#  ru   rv   rw   rx   r  versionrf   rg   r  resr   rq  s                r`   rW  z'ExportedProgramDeserializer.deserializeq
  s    *O<<<"11 ==N1--w}}7Igmm_`N`-$01A1P1P0Q RAAO@PPQS  )::@@B	 
 1 **!!))fW57HTZ7[  
  
 $%[ --$ 	 !>>   

 ##!!""((MM~~/!33--mm1A1K1KLA}Q'L

 			'0C 
< Ms   AGGrc   )r[   r\   r]   r   r   r   r   r$  r   r   r   r   r  r'   r   rl   r5  ry   r   r
   r:  rW  r^   r_   r`   rX   rX   Y
  s   WxS#X/G W!"3(C(C#CD!  $C$56! 
ellK'	(	!( cg5 $)5)5 $sELL015895 c5<</0%78	5
 !uU5<<3D-EtCQTH~-U'VX]']!^_5 
		5r_   rX   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   )	rk   r   re   ry   base64	b64encoder   superr   )r#  r  	__class__s     r`   r   zEnumEncoder.default
  sL    c4 99c5!##C(//88ws##r_   )r[   r\   r]   r   __classcell__)r  s   @r`   r   r   
  s    $ $r_   r   c           
         t        | t              r!| j                  t        | j                        iS t        j                  |       rKt        j                  |       D ci c],  }|j                  t        t        | |j                              . c}S t        | t              r| D cg c]  }t        |       c}S t        | t              rt        d | D              S t        | t              r-| j                         D ci c]  \  }}|t        |       c}}S t        | t              r?| t        j                   k(  ry| t        j                    k(  ry| t        j"                  k(  ry| S | S c c}w c c}w c c}}w )Nc              3   2   K   | ]  }t        |        y wrc   )r   )ro   rS  s     r`   rq   z%_dataclass_to_dict.<locals>.<genexpr>
  s     8q'*8s   Infinityz	-InfinityNaN)rk   rS   r   r   re   r  is_dataclassrV  r  rm  r  r   r   rd   r   r   r   nan)r  frS  rf   rg   s        r`   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DHH_J
)

 4 Bs   1E+&E0 E5r  c                 j    t        j                  t        |       t        d      j	                  d      S )NF)r   	allow_nanr   )r   r   r   r   r   )r  s    r`   _to_json_bytesr  
  s'    ::(-;%PWWX_``r_   ru   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rc   )r   rx   rV   rT   rk   ru   r'   r  rt   rv   rw   )ru   r  r   serialized_program
json_bytesr   s         r`   rT   rT   
  s    
 
00@0O0O	P 
6}oV``

 (99?KKK 2 C CDJ!%%$$))	H O
 
s   BB"c           	         t        | t              rJ d|  d       t        j                  |       t        k(  rt        | j                  |      S t        j                  |       t        j                  k(  rWt        d       t        j                  |       v r7|y t        j                  |       }t        |      dk(  sJ t        |d   |      S t        | t              rt        | t              rt        |t              sJ t        |      dk(  sJ t        t        |j!                                     }t        t        |j#                                     }t        |t              sJ | j$                  |   } | j&                  di |t        ||      iS t)        j*                  |       rk | di |}t        j,                  |       }t)        j.                  |       D ]4  }|j0                  }	t        ||	   t3        ||	            }
t5        ||	|
       6 |S t        |t6              rBt        |      dk(  r|S t        j                  |       d   }|D cg c]  }t        ||       c}S t        |t              rFt        j                  |       d   }|j9                         D ci c]  \  }}|t        ||       c}}S | t:        k(  rt;        |      S |S c c}w c c}}w )NzUnresolved class type: 'z'.r   r   r    r^   )rk   r   typing
get_originr	   r   
__origin__r   r   get_argsr   
issubclassrS   r   rL  iterr  r  rz   r   r  r  get_type_hintsrV  r  rm  setattrr  rd   r   )r   dataty_argsr   _value
field_typer  
type_hintsr  r  new_field_objd_typera   v_typerf   rg   s                   r`   r   r   
  sk   #s#G'?uB%GG#*!#..$77-$t*PS@T2T<//#&7|q   !'!*d33	C	:c6#:$%%%4yA~~T$))+&'d4;;=)*%%%%((/
szzLU$6z6$JKLL		!	!#	&kDk**3/
##C( 	.A66D.z$/?dASTMC}-	. 
	D$	t9>K%a(7;<!"61-<<	D$	%a(=AZZ\JTQ%fa00JJ	T{K = Ks   KKFr  r  c                4   t        | j                  t              sJ | j                  j                  d      }t	        j
                  |      }t        t        |      }t        |      j                  || j                  | j                  | j                  |      S )Nr   r  )rk   ru   ry   r   r   r   r   r'   rX   rW  rv   rw   rx   )r   r  r  exported_program_strexported_program_dictserialized_exported_programs         r`   rW  rW    s     h//777#44;;GD JJ';<"4_F["\#$:;	'##'A 
 

	r_   c                 $    dt         fdfd fd} |j                        }t        |      t        j                        k(  sJ i fd}fd} D ]  } ||        |D ]  }	|	j                  D ]  }
 ||
         |D ]&  }	|	j                  D ]  } ||j
                          ( |D ]  }
 ||
        |D ]  }	|	j                  j                           t        t        j                  j                         t        j                  d                  }t        t        j                  j                         t        j                  d                  }t        t        j                  j                         t        j                  d                  }t        t        j                   j                         t        j                  d                  }t        t        j"                  j                         t        j                  d                  }d}|D ]  }|j                  D ]  }|j
                  }|j$                  d	k(  st'        |j(                  j*                  j                  |j(                  j*                  j                  |j(                  j*                        \  |j(                  _        }d
| |j(                  _        |dz  }  t/         ||||||j0                  |	      fS )Nr  c                    | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   d	k(  ry | j                   d
k(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  r| j
                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry t        d|        )Nr  r,  rV  r   r  r   r  r  r  r.  r  r  r  r  r  r  r  r   r  r  r  r  r  r2  r  z+Unknown input type to the ExportedProgram: )r   r,  rV  r.  r  r  r  r  r  r  r2  r8  r  s    r`   _get_argumentz*_canonicalize_graph.<locals>._get_argument&  s   66YVV{";;VV|#<<VVxVVy VVz!VV{"VV{"VV|#VV|#<<VV}$== VV~%>>!VV&??"VV''VV))VV{"VV{"VVy VVz!VV}$== VV~%>>!VVz!VV,,(((VV&??"VV}$ #Nqc!RSSr_   c                 b    t        |t              sJ t        j                  |  |             y rc   )rk   r!   rZ  tree_map)r  r  r  s     r`   for_argsz%_canonicalize_graph.<locals>.for_args]  s&    !X&&&=+,r_   c                 0    t          G d d             }t               i i g i g }dt        t           fdD ]  }fd} ||        t	               D ]2  \  }fd}|j
                  D ]  } ||         |g d      <   4 t	               D ]3  \  }fd}	|j                  D ]  } |	|j                          5 fd	}
fd
D ]  } |
|        dt        f fd}j                         D ]  \  }|j                  dk(  s |        t              dkD  rt        j                        \  }}    }|j
                  D ]  } |
|        |j                  |       v sJ    j                  D ]E  }|   }|j                  dkD  sJ |xj                  dz  c_
        |j                  dk(  s> ||       G    j                  j!                          t              dkD  r|S )Nc                   (    e Zd ZU ee   ed<   eed<   y)6_canonicalize_graph.<locals>.sort_nodes.<locals>.EdgesoutsinsN)r[   r\   r]   r  r   rz   r^   r_   r`   Edgesr  b  s    s)OHr_   r  r}   c                    | y t        | t              r| j                  S t        | t        t        t
        f      r8| j                  dk(  r| j                  S | j                  dv ry t        d|        t        | t              rC| j                  dk(  r| j                  j                  S | j                  dk(  ry t        d|        t        | t              r| j                  S t        d|        )Nr  )r   r   r   Unknown argument type: r,  r  zUnknown optional tensor type: )rk   rL   r  rK   rE   rI   r   r  r8  r=   r,  r%   r  s    r`   r  z9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_namen  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Cr_   c                 >     |       x}rj                  |       y y rc   )r  )r  r   r  graph_inputss     r`   	add_inputz:_canonicalize_graph.<locals>.sort_nodes.<locals>.add_input  s%     #1# $$Q' $r_   c                 2     |       x}r|vsJ |<   y y rc   r^   )r  r   	def_tabler  rZ  s     r`   add_defz8_canonicalize_graph.<locals>.sort_nodes.<locals>.add_def  s.     #1#I---#&IaL $r_   r   c                      |       x}rL|v ry |vr|v sJ y |   }|   j                   j                            xj                  dz  c_        y y )Nr    )r  r<  r  )	r  r   srcrw   r  edgesr  r  rZ  s	      r`   add_edgez9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_edge  sk     #1#I~	) L000#A,C#JOO**3/#JNNa'N $r_   c                 D     |       x}r|vsJ t              |<   y y rc   )r   )r  r   r  ranks     r`   add_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_rank  s0    QKq}$}d)Q  r_   c                 ,     |       }|r	|vr|   S y)NrD  r^   )r  r   rw   r  r  s     r`   get_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_rank  s"    AQi'Awr_   rZ  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 rc   )r<  )rS  r  rankss    r`   <lambda>zc_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks.<locals>.<lambda>  s    5<<#< r_   r^   )r  r  r  r  s    @r`   	get_rankszQ_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks  s    <a@r_   )r  r  rD  heapqheappushr  )	rZ  r  r   r  	args_rank
candidatesr  r  r	  s	        r`   add_candidatez>_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate  s[    
 :D=A[[I!&&)AEE"23IIINN:Y'DE Js   %A&r    )r   r  r   r   rW  r  r  rD  r   rd   r  r   r  heappopr<  r  clear)r	  r  r  r  r  r   r  r$  r  r  r  r  r  r  r  r  r  r  r  r  rZ  r  rw   r  sorted_inputss   `             @@@@@@@@r`   
sort_nodesz'_canonicalize_graph.<locals>.sort_nodesa  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! 
r_   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      r`   ry  z8_canonicalize_graph.<locals>.rename_def.<locals>._rename  sR    3z?+,H:---#+Jx v%%%%zz(3F8Or_   r  r  )rk   rL   r  r
  rK   r   r  r  rI   r  rE   r  r%   r  r8  )r  ry  rk  r  s     r`   
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#!>??r_   c                 &   | y t        | t              r,j                  | j                  | j                        | _        y t        | t        t
        f      r<| j                  dk(  r,j                  | j                  | j                        | _        y y t        | t              r<| j                  dk(  r,j                  | j                  | j                        | _        y y t        | t              rZ| j                  dk(  rJj                  | j                  j                  | j                  j                        | j                  _        y y t        | t              r,j                  | j                  | j                        | _        y t        d|        )Nr  r,  r  )rk   rL   rQ  r  rK   rI   r   r  rE   r=   r,  r%   r8  )r  r  s    r`   replace_usez(_canonicalize_graph.<locals>.replace_use  s   9a(^^AFFAFF3AFN,<=>vv"&NN199aii@	 #?+vv"&NN199aii@	 #12vv$#->>!++2B2BAKKDTDT#U  %,-^^AFFAFF3AF #:1#!>??r_   r   r  r  _gr    )	r  r  r	  r
  r  r  r  r  r  )r!   r	  r   r  r  rD  rN  r  r   sortedr
  rd   r`  
itemgetterr  r  r  r  r   _canonicalize_graphr  rk  r  r*   r  )r  sorted_outputsrk  rw   r  sorted_nodesr  r  r  r  r$  sorted_tensor_valuessorted_sym_int_valuessorted_sym_float_valuessorted_sym_bool_valuessorted_custom_obj_valuescounterr   r  r  r  r  r  s   ` ``                @@@r`   r  r  #  s   4T 4Tn-un ekk*L|EKK 0000 "$J@6@&   Q   $ 	$AZ#	$$  ) 	)A[!%%(	))  !a !  	

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

 ! %'wi.

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

    This function canonicalizes an ExportedProgram by:

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

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

    Returns:
        ExportedProgram: The canonicalized exported program.
    r   r  c                     | j                   S rc   )rq  )rS  s    r`   r  zcanonicalize.<locals>.<lambda>`  s    PQPUPU r_   r}   c                 2   | \  }\  }}t        |t              sJ |j                  dk(  rdd |fS |j                  dk(  rd|j                  j                  |fS |j                  dk(  rd|j
                  j                  |fS |j                  dk(  rd|j                  j                  |fS |j                  d	k(  rd
|j                  j                  |fS |j                  dk(  rdd |fS |j                  dk(  rd|j                  j                  |fS t        d|       )Nr&     r)  r    r   r   r-  r  r.     r0  r   r$     Unknown input type: )rk   r.   r   r)  r(  r   r*  r-  r,  r.  r  r$  r  r8  )rf  rZ  _argr!  s       r`   
rank_inputz canonicalize.<locals>.rank_inputg  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!>??r_   c                    | \  }\  }}t        |t              sJ |j                  dk(  rdd |fS |j                  dk(  rdd |fS |j                  dk(  rd|j                  j                  |fS |j                  dk(  rd|j
                  j                  |fS |j                  dk(  rd	d |fS |j                  d
k(  rdd |fS |j                  dk(  rdd |fS t        d|       )Nr>  r  r?  r@  r    rA  r  rC  r  rD  r   r0  r   Unknown output type: )rk   r>   r   r@  r*  rA  r(  r8  )r  rZ  r  r!  s       r`   rank_outputz!canonicalize.<locals>.rank_output{  s    \dD$
+++99%dC<YY-'dC<YY++d**66;;YY11d00??DDYY22dC<YY//dC<YY'!dC< #8!?@@r_   c              3   &   K   | ]	  \  }}|  y wrc   r^   ro   rZ  r  s      r`   rq   zcanonicalize.<locals>.<genexpr>  s     *Fa1*F   r^   c              3   &   K   | ]	  \  }}|  y wrc   r^   r!  s      r`   rq   zcanonicalize.<locals>.<genexpr>  s     (EvsA(Er"  c                    t        | t              sJ | j                  dk(  r| j                  j                  }|j                  dk(  r!|j
                  }|j                     |_        y |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_        y |j                  dk(  ry t        d|       |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_        y |j                  dk(  ry t        d	|       |j                  d
v ry t        d|       | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  ry t        d|        )Nr&  r,  r.  r  r   Unknown sym_int type: r  r   Unknown sym_float type: )r  r   r   r   r  r2  r  r)  r   r-  r.  r0  r$  )rk   r.   r   r&  rD  r,  r  r.  r  r8  r  r)  r   r-  r.  r0  )r!  rD  r   r   r  t_custom_objtokreplace_tables          r`   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!>??r_   c                    t        	t              sJ 	j                  dk(  r	j                  j                  }|j                  dk(  r!|j
                  }|j                     |_        y |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_        y |j                  dk(  ry t        d|       |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_        y |j                  dk(  ry t        d	|       |j                  d
v ry t        d|       	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  rI	j                  }|j                  j                     |j                  _        |j                     |_        y 	j                  dk(  rI	j                   }|j                  j                     |j                  _        |j                     |_        y 	j                  dk(  r+	j"                  j                  }|j                     |_        y t        d	       )Nr>  r,  r.  r  r   r%  r  r   r&  )r  r   r   r   r  r  r?  r@  rA  rC  rD  r0  r  )rk   r>   r   r>  rD  r,  r  r.  r  r8  r  r?  r@  rA  rC  rB  rD  r0  )
r  rD  r   r   r  gur(  r)  r!  s
           r`   replace_outputz$canonicalize.<locals>.replace_output  sk   $
+++99%""&&Cxx;&MM&qvv.\)NN66Y& -aii 8AIVVx'(+A!)EFF^+$$66Y& -aii 8AIVVz)(+CA3)GHHVV$';C5%ABBYY-'  $$A"166*AFYY++$$((A"166*AFYY11**..A"166*AFYY22++A&quuzz2AEEJ -a.?.? @AYY//((A&quuzz2AEEJ -a.?.? @AYY'!**..C$SXX.CH #8!?@@r_   rO  )rk  r  r  r  )!copydeepcopyr  r   r	  r  rd   r`  r
  r   r  r  r  rk  r   r  rP  r  rQ  r   r   r   r   rW  r  r  r'   r,   r-   r  r  r  r  )r:  rw   r  r   r  r  rk  r  r  
sorted_insr  rP  sorted_outsr  rQ  sorted_graphr*  r.  r)  r!  s                     @@r`   r  r  G  sm   ( 
r	B#,suI 0 0 6 6 8h>Q>QRS>TUVMVB$8$8$>$>$@hFYFYZ[F\]^r@@oV))IOO!!Eu||I$9$9 ::::u}}Y%;%;!<<<<@5hsmS!89 @(AE#x}c"9: A( #ellI$9$9:;J :%(*F:*F%G"{#emmY%;%;<=;K $'(E(E#F NL"5~ui#L-5@n0Ad  d  t  $ -!,/ 0
 $+((,,&& r_   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    r`   rq  zExtensionHandler.namespace&      !S]]O3S"TUUr_   c                 2    t        | j                   d      Nz op_name() must be implementedr7  r   rp   s     r`   rr  zExtensionHandler.to_op_name*      !S]]O3Q"RSSr_   r  c                 2    t        | j                   d      r:  r7  )r   r  s     r`   r  zExtensionHandler.from_op_name.  r<  r_   c                 2    t        | j                   d      )Nz  op_schema() must be implementedr7  r;  s     r`   r  zExtensionHandler.op_schema2  r8  r_   N)r[   r\   r]   __doc__classmethodr   rq  rr  r  rl   FunctionSchemar  r^   r_   r`   r5  r5  "  s     V# V V Ts T T T T T Ve22 V Vr_   r5  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 rG  z is already registered.rl   builtinsN)	r  r5  r   rk   r   r\   rH  rq  r  )rB  rC  s     r`   register_extensionrF  7  s    
 ')9:r>]^o]ppq<rr:11VgY>U3VV1gt$$$""--g6':L:L:W:WXb:cdd&&(0IIII'8G$?P/99;<r_   c                  <    t        t        j                               S rc   )r   r   r  r^   r_   r`   r  r  E  s    $$& r_   r   r  rc   (  r  r/  r   r  r  r  r   r   r^  loggingr   r`  r  r  collectionsr   r   
contextlibr   r   r   enumr   r	   r
   r   r   r   r   r   collections.abcr   r   rl   torch.export.exported_programexportru   r:  torch._export.verifierr   torch._export.non_strict_utilsr   "torch._library.fake_class_registryr   torch._subclasses.fake_tensorr   r   torch.fx.experimentalr   torch.utilsr   rZ  torch.utils._pytreer   r   torch.utils._sympy.numbersr   torch.utils._sympy.symbolr   r   torch.utils._sympy.value_rangesr   rG  r   r  r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   unionrS   __all__	getLoggerr[   r   r   rZ   r   rh   r   r   r   MetaTyper  r  uint8BYTEint8CHARuint16UINT16int16SHORTint32INTint64LONGfloat16HALFfloat32FLOATfloat64DOUBLE	complex32COMPLEXHALF	complex64COMPLEXFLOAT
complex128COMPLEXDOUBLEBOOLbfloat16BFLOAT16float8_e4m3fnFLOAT8E4M3FNfloat8_e5m2
FLOAT8E5M2r   r  
sparse_coo	SparseCoo
sparse_csr	SparseCsr
sparse_csc	SparseCsc
sparse_bsr	SparseBsr
sparse_bsc	SparseBsc_mkldnnstridedStridedr   rl  contiguous_formatContiguousFormatchannels_lastChannelsLastchannels_last_3dChannelsLast3dpreserve_formatPreserveFormatr  rk  eqnelegeltgtnegpostruncsym_notmulr  subfloordivmodpowsym_int	sym_floatsym_itesym_maxsym_minsym_sqrttruedivand_rb  anyrt   r|   r   r   r  r   r   r   r   r5  r   r   rz   r   ry   r   r   r   r   r   r   r   r   r   r   r  r  r   r  rU   rV   rW   rX   JSONEncoderr   r   r  rT   r   rW  r  r  r  r5  rF  r  r   r  r^   r_   r`   <module>r     sm         	        / % (    %   * * 0 Q ? D 1 ) > - 6 7 03 3 3 3 3 3 3 3 3 3 3 3 3h  g!	\ 	.DdO . U\\5%..$rOcOcc  	KK	JJ
 
LL*## 
KK!!	
 
KK 
KK 
MM:?? 
MM:## 
MM:$$ 
OOZ++ 
OOZ,, 
j.. 
JJ
 
NNJ'' 
00  
z,,! ( ))BC  
f&&	f&&	f&&	f&&	f&&	MM6>>	MM6>>  **DE  
\::	22	L77	<66	% ! %11R$S ! KKKKKKKKKKKKLLLLJJ	MMLLLLLLLLLL	MM	OO	MM	MM	MM	NNMM18 HxHH HH
     4& 4U\\ 4(E%,,u~~uzzQR (
sELL01 
f 
(
5!67 
H 
(
%emm 34 
 
U\\ j  >B x 9: AGZ G!15  Ne /x} /s /in /,
5c3hsCxRW1W+X 
?5:: ?s ?x} ?08C= ejj 5u|| 5t 5	ELL+56		#
	A 	R 	R 	RCD C {
e {
 {
|! ;
% ;
 ;
| T
 T
 T
n  LE L L^$$"" $6a a a /32((DcN+  	*$R 8<  %	 $T#s(^4
 ,a
5$sCx. !aH	X_ X#c(1C X XvV V*Q#YQ,-Q DF d3i.>)??@ E?A 4T*:%; ;< Ar_   