
    sh$                    @   % S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKJrJr  S SKJr  S SKJrJr  S SKJr  S SKJrJrJrJrJrJrJr  S SKJr  S SK r S SK!r!S SK"J#s  J$r%  S SK&J'r'  S S	K(J)r)  S S
K*J+r+  S SK,J-r-J.r.  S SK/J0r0  S SK1J2r3  S SK4J5r5J6r6  S SK7J8r8  S SK9J:r:J;r;  S SK<J=r=  SSK>J?r?  SSK@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrSJTrTJUrUJVrVJWrWJXrXJYrYJZrZJ[r[J\r\J]r]J^r^J_r_J`r`JaraJbrbJcrcJdrdJereJfrfJgrgJhrhJiriJjrjJkrkJlrlJmrmJnrnJoroJprpJqrqJrrr  SSKsJtrt  / SQru\	R                  " \w5      rx " S S\y5      rzS\{\\4   4S jr|\\-\}\!R                  \~\!R                  \\!R                  \%R                  4   rSrSr0 \!GR                  \aGR                  _\!GR
                  \aGR                  _\!GR                  \aGR                  _\!GR                  \aGR                  _\!GR                  \aGR                  _\!GR                  \aGR                  _\!GR                  \aGR                   _\!GR"                  \aGR$                  _\!GR&                  \aGR(                  _\!GR*                  \aGR,                  _\!GR.                  \aGR0                  _\!GR2                  \aGR4                  _\!R                  \aGR6                  _\!GR8                  \aGR:                  _\!GR<                  \aGR>                  _\!GR@                  \aGRB                  _r\|" \5      r\!GRH                  \UGRJ                  \!GRL                  \UGRN                  \!GRP                  \UGRR                  \!GRT                  \UGRV                  \!GRX                  \UGRZ                  \!GR\                  \UGR\                  \!GR^                  \UGR`                  0r\|" \5      r\!GRf                  \WGRh                  \!GRj                  \WGRl                  \!GRn                  \WGRp                  \!GRr                  \WGRt                  0r\|" \5      r\GRz                  \GR|                  \GR~                  \GR                  \GR                  \GR                  \GR                  \GR                  \
GR                  \!GR                  \GR                  \GR                  \GR                  \GR                  \GR                  \GR                  \!GR                  \!GR                  \!GR                  \!GR                  \!GR                  \!GR                  \GR                  \GR                  1r\" S \ 5       5      (       a   e\ " S S5      5       r\ " S  S!5      5       rS\FS"\!GR                  4S# jrS$\\!R                  \!R                  \!R                  \ GR                  4   4S% jrS$\\}\!R                  4   S"\j4S& jrS$\\~\!R                  4   S"\h4S' jrS$\\\!R                  4   S"\d4S( jrS)\!GR                  S"\m4S* jrSq\S+   \S,'   S-\-4S. jrS/\S0\S"\-4S1 jr\4S2\\   S3\}S"\4S4 jjrS5\\{\\4   \\S64   \4   4S7 jrS8\ GR                  S9\S"\\}   4S: jrS8\\}   S"\ GR                  4S; jrS<\ GR                  S=\;4S> jrS?\{\ GR                  \=4   S"\{\\`4   4S@ jrSA r\ " SB SC5      5       r " SD SE\5      r\ " SF SG\SH95       r\ " SI SJ\SH95       r\ " SK S+\SH95       r\ " SL SM\SH95       r " SN SO\GR                  5      rSP rSQ\S"\4SR jrS\4SS\%R                  ST\\{\\}4      S3\}S"\4SU jjrSV r SgSWSX.S2\SY\\{\\}4      S"\%R                  4SZ jjjrS"\\J\{\\4   4   4S[ jrSgS\\GS]\G\ \      S"\G4S^ jjGr " S_ S`5      GrSa\\   Sb\G\   4Sc jGrSd Gr0 Gr\{\\   \G\   4   \Se'   0 Gr\{\\G\   4   \Sf'   g)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                       \ rS rSrSrg)SerializeErrorr    N)__name__
__module____qualname____firstlineno____static_attributes__r\       q/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/_export/serde/serialize.pyrZ   rZ   r   s    rb   rZ   dc                 n    U R                  5        VVs0 s H  u  pUR                  U_M     snn$ s  snnf N)itemsvalue)rd   kvs      rc   _reverse_maprk   v   s*    #$779-941AGGQJ9---s   1;c              #   j   #    U  H)  n[        U[        R                  R                  5      v   M+     g 7frf   )
isinstancetorch_ops
OpOverload).0ops     rc   	<genexpr>rt      s$     Hxz"ejj3344x   13c                   >    \ rS rSr% \\S'   \\S'   \\S'   \\S'   Srg)SerializedArtifact   exported_program
state_dict	constantsexample_inputsr\   N)r]   r^   r_   r`   bytes__annotations__ra   r\   rb   rc   rw   rw      s    rb   rw   c                   >    \ rS rSr% \\S'   \\S'   \\S'   \\S'   Srg)_SerializedProgram   ry   rz   r{   r|   r\   N)r]   r^   r_   r`   r'   r~   r}   ra   r\   rb   rc   r   r      s    %%rb   r   returnc                     U R                   c  [        R                  " U R                  S9$ [        R                  " U R                  U R                   S9$ )N)typer   index)r   ro   devicer   )rd   s    rc   deserialize_devicer      s7    ww||((<<QVV17733rb   sc                     [        U [        R                  [        R                  [        R                  45      (       a  U R
                  R                  n [        R                  R                  R                  U 5      $ rf   )rn   ro   rJ   rD   rH   nodeexprsympyprintingreprsreprr   s    rc   _print_sympyr      sJ    !ellEMM5>>BCCFFKK>>$$Q''rb   c           	         [        U [        R                  [        R                  [
        45      (       a  [        R                  " U 5      (       a  [        R                  " [        U 5      S9$ [        U [        R                  [        R                  45      (       d   eU R                  R                  c&  [        R                  " [        [        U 5      5      S9$ [        R                  " [        [        U 5      [        R                  " U R                  R                  S9S9S9$ [        SU  S[        U 5       S35      e)Nas_intas_exprhintz,SymInt should be either symbol or int, got `` of type ``)rn   ro   rJ   r   Symbolintr   is_concrete_intcreater   r   rF   r   rG   rZ   r   r   s    rc   serialize_sym_intr      s    !ellELL#677**1--==A//a%,,!=>>>>vv{{"}}W\!_-EFF}}#$Q(//qvv{{C  :1#[a	QRS
 	
rb   c           	         [        U [        R                  [        R                  [
        45      (       a  [        R                  " U 5      (       a  [        R                  " [        U 5      S9$ [        U [        R                  [        R                  45      (       d   eU R                  R                  c&  [        R                  " [        [        U 5      5      S9$ [        R                  " [        [        U 5      [        R                  " U R                  R                  S9S9S9$ [        SU  S[        U 5       S35      e)Nas_floatr   r   z0SymFloat should be either symbol or float, got `r   r   )rn   ro   rH   r   r   floatr   is_concrete_floatr   r   r   rF   r   rG   rZ   r   r   s    rc   serialize_sym_floatr      s    !ennellE:;;,,Q//??E!H55a%..%,,!?@@@@vv{{"w|A/GHH#$Q(//E  >qcTRSWIUVW
 	
rb   c                 :   [        U [        R                  [        45      (       a\  [        R
                  " U 5      (       a  [        R                  " [        U 5      S9$ [        R                  " [        [        U 5      S9S9$ [        SU  S[        U 5       S35      e)Nas_bool)expr_strr   z.SymBool should be either symbol or bool, got `r   r   )rn   ro   rD   boolr   is_concrete_boolr   rF   r   rZ   r   r   s    rc   serialize_sym_boolr     s    !emmT*++++A..>>$q'22>>a9  <QC{4PQ7)STU
 	
rb   tc                    [        [        U R                     U R                   Vs/ s H  n[	        U5      PM     snU R
                  [        U R                  R                  U R                  R                  S9U R                  5        Vs/ s H  n[	        U5      PM     sn[	        S5      [        U R                     S9$ s  snf s  snf )z&
Extract a TensorMeta describing `t`.
r   r   )dtypesizesrequires_gradr   stridesstorage_offsetlayout)rM   _TORCH_TO_SERIALIZE_DTYPEr   shaper   r   r&   r   r   r   stride_TORCH_TO_SERIALIZE_LAYOUTr   )r   r   s     rc   serialize_tensor_metar   !  s     '0-.WW5W #W5oo188==?/0xxz:z!"1%z:(+)!((3 5 ;s   C
CrW   _CURRENT_DESERIALIZERfake_tensorc                     [        U [        R                  R                  5      n[	        U 5      n[
        R                  " [        U5      [        S9R                  S5      n[        X144$ )Nclsutf-8)rn   ro   nn	Parameterr   jsondumps_dataclass_to_dictEnumEncoderencode_reconstruct_fake_tensor)r   is_parametertensor_metatensor_meta_bytess       rc   _reduce_fake_tensorr   3  sW    k588+=+=>L'4K

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

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

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

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

.
|=c                     XR                   R                  ;  d   e[        U5      U R                   R                  U'   [        US9$ )Nr  )r%  r  r   rL   r)  r  r]  s      rc   r>  -GraphModuleSerializer.serialize_tensor_output'  s@    ++99999/DX/N&&t,4((rb   c                     XR                   R                  ;  d   e[        U5      U R                   R                  U'   [        R                  " US9$ Nr  )r%  r  r   rK   r   r8  s      rc   r?  .GraphModuleSerializer.serialize_sym_int_output,  sF    ++:::::0A(0K''-$$T22rb   c                     XR                   R                  ;  d   e[        U5      U R                   R                  U'   [        R                  " US9$ r;  )r%  r  r   rI   r   r8  s      rc   serialize_sym_float_output0GraphModuleSerializer.serialize_sym_float_output1  sF    ++<<<<<2Eh2O))$/&&t44rb   c                     XR                   R                  ;  d   e[        U5      U R                   R                  U'   [        R                  " US9$ r;  )r%  r  r   rE   r   r8  s      rc   serialize_sym_bool_output/GraphModuleSerializer.serialize_sym_bool_output6  sF    ++;;;;;1CH1M((.%%d33rb   specc           	      X   [         R                  SU5        UR                  [        R                  R
                  :X  Ga  [        UR                  [        R                  5      (       Ga  [        UR                  R                  5      [        L a*  [        R                  " UR                  R                  S9nGO<[        UR                  R                  5      [        L a)  [        R                  " UR                  R                  S9nO[        UR                  R                  5      [        L a)  [        R                  " UR                  R                  S9nO[        UR                  R                  5      [         L a)  [        R                  " UR                  R                  S9nOOUR                  R                  c  [        R                  " SS9nO#[#        SUR                  R                   S	35      e[$        R                  " ['        UR                  R(                  US
9S9$ [$        R                  " [+        U R-                  UR                  5      S9S9$ UR                  [        R                  R.                  :X  a{  UR0                  c   e[        UR                  [        R2                  5      (       d   e[$        R                  " [5        [3        UR                  R(                  S9UR0                  S9S9$ UR                  [        R                  R6                  :X  a  UR0                  c   e[        UR                  [        R2                  5      (       d   eUR8                  c   e[$        R                  " [;        [3        UR                  R(                  S9UR0                  UR8                  S9S9$ UR                  [        R                  R<                  :X  a{  UR0                  c   e[        UR                  [        R2                  5      (       d   e[$        R                  " [?        [3        UR                  R(                  S9UR0                  S9S9$ UR                  [        R                  R@                  :X  a  UR0                  c   e[        UR                  [        RB                  5      (       d   e[$        R                  " [E        [C        UR                  R(                  UR                  RF                  S9UR0                  S9S9$ UR                  [        R                  RH                  :X  aa  [        UR                  [        RJ                  5      (       d   e[$        R                  " [M        [K        UR                  R(                  S9S9S9$ [O        SU 35      e)Nz[serialize_input_spec] %sr   r   r  r   Tr  zUnhandled constant input z to serializer  rh   )constant_inputrM  )
user_inputr  rM  parameter_name)	parameter)rM  buffer_name
persistent)r   )rM  tensor_constant_name)tensor_constantr7  )rM  r5  )
custom_objtokenUnknown argument kind: )(r   r<  r  rB  	InputKind
USER_INPUTrn   rM  ConstantArgumentr   rh   r   r$   r   r   r   r   rZ   r.   r0   r  rQ   serialize_argument_spec	PARAMETERr  rL   r3   BUFFERrM  r/   CONSTANT_TENSORr4   
CUSTOM_OBJr%   r1   r8  TOKENrN   r2   r@  )r)  rC  constant_specs      rc   serialize_input_spec*GraphModuleSerializer.serialize_input_spec;  s   		-t499///$((B$7$788'3.$1$8$8$OM$((..)T1$1$8$8$PM$((..)S0$1$8$8488>>$RM$((..)U2$1$8$8$((..$QMXX^^+$1$8$8$FM(+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9##$%488==9  !#:4&!ABBrb   c                 >   [         R                  SU5        UR                  [        R                  R
                  :X  a4  [        R                  " [        U R                  UR                  5      S9S9$ UR                  [        R                  R                  :X  aa  [        UR                  [        R                  5      (       d   e[        R                  " [        [        UR                  R                  S9S9S9$ UR                  [        R                  R                   :X  a{  UR"                  c   e[        UR                  [        R                  5      (       d   e[        R                  " [%        [        UR                  R                  S9UR"                  S9S9$ UR                  [        R                  R&                  :X  a{  UR"                  c   e[        UR                  [        R                  5      (       d   e[        R                  " [)        [        UR                  R                  S9UR"                  S9S	9$ UR                  [        R                  R*                  :X  a{  UR"                  c   e[        UR                  [        R                  5      (       d   e[        R                  " [-        [        UR                  R                  S9UR"                  S
9S9$ UR                  [        R                  R.                  :X  a{  UR"                  c   e[        UR                  [        R                  5      (       d   e[        R                  " [1        [        UR                  R                  S9UR"                  S
9S9$ UR                  [        R                  R2                  :X  aa  [        UR                  [        R4                  5      (       d   e[        R                  " [7        [5        UR                  R                  S9S9S9$ [9        SU 35      e)Nz[serialize_output_spec] %srG  )user_outputr  )loss_output)rM  rL  )buffer_mutationrI  )gradient_to_parameter)rM  user_input_name)gradient_to_user_input)user_input_mutationrQ  rS  )r   r<  r  rB  
OutputKindUSER_OUTPUTr>   r   rR   rW  rM  LOSS_OUTPUTrn   rL   r6   r  BUFFER_MUTATIONr  r#   GRADIENT_TO_PARAMETERr(   GRADIENT_TO_USER_INPUTr)   USER_INPUT_MUTATIONrP   r\  rN   r?   r@  )r)  rC  s     rc   serialize_output_spec+GraphModuleSerializer.serialize_output_spec  s   		.599111$$*t/K/KDHH/UV  YY"--333dhh(9(9::::$$*~488==/QR  YY"--777;;***dhh(9(9::::$$ 2&DHHMM: $!  YY"--===;;***dhh(9(9::::$$&=&DHHMM:#';;'  YY"-->>>;;***dhh(9(9::::$$'>&DHHMM:$(KK(  YY"--;;;;;***dhh(9(9::::$$$9&DHHMM:$(KK%  YY"-----dhh(8(89999$$%%488==9  !#:4&!ABBrb   sigc           	          [         R                  S5        [        UR                   Vs/ s H  o R	                  U5      PM     snUR
                   Vs/ s H  o R                  U5      PM     snS9$ s  snf s  snf )Nz
[serialize_signature]input_specsoutput_specs)r   r<  r-   rt  r^  ru  ro  )r)  rq  r   s      rc   serialize_signature)GraphModuleSerializer.serialize_signature  sd    		+,?BO!2215OADAQAQRAQA44Q7AQR
 	
ORs   A2A7
xc                    [        U[        R                  5      (       a%  [        R                  " [        UR
                  S9S9$ [        U[        R                  5      (       a0  [        R                  " [        R                  " UR
                  S9S9$ [        U[        R                  5      (       a0  [        R                  " [        R                  " UR
                  S9S9$ [        U[        R                  5      (       a  U R                  UR                  5      $ [        U[        R                  5      (       a0  [        R                  " [        UR
                  UR                  S9S9$ [        S5      e)	Nr  r3  r  r5  r  r7  r9  TODO)rn   rB  rL   r!   r   r  rK   rI   rV  rA  rh   r%   r8  r@  r)  rx  s     rc   rW  -GraphModuleSerializer.serialize_argument_spec  s    a**++??^-HII2,,--??n.C.CAFF.STT2..//??0@0G0GPQPVPV0WXX2..//''002//00??/QVVq{{S  !((rb   c                 H   ^ ^ U U4S jm[        U[        5      nT" U5        U$ )Nc           	        > U R                   c  g U R                   [        :X  a  [        R                  U R                     R
                  nUTR                  ;   af  TR                  U   R                  nX R                  R                  :w  a3  [        SU R                   SU R                  R                   SU S35      eO*[        U R                  R                  S9TR                  U'   U R                   H  nT" U5        M     g )Nz%The given TreeSpec's namedtuple type z was found to have field names z6 but somehow previously was found to have field names rQ  )field_names)r   r   pytreeSUPPORTED_SERIALIZED_TYPEScontextserialized_type_namer(  r  _fieldsrZ   r;   children_specs)tsr  r  childr)  store_namedtuple_fieldss       rc   r  IGraphModuleSerializer.serialize_treespec.<locals>.store_namedtuple_fields  s    wwww*$'-'H'H'T'i'i$'4+J+JJ"&"A"ABV"W"c"cK"jj&8&88,CBJJ< P==?ZZ=O=O<P QTT_S``ac  9 MZfhfpfpfxfxLyD334HI**'. +rb   )r   rO   )r)  treespecserialized_treespecr  s   `  @rc   serialize_treespec(GraphModuleSerializer.serialize_treespec  s&    	/& -X7GH)""rb   module_call_signaturec           	         [         R                  SU5        [        UR                   Vs/ s H  o R	                  U5      PM     snUR
                   Vs/ s H  o R	                  U5      PM     snU R                  UR                  5      U R                  UR                  5      UR                  =n(       a  US9$ S S9$ s  snf s  snf )Nz$[serialize_module_call_signature] %sr  r  in_specout_specforward_arg_names)
r   r<  r9   r  rW  r  r  r  r  r  r)  r  rx  namess       rc   serialize_module_call_signature5GraphModuleSerializer.serialize_module_call_signature  s     			8:OP"9N9U9U9UA,,Q/9U :O9V9V9VA,,Q/9V ++,A,I,IJ,,-B-K-KL1F1X1X(X(Xe

 
	
 `d

 
	
s   B?C
c           	          [         R                  S5        U Vs/ s HC  n[        UR                  UR                  (       a  U R                  UR                  5      OS S9PME     sn$ s  snf )Nz
[serialize_module_call_graph]fqnr  )r   r<  r8   r  r  r  r)  r#  entrys      rc   serialize_module_call_graph1GraphModuleSerializer.serialize_module_call_graph  sh     			34 +

 + II  88I +

 
	
 

s   A
A'c                    S[         S[        4S jnUR                  S:X  a?  [        UR                  [
        R                  R                  /[        5       Q75      (       d   e[        UR                  5      nUR                  n[        U5      S:X  a  / $ UR                  S   nU" UR                  5      (       a\  / n[        U5       H6  u  pxU R                  X5      n	UR                  U R!                  X5      5        M8     ["        R$                  " US9/$ [        U5      S:X  a  U R'                  UR(                  U5      /$ / n
[        [+        XT5      5       GHn  u  nu  pUc`  [        UR,                  [
        R.                  [
        R0                  45      (       d   eU
R                  ["        R$                  " S	S
95        Ml  [        U[2        5      (       an  [        UR,                  [
        R.                  [
        R0                  45      (       d   eU R                  X5      n	U
R                  U R'                  X5      5        M  [        U[4        5      (       a  [        UR,                  [
        R6                  5      (       a7  [        UR,                  R9                  5       [
        R0                  5      (       d   eU R;                  X5      nUc   e/ n[        U5       H<  u  pUc  M
  U R                  X5      nUR                  U R!                  UU5      5        M>     U
R                  ["        R$                  " US95        GM  [        U[<        [>        [@        [B        45      (       a5  U R                  X5      nU
R                  U R'                  UU5      5        GMI  [E        S[G        U5       SURI                  5        35      e   U
$ )a  For a given node, return the dataclass representing its output values.

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

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

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

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

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

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

6 2H 
s
  $OPQsSs   A 
A-A((A-c                    [         R                  S5        U R                  U5      n[        UU R	                  U R
                  5      U R                  U R                  5      U R                  UR                  5      U R                  S9$ )Nz
[serialize])rx  r  r#  rY  r(  )r   r<  r  r,   rv  r"  r  r#  r  r;  r(  )r)  r  rx  s      rc   rT   GraphModuleSerializer.serialize  ss    		/"$$\2..t/C/CD">>t?U?UV99,:K:KL'+'F'F
 	
rb   )r&  r'  r"  r%  r#  r(  rf   )Dr]   r^   r_   r`   rB  ExportGraphSignaturer  r8   r*  r   r/  ro   rK  r<   rF  rN  r   rU  r  r  r   r  rd  r   rr  r%   rC  r:   rp  r
   rs  r|  r   r  r  r  r  r!   rA  rL   r>  rK   r?  rI   r>  rA  r.   r^  r>   ro  r-   rv  ArgumentSpecrW  r  r9   r  r  rt  r}  rq  r  r,   r*   r  r  rT   ra   r\   rb   rc   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&:&: 

{ 

rb   rU   )	metaclassc                   d    \ rS rSrS\4S\\\\4      S\4S jjr	S\
R                  S\4S jrS	rg)
rV   i  Nopset_versionr   c                     0 U l         U(       a  U R                   R                  U5        SU R                   ;  a+  [        R                  R	                  5       U R                   S'   X l        g Naten)r  updatero   r+  _get_max_operator_versionr   )r)  r  r   s      rc   r*  "ExportedProgramSerializer.__init__  sR    -/%%m4+++).)K)K)MDv&.rb   ry   r   c           
      L   UR                  5         [        UR                  UR                  5      nUR	                  UR
                  5      n[        UR                  5      n0 nUR                  R                  5        H	  u  pgXuU'   M     UR                  R                  5        H  u  phXe;  d   eXU'   M     [        UU R                  U[        [        S   [        S   S9UR                   V	s/ s H  oR                   PM     sn	["        R$                  S9n
['        U
[)        UR+                  5       5      5        [-        UR.                  SS9n[1        U
[3        XR4                  5      [3        XPR4                  5      [3        UR6                  U R4                  5      5      $ s  sn	f )z;
Args:
    exported_program: Exported Program to serialize
r   r    )majorminorr  r  r   schema_version	verifierstorch_versionF)in_place)validaterU   r"  r#  rT   r  r  r   r&  rg   r{   r'   r  rC   rB   r  dialectro   __version__canonicalizesetr  r   rz   r   r   r   r|   )r)  ry   gm_serializerserialized_graph_moduleserialized_range_constraintsr{   ncr   rj   serialized_epnew_state_dicts               rc   rT   #ExportedProgramSerializer.serialize  s   
 	!!#-,,.>.P.P
 #0"9"9:J:W:W"X'B..(
$ %'	!--335DAaL 6$..446DA%%%aL 7 (0,,:($Q'$Q' +;*D*DE*DQyy*DE++

 	]C	(8$9: 6''%
 "$^5I5IJ$Y0D0DE$%5%D%DdFZFZ[	
 	
 Fs   /F!)r  r   )r]   r^   r_   r`   DEFAULT_PICKLE_PROTOCOLr   r   r   r   r*  rB  r'   r   rT   ra   r\   rb   rc   rV   rV     sC    AE^u /htCH~&> /X[ /1
"*<*< 1
AS 1
rb   rV   c                      \ rS rSr\R
                   " S S5      5       rSES jr\S\	S   4S j5       r
S\4S	 jrS\4S
 jrSFS\S\\\\\4      S\R(                  4S jjrS\S\\\R,                  4   4S jrS\S\\\R2                  4   4S jrS\S\\\R6                  4   4S jrS\S\4S jrS\ S\!R@                  4S jr"S\\\RF                  RH                  \4      4S jr%S\&S\RF                  RL                  4S jr'S\$S\(SS4S jr)S\*S\!RT                  4S jr+S\,S\!RX                  4S jr-S \.S\!R^                  4S! jr0  SGS"\1S#\\2\\Rf                  4   \44   S$\\2\\54   \44   S%\\\6\6\Rf                  S&4   \2\\54   4   \44      S'\\2\\7Rp                  4      S\4S( jjr9S)\S*\RF                  RH                  4S+ jr:S, r;S\$4S- jr<S.\=\>   4S/ jr?S0\@S\54S1 jrAS0\BS\54S2 jrCS3 rDS\$S*\RF                  RH                  4S4 jrES\$S*\RF                  RH                  4S5 jrFS*\RF                  RH                  S6\\G\H\I4   S7\S8\2\\54   4S9 jrJS*\RF                  RH                  S8\2\\54   4S: jrKS\$S*\RF                  RH                  SS4S; jrLS<\2\\4   S\2\\54   4S= jrMS>\@S\!R                  4S? jrOS@\PS\!R                  4SA jrQSB\=\R   S\=\!R                     4SC jrSSDrTg)HrW   iA  c                      \ rS rSr% \R
                  R                  \S'   \R                  \S'   \
\R                     \S'   \\\R                  4   \S'   \\\\R"                  \R$                  R&                  4   4   \S'   \\\\R"                  \\R*                  4   4   \S'   \\\\R"                  S4   \\\4   4      \S	'   S
rg)GraphModuleDeserializer.ResultiC  r  r  r#  names_to_symbolsrz   r{   .r|   r\   N)r]   r^   r_   r`   ro   rK  r,   r~   rB  r  r  r8   r   r   r   r   r   r=  r   r   r   r,  r   r   r
   ra   r\   rb   rc   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Qrb   r  r   Nc                     0 U l         0 U l        [        R                  R	                  5       U l        [        R                  R                  5       U l        g rf   )	serialized_name_to_nodeserialized_name_to_metaro   rK  r*   rx  r   ModulerT  )r)  s    rc   r*   GraphModuleDeserializer.__init__M  s6    AC$<>$XX^^%
hhoo'rb   c              #     #    U R                   U R                  U R                  U R                  4n[        R
                  R                  5       U l         [        R                  R                  5       U l        0 U l        0 U l         S v   Uu  U l         U l        U l        U l        g ! Uu  U l         U l        U l        U l        f = f7frf   )	rx  rT  r  r  ro   rK  r*   r   r  r-  s     rc   save_graph_module)GraphModuleDeserializer.save_graph_moduleS  s      JJKK((((	
 XX^^%
hhoo'')$')$	 
,,
,,s   BCB& 
C&CCserialized_targetc                 f    UR                  S5      u  p#USS  n[        U   nUR                  U5      $ )Nrj  r    )split_deserialization_registryfrom_op_name)r)  r  r~  r  r  s        rc   deserialize_extension_operator6GraphModuleDeserializer.deserialize_extension_operatori  s;    .44S9	abM	+I6##G,,rb   c                 p   UR                  S5      (       a  [        nUR                  S5      SS  nOZUR                  S5      (       a  [        nUR                  S5      SS  nO)UR                  S5      (       a  U R	                  U5      $ U$ UnU H"  n[        XE5      (       d  Us  $ [        XE5      nM$     U$ )N	_operatorrQ  r    ro   rk  )rR  rm  r  ro   r  rw  rz  )r)  r  rT  serialized_target_namesr  r  s         rc   deserialize_operator,GraphModuleDeserializer.deserialize_operatoro  s    ''
 
 F&7&=&=c&B12&F#))'22F&7&=&=c&B12&F#))#..667HII$$+D6(((( .	 ,
 rb   r   r   c           	         ^  SS[         R                  S[        [        [        [
        [        4      S[         R                  4U 4S jjjn[         R                  " U0 T R                  ET R                  ES9nU" XB5      $ )zl
Parses and does bottom-up processing of sympy.Expr nodes,
populating ShapeEnv & caching symbols as needed.
r   r   r   c                 (  > U R                   (       d"  U R                  (       d  U R                  (       a  U $ [        U 5      nU R                   H  nTR                  U5        M     UTR                  ;   a  TR                  U   n OU TR                  U'   [        U [        R                  5      (       aU  [        R                  " U [        R                  [        R                  45      (       a  TR                  R!                  U 5        Ub5  U TR"                  R$                  ;  a  TR"                  R'                  X5        TR(                  R+                  U5      =n(       a/  TR"                  R-                  U UR.                  UR0                  S9  U $ )N)compiler_mincompiler_max)
is_Integeris_Float
is_Booleanr   rJ  _parse_sym_exprsymbol_name_to_symbolrn   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_ranger\  constrain_symbol_ranger   r  )r   r   r   rM  vrr)  s        rc   _process_sym_exprBGraphModuleDeserializer._parse_sym_expr.<locals>._process_sym_expr  s3   ~~
 s888C((- $ t99944X>C;>D..x8"355+::3ARARTXTgTg@hii--11#6 $4>>#<#<<NN11#<2266x@@2@NN99%'XX%'XX : 
 Jrb   )localsrf   )
r   Exprr   r   r   r   r   sympifysympy_functionsr  )r)  r   r   r  r   s   `    rc   r
  'GraphModuleDeserializer._parse_sym_expr  sx    
 	5::  	XeCuDT>U5V  	bgblbl  	  	D }}Id**Id.H.HI
 !,,rb   r   c                    UR                   nUR                  S:X  aw  UR                  c  S nO2UR                  R                  S:X  d   eUR                  R                   nU R                  UR                  U5      nU R
                  R                  XCS9$ UR                  S:X  a  [        U5      [        L d   eU$ [        SUR                   SUR                    35      e)Nr   r   r   zSymInt has invalid field type  with value )	rh   r   r   r
  r   r  create_symintnoder   rZ   r)  r   r   r   r   s        rc   deserialize_sym_int+GraphModuleDeserializer.deserialize_sym_int  s    gg66Yxxxx}}000xx~~&&s||T:C>>33C3CCVVx9###J 0QWWIN rb   c                    UR                   nUR                  S:X  a^  UR                  (       a  UR                  R                  OS nU R	                  UR
                  U5      nU R                  R                  XCS9$ UR                  S:X  a  [        U[        5      (       d   eU$ [        SUR                   SUR                    35      e)Nr   r   r   z SymFloat has invalid field type r  )rh   r   r   r   r
  r   r  create_symfloatnodern   r   rZ   r!  s        rc   deserialize_sym_float-GraphModuleDeserializer.deserialize_sym_float  s    gg66Y(+388$$dD&&s||T:C>>55c5EEVVz!c5))))J 2166(,qwwiP rb   c                 B   UR                   nUR                  S:X  a6  U R                  UR                  5      nU R                  R                  U5      $ UR                  S:X  a  [        U[        5      (       d   eU$ [        SUR                   SUR                    35      e)Nr   r   zSymBool has invalid field type r  )	rh   r   r
  r   r  create_symboolnodern   r   rZ   )r)  r   r   r   s       rc   deserialize_sym_bool,GraphModuleDeserializer.deserialize_sym_bool  s    gg66Y''5D>>44T::VVy c4((((J 1!&&aggYO rb   r   c                 n  ^  T R                      [        [        [        R                  " [        U 4S jUR                   5       5      [        U 4S jUR                   5       5      [        UR                  5      [        UR                     UR                  S95      sS S S 5        $ ! , (       d  f       g = f)Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7frf   r"  rr   r   r)  s     rc   rt   BGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>  s!     UCTC$22377CTr  c              3   F   >#    U  H  nTR                  U5      v   M     g 7frf   r.  r/  s     rc   rt   r0    s!     WCVC$22377CVr  )r   r   r   )fake_tensor_moder   r   ro   empty_stridedr   r   r   r   r   _SERIALIZE_TO_TORCH_DTYPEr   r   )r)  r   s   ` rc   r   /GraphModuleDeserializer.deserialize_tensor_meta  s     ""##U;CTCTUUW;CVCVWW-k.@.@A3K4E4EF"-";";	 #""s   BB&&
B4r  c                 T    [         R                  " UR                  UR                  S9$ )Nr7  )rB  r%   r  r8  r  s     rc   deserialize_script_obj_meta3GraphModuleDeserializer.deserialize_script_obj_meta  s)     ## %%%//
 	
rb   c                    UR                   S:X  a#  U R                  UR                  R                     $ UR                   S:X  a#  U R                  UR                  R
                     $ UR                   S:X  a#  U R                  UR                  R
                     $ UR                   S:X  a#  U R                  UR                  R
                     $ UR                   S:X  a  UR                  $ UR                   S:X  a  UR                  $ UR                   S:X  a  UR                  $ UR                   S:X  a  g [        S	U 35      e)
Nr4  r6  r  r  r   r   r   r  z"Unable to deserialize output node )r   r  r4  r  r6  r  r  r  r   r   r   rZ   )r)  rI  s     rc   deserialize_graph_output0GraphModuleDeserializer.deserialize_graph_output  s
   ;;+%//0@0@0E0EFF[[L(//0A0A0I0IJJ[[M)//0B0B0J0JKK[[N*//0C0C0K0KLL[[H$== [[J&??"[[I%>>![[I% #EfX!NOOrb   serialized_graphc           	         [         R                  S5        UR                  R                  5        HP  u  p#[         R                  SX#5        U R	                  U5      n[         R                  SX$5        X@R
                  U'   MR     UR                  R                  5        HP  u  p%[         R                  SX%5        U R                  U5      n[         R                  SX&5        X`R
                  U'   MR     UR                  R                  5        HP  u  p'[         R                  SX'5        U R                  U5      n[         R                  SX(5        XR
                  U'   MR     UR                  R                  5        HP  u  p)[         R                  SX)5        U R                  U	5      n
[         R                  S	X*5        XR
                  U'   MR     UR                  R                  5        H9  u  p+[         R                  S
U5        U R                  U5      U R
                  U'   M;     [         R                  S5        [        UR                  5       GH  u  p[         R                  SU5        UR                   S;   aJ  UR"                  R$                  nU R&                  R)                  U5      nXl        U R+                  X5        Mv  UR                   S:X  a}  UR"                  R                   S:X  aJ  UR"                  R,                  nU R&                  R)                  U5      nXl        U R+                  X5        M  [/        SUR"                   S35      eUR                   S;   ai  U R0                  R2                  U   R4                  R$                  nU R&                  R)                  U5      nU R7                  U5      UR8                  S'   GM|  [/        SU 35      e   UR:                   H1  n U R=                  UR>                  5      nU RA                  UU5        M3     / nURH                   H9  n[         R                  SU5        URK                  U RM                  U5      5        M;     URN                  (       a  [Q        U5      S:X  d   eUS   nO[S        U5      nU R&                  RU                  U5      nURN                  (       a*  URV                  S   R8                  S   UR8                  S'   O,[S        S URV                  S    5       5      UR8                  S'   U R&                  R:                   Hg  nUR8                  RY                  S5      =nc  M#  [Z        R\                  " USU R^                  U R`                  SS9=n(       d  MX  UUR8                  S'   Mi     [Q        U R`                  5      S:X  d   eU R&                  $ ! [B         a*  n[/        SU S[D        RF                  " 5        35      UeS nAff = f)Nz
[deserialize_graph]z([deserialize_tensor_meta] %s (input): %sz)[deserialize_tensor_meta] %s (output): %sz$[deserialize_sym_int] %s (input): %sz%[deserialize_sym_int] %s (output): %sz&[deserialize_sym_float] %s (input): %sz'[deserialize_sym_float] %s (output): %sz%[deserialize_sym_bool] %s (input): %sz&[deserialize_sym_bool] %s (output): %sz [deserialize_script_obj_meta] %sz
[deserialize graph nodes]z[deserialize input] %s)r4  r:  r6  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      #    U  H?  n[        U[        R                  R                  5      (       a  UR                  S    OUv   MA     g7f)r   N)rn   ro   rK  r<   r;  )rr   rM  s     rc   rt   <GraphModuleDeserializer.deserialize_graph.<locals>.<genexpr>l  s8      ,.C $.c588==#A#AsJ.s   AA	r\   T)r  pendingsimplifyunbacked_bindings)1r   r<  r  rg   r   r  r  r"  r  r&  r  r*  r  r7  rc  r  r   rh   r  rx  r2  sync_fx_noder  rZ   r  rt  rM  deserialize_inputr;  r  r  r  deserialize_noder  r  r  r  rD  r:  r  r   r   rI  rJ  r\  r    _free_unbacked_symbols_with_pathr  r  )r)  r<  r  tensor_valuer]  sym_int_valueint_valsym_float_value	float_valsym_bool_valuebool_valr  r  input_	node_nameplaceholder_nodeserialized_noder  r  r  rI  output_noder   r   rB  s                            rc   deserialize_graph)GraphModuleDeserializer.deserialize_graph  s   		)* #3"@"@"F"F"HDII@$U33LAHIIA4R19((.	 #I $4#B#B#H#H#JDII<dR..}=GII=tM18((.	 $K &6%F%F%L%L%N!DII>V22?CIII?Q1:((.	 &O %5$D$D$J$J$L DII=tT00@HII>O19((.	 %M &6%G%G%M%M%O!DII8/J151Q1Q2D((. &P 			/0"#3#:#:;IAII.7{{<<"LL--	#'::#9#9)#D  )2%!!)>,<<$$	1 & 4 4I'+zz'='=i'H$ -6)%%iB(+KFLL>Ye)fgg !  !NN66q9==BB	#'::#9#9)#D /3/E/Ef/M %%e,$':6(%CDD= <B  055O22?3I3IJ%%ov>  6 &..FII/8NN488@A / 33w<1$$$ajGGnGjj''033&1&6&6q&9&>&>u&EKU#&+ ,&++A., 'KU# JJ$$D		e,,9)8)Y)YR4>>4CXCXcg* % 
 2C		-. % 4(()Q...zzQ  $00AAWXaXlXlXnWops   +-W
W8%W33W8rQ  r  c           
         S[         4S jnU[        ;   d2  U[        R                  R                  R
                  R                  :X  ao  UR                  S   R                  R                  nU R                  UR                  5      nU R                  R                  SX%0 U5      nU R                  X5        GOQ[        U[        R                   R"                  5      (       Gad  U R%                  UR                  5      u  pWU R'                  UR(                  5      n/ UQUR+                  5       Q7 H[  n	[        U	[        R,                  R.                  5      (       d  M.  U	R0                  S:X  d  M@  U	R2                  R5                  U5        M]     [7        UR                  5      S:X  aS  [9        UR                  S   S5      (       a5  [;        USS	5      (       a#  UR                  S   R<                  R>                  OS nU R                  R                  SX%Xt5      nU RA                  X5        UR2                  R5                  U5        O[        U[        R                   RB                  /[E        5       Q75      (       at  U" U5      (       a#  UR                  S   R<                  R>                  OS nU RG                  X!5      u  pWU R                  R                  SX%Xt5      nU RA                  X5        O[I        S
U S[K        U5       35      eUR2                  R5                  U R'                  UR(                  5      5        [L        RO                  SUR>                  URP                  URR                  URT                  UR2                  RW                  S5      5        UR0                  S;  a!  SUR2                  ;  a  0 UR2                  S'   g g g )Nr   c                     [        U 5      nUR                  n[        U5      S:H  =(       a'    [        US   R                  [
        R                  5      $ )Nr    r   )r  r  r   rn   r  ro   r&  )r  r  r  s      rc   _is_single_tensor_returnJGraphModuleDeserializer.deserialize_node.<locals>._is_single_tensor_return  s@    ,V4FnnGw<1$[GAJ4H4H%JZJZ)[[rb   r   rX  r  r    r4  ri  Tz!Unsupported target type for node z: z)[deserialize_node] %s: %s(%s, {%s}) -> %sr   )r2  rI  r  ),r   ro  ro   opsr  itemr   r  rh   r  deserialize_sym_op_inputsr  rx  create_nodedeserialize_sym_op_outputsrn   rp   r[  deserialize_hoo_inputsdeserialize_metadatarY  r4  rK  r<   rs   r;  r  r   rw  rz  r4  r  deserialize_outputsrq   r  deserialize_inputsrZ   r   r   r<  r  rJ  rl  r\  )
r)  rQ  r  rW  r  rJ  fx_noderl  rY  rx  s
             rc   rE  (GraphModuleDeserializer.deserialize_node  s   	\ 	\ h,,444"**1-33;;D11/2H2HIDjj,,_fBPTUG++OE

 > >??667M7MNLD001I1IJH.t.fmmo.a//ADDJ4F FFMM(+ /" ../14O33A6DDO-JDQQ  ''*4499   jj,,vG $$_>LL)!6!6 W9T9V WXX ,F33  ''*4499 
  226KLDjj,,vG $$_> 3O3DBtF|nU  	D55o6N6NOP		7LLNNLLNNLLU#	
 ::66;LT[T`T`;`.0GLL*+ <a6rb   r  c           	      p   [         R                  SU5        UR                  S:X  aQ  [        R                  " [        R
                  R                  U R                  UR                  R                  5      S S9$ UR                  S:X  ar  [        R                  " [        R
                  R                  [        R                  " UR                  R                  R                  S9UR                  R                  S9$ UR                  S:X  a  [        R                  " [        R
                  R                  [        R                  " UR                   R                  R                  S9UR                   R"                  UR                   R$                  S9$ UR                  S:X  ar  [        R                  " [        R
                  R&                  [        R                  " UR(                  R                  R                  S9UR(                  R*                  S9$ UR                  S	:X  a  [        R                  " [        R
                  R,                  [        R.                  " UR0                  R                  R                  UR0                  R                  R2                  S
9UR0                  R4                  S9$ UR                  S:X  a^  [        R                  " [        R
                  R6                  [        R8                  " UR:                  R                  R                  S9S S9$ UR                  S:X  ax  [        R                  " [        R
                  R                  [        R<                  " UR>                  R                  U RA                  UR>                  RB                  5      S9S S9$ [E        SU 35      e)Nz[deserialize_input_spec] %srH  r  rM  r  rK  r  r   )r  rM  r  rM  rO  rP  r7  rR  rF  rE  zUnknown input spec )#r   r<  r   rB  r.   rT  rU  deserialize_argument_specrH  rM  rX  rL   rK  r  rJ  rY  r   rL  rM  rZ  rO  rN  r[  r%   rP  r8  r5  r\  rN   rR  rV  rF  deserialize_constant_inputrh   r@  )r)  r  s     rc   deserialize_input_spec.GraphModuleDeserializer.deserialize_input_spec  s   		/366\!<<\\,,221<<3C3CD 
 VV{"<<\\++%%1;;??+?+?@{{11 
 VVx<<\\((%%188<<+<+<=xx++88..	  VV((<<\\11%%1+<+<+@+@+E+EF((== 
 VV|#<<\\,,(())..!,,:J:J:T:T ||33  VVw<<\\''$$!''++*:*:; 
 VV''<<\\,,''))..99!:J:J:P:PQ   !#6qc!:;;rb   oc                    [         R                  SU5        UR                  S:X  aQ  [        R                  " [        R
                  R                  U R                  UR                  R                  5      S S9$ UR                  S:X  a^  [        R                  " [        R
                  R                  [        R                  " UR                  R                  R                  S9S S9$ UR                  S:X  ar  [        R                  " [        R
                  R                  [        R                  " UR                  R                  R                  S9UR                  R                   S9$ UR                  S:X  ar  [        R                  " [        R
                  R"                  [        R                  " UR$                  R                  R                  S9UR$                  R&                  S9$ UR                  S:X  ar  [        R                  " [        R
                  R(                  [        R                  " UR*                  R                  R                  S9UR*                  R,                  S9$ UR                  S	:X  ar  [        R                  " [        R
                  R.                  [        R                  " UR0                  R                  R                  S9UR0                  R,                  S9$ UR                  S
:X  a^  [        R                  " [        R
                  R2                  [        R4                  " UR6                  R                  R                  S9S S9$ [9        SU 35      e)Nz[deserialize_output_spec] %sra  re  rb  r  rc  rd  rf  rg  rR  zUnknown output spec )r   r<  r   rB  r>   rh  ri  rf  ra  rM  rj  rL   rb  r  rk  rc  rL  rl  rd  rJ  rm  rf  re  rn  rg  r\  rN   rR  r@  )r)  rj  s     rc   deserialize_output_spec/GraphModuleDeserializer.deserialize_output_spec  ss   		0!466]"==]]..221==3D3DE 
 VV}$==]]..%%1==+<+<+A+AB 
 VV((==]]22%%1+<+<+@+@+E+EF((44 
 VV..==]]88%%1+B+B+F+F+K+KL..== 
 VV//==]]99%%1+C+C+G+G+L+LM//?? 
 VV,,==]]66%%1+@+@+D+D+I+IJ,,<< 
 VVw==]](($$!''++*:*:;  !#7s!;<<rb   rq  c           	         [         R                  S5        [        R                  " UR                   Vs/ s H  o R                  U5      PM     snUR                   Vs/ s H  o0R                  U5      PM     snS9$ s  snf s  snf )Nz
[deserialize_signature]rs  )r   r<  rB  r  rt  rh  ru  rl  )r)  rq  r  rj  s       rc   deserialize_signature-GraphModuleDeserializer.deserialize_signature3  sj    		-.&&ADQA44Q7QCFCSCSTCSa66q9CST
 	
QTs   A=B
r  serialized_state_dictr{   r|   .r  c           
         [         b   eU q  [        R                  S5        [        R                  " SS9U l        [        SSU R
                  S9U l        0 S[        R                  R                  R                  R                  _S[        R                  R                  R                  R                  _S[        R                  R                  R                  R                  _S	[        R                  R                  R                  R                  _S
[        R                  R                  R                  R                   _S[        R                  R                  R                  R"                  _S[        R                  R                  R                  R$                  _S[        R                  R                  R                  R&                  _S[        R                  R                  R                  R(                  _S[        R                  R                  R                  R*                  _S[        R                  R                  R                  R,                  _S[        R                  R                  R                  R.                  _S[        R                  R                  R                  R0                  _S[        R                  R                  R                  R2                  _S[        R                  R                  R                  R4                  _S[        R                  R                  R                  R6                  _S[        R                  R                  R                  R8                  _[        R                  R                  R                  R:                  [        R                  R                  R                  R<                  [        R                  R                  R                  R>                  [        R                  R                  R                  R@                  [        R                  R                  R                  RB                  S.EU l"        0 U l#        [I        U5      U l%        U RM                  URN                  5      U l'        0 U l(        [S        5       U l*        Su  pgS [V        RX                  [V        RZ                  4 5       u  pU(       a  UR]                  5        H  u  pUR^                  nUR`                  S:  a  [c        SU5      n[        Rd                  " [g        U[h        * 5      UR`                  5      U RP                  U
'   U
Rk                  U5      (       a$  [m        U
[o        U5      S  5      n[c        Xm5      nM  U
Rk                  U	5      (       d  M  [m        U
[o        U	5      S  5      n[c        X}5      nM     [q        US-   5       H"  n[s        U R
                  Rt                  5        M$     [q        US-   5       H"  n[s        U R
                  Rv                  5        M$     Ub   [o        U5      S:  a  [I        U5      U l<        OS U l<        U R{                  UR|                  5        [        U Rx                  5         U R                  UR                  5      nS S S 5        [        R                  " U R                  U R|                  5      n0 nUR                  R                  S5      =n(       a  [        R                  " U5      US'   [        US5      (       a;  0 US'   UR                  R]                  5        H  u  nnUR                  US   U'   M     UUlL        [        R                  UU RN                  WU RF                  [I        U5      U RJ                  U Rx                  S9S q $ ! , (       d  f       GN= f! S q f = f) Nz
[deserialize]T)assume_static_by_defaultF)allow_fallback_kernelsallow_non_fake_inputsr  FloorDivModularIndexingWhere	PythonModModCleanDiv	CeilToInt
FloorToIntCeilDivLShiftRShiftPowByNaturalFloatPowFloatTrueDiv
IntTrueDiv!IsNonOverlappingAndDenseIndicatorTruncToFloat)
TruncToInt
RoundToIntRoundDecimalToFloatIdentity)r  c              3   4   #    U  H  n[         U   v   M     g 7frf   )r   )rr   r   s     rc   rt   6GraphModuleDeserializer.deserialize.<locals>.<genexpr>t  s      @'O!
1'Os   r   r    r   r  r(  )r  r  r#  r  rz   r{   r|   )Or   r   r<  r   ShapeEnvr  r   r2  ro   utils_sympy	functionsrv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r{   ro  r  r  r  r  r   r  r  rg   r   r  maxr   r   r   rR  r   r   rangenextunbacked_symfloat_counterunbacked_symint_counterr|   rS  rx  r   deserialize_module_call_graphr#  rB  _create_graph_module_for_exportrT  rY  r\  r   r   rw  r(  r  r;  rW   r  )r)  r  rq  r{   r|   r  count_unbacked_symfloatcount_unbacked_symintunbacked_symfloat_prefixunbacked_symint_prefixri   r  r   r  r  r#  r  r;  r  type_fieldss                        rc   deserialize#GraphModuleDeserializer.deserialize:  s0    %,,, $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9EAHHExx1} #Au3B3N3NO`afiohoOprtrzrz3{D--a0||$<==#&>"?"@ AB256M2Q/&<==#&<"="> ?@034I0M- : 2Q67T^^==> 80145T^^;;< 6 )c..AA.E&@&P#&*#""#:#@#@A78K8KL$($F$F+==%! M ==TZZL D099==hGGvG!%F!3X.0LMM5712%<%W%W%]%]%_ME6@F@R@RD56u= &` $L*11).."3!%!;!;56KL..#22 2  %)!3 ML2 %)!s,   V_ ,C(_ ^?0D_ ?
_	_ _r  rb  c                     XR                   ;   a  [        SU S35      eXl        X R                   U'   SUR                  ;  d   eU R                  U   UR                  S'   g )NzNode z& has already been deserialized before.r   )r  rZ   r  r;  r  )r)  r  rb  s      rc   rC  $GraphModuleDeserializer.sync_fx_node  sa    /// 5.T!UVV-4$$T*GLL((("::4@Urb   c                 .   ^  [        U 4S jU 5       5      $ )Nc              3   Z   >#    U  H   nTR                  UR                  5      v   M"     g 7frf   )rD  rM  )rr   inputr)  s     rc   rt   DGraphModuleDeserializer.deserialize_sym_op_inputs.<locals>.<genexpr>  s#     KF5T++EII66Fs   (+)r   )r)  r  s   ` rc   r[  1GraphModuleDeserializer.deserialize_sym_op_inputs  s    KFKKKrb   c                    [        U5      R                  nUR                   Vs0 s H  nUR                  UR                  _M     nnUR                   Vs0 s H)  nUR                  U R                  UR                  5      _M+     nn/ n[        5       nU GH  n	U	R                  U;   a  XiR                     n
XYR                     nU[        R                  :X  a  UR                  U
5        MW  U[        R                  :X  a5  [        R                  " U	R                  5      (       d  XU	R                  '   M  U	R                  5       (       + =(       a    U	R                  (       + nU(       a  UR                  XiR                     5        M  [        R                  " U	R                  5      (       at  U	R                  (       a   e[!        U5      S:  a2  [        5       nUR#                  [%        UR'                  5       5      5        UR                  XiR                     5        GM  U	R                  U;   d  GM  XiR                     XR                  '   GM     [)        U5      U4$ s  snf s  snf Nr   )r  r  r  r  r  rD  rM  r   r"   r  rD  r  keyword	iskeywordhas_default_valuer  r   r  r  r4  r   )r)  r  rQ  schema_argsr  argument_kindsactual_argsrJ  rl  r  rM  r  is_positionals                rc   ra  *GraphModuleDeserializer.deserialize_inputs  s   -f5?? )//
/ JJ

"/ 	 
 )//
/ JJ..uyy99/ 	 
 (3%J+-!//2%oo6<222KK$\111':K:KJOO:\:\.1:??+ 0022P:;P;P7P  K89"":??33%0000v;?(]FKKV]]_ 56K89??k1.9//.JF??+3 &4 T{F""I

s   !I 0I%r  c                     / n0 nU Hf  nUR                   S:w  a)  U R                  UR                  5      X4R                   '   M<  UR                  U R                  UR                  5      5        Mh     [	        U5      U4$ )z?
For deserializing HOO inputs since HOOs do not have a schema.
r  )r  rD  rM  rD  r   )r)  r  rJ  rl  rN  s        rc   r^  .GraphModuleDeserializer.deserialize_hoo_inputs  sk     F{{b &*&<&<VZZ&H{{#D226::>?	 
 dV$$rb   inpc                 N  ^ ^ TR                   nTR                  nUS:X  a  g US:X  a#  T R                  TR                  R                     $ US:X  a  [
        TR                     $ US:X  a  [        TR                     $ US:X  a  [        TR                     $ US:X  a  [        U[        5      (       d   eT R                  5          T R                  UR                  5        [         R"                  " T R$                  T R                  5      nS S S 5        T R$                  R'                  UR                  W5        T R                  R)                  SUR                  UR                  S9$ US	:X  a  [+        TR,                  5      $ US
:X  a  TR.                  $ US:X  a  TR0                  $ US:X  a  TR2                  $ US:X  a  TR4                  $ US:X  a  T R7                  TR8                  5      $ US:X  a  T R7                  TR:                  5      $ US:X  a  T R7                  TR<                  5      $ [        U[>        5      (       a  [A        U5      S:X  a  / $ US:X  a+  U Vs/ s H  nT R                  UR                     PM     nnU$ US;   a  [?        U5      $ US;   a"  U Vs/ s H  nT R7                  U5      PM     sn$ US:X  a  UU 4S jn[?        [C        Xr5      5      $ [E        ST 35      eUS:X  aj  TRF                  R                  T R                  ;   a#  T R                  TRF                  R                     $ T RH                  TRF                  R                     $ US:X  a  T RK                  TRL                  5      $ [E        ST 35      e! , (       d  f       GN= fs  snf s  snf )Nr  r4  r  r  r  r  r  r  r  r   r   r   r  r6  r  r  r   rb  )r  r  r  r  )r  r  r  r  c                    > U R                   S:X  a  g U R                   S:X  a#  TR                  U R                  R                     $ [	        ST 35      e)Nr  r4  Unhandled argument )r   r  rh   r  rZ   )r  r  r)  s    rc    deserialize_optional_tensor_argsSGraphModuleDeserializer.deserialize_input.<locals>.deserialize_optional_tensor_args$	  sJ    vv*#;.#;;AGGLLII,/B3%-HIIrb   r  r:  r  )'rh   r   r  r4  r  r4  r  !_SERIALIZE_TO_TORCH_MEMORY_FORMATr  _SERIALIZE_TO_TORCH_LAYOUTr  rn   r+   r  rS  rx  rB  r  rT  register_moduler\  r   r  r   r   r   r  deserialize_sym_argumentr6  r  r  r  r   r(  rZ   r:  r{   r  r  )r)  r  rh   typ_	submodulerM  resultr  s   ``      rc   rD  )GraphModuleDeserializer.deserialize_input  sF   		xx9 [ //0B0BCC%%,S-?-?@@''4S5I5IJJ[ -cmm<<Ze]3333'')&&u{{3>>t{{DJJW	 * KK''

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

ZZ *  
 [ %cmm44X::Z<<Y;;[ == \!00@@^#001A1ABB]"00AAt$$5zQ	%LQRES$66sxx@ERKKE{"IIFKLes55c:eLL..J C @HII$':3%%@AA_$  %%)E)EE33C4E4E4J4JKK>>#"3"3"8"899]",,S__== #6se!<==s *): S Ms   AN#NN"
Nc                 j   UR                   S:X  a  [        UR                  5      $ UR                   S:X  a  [        UR                  5      $ UR                   S:X  a  [        UR                  5      $ UR                   S:X  a  [        UR                  5      $ UR                   S:X  a  g [        SU S35      e)Nr   r   r  r   r  zUnhandled constant argument z to deserialize)
r   r   r   r   r   r   r  r   r   rZ   )r)  r  s     rc   rg  2GraphModuleDeserializer.deserialize_constant_input9	  s    88xszz?"XX#&&XX$s}}%%XX"$$XX" #?uO!TUUrb   c                 >   [        U[        5      (       aF  UR                  S:X  a  UR                  $ UR                  S:X  a  U R                  UR
                     $ O[        U[        5      (       aF  UR                  S:X  a  UR                  $ UR                  S:X  a  U R                  UR
                     $ OZ[        U[        5      (       aE  UR                  S:X  a  UR                  $ UR                  S:X  a  U R                  UR
                     $ [        SU 35      e)Nr   r  r   r   z Unknown symbolic argument type: )rn   rK   r   r   r  r  rI   r   rE   r   rZ   )r)  sym_args     rc   r  0GraphModuleDeserializer.deserialize_sym_argumentG	  s    g~..||x'~~%*33GOODD +!122||z)'''*33GOODD +11||y(&*33GOODD?yIJJrb   c                 j    U R                  UR                  S   R                  R                  U5        g r  )rC  r  rh   r  )r)  rQ  rb  s      rc   r]  2GraphModuleDeserializer.deserialize_sym_op_outputsY	  s)    /11!4::BBGLrb   c                 j   [        UR                  5      S:X  a  g [        UR                  5      S:X  a  UR                  S   R                  S:X  a  SUR                  ;   a  [	        USS5      (       d{  / nUR                  S   R
                  nU R                  UR                  5      nU R                  X2USU5        [        U5      UR                  S'   X R                  UR                  '   g U R                  UR                  S   R
                  R                  U5        g [        UR                  5      S:X  ak  [        UR                  S   R                  [         ["        [$        45      (       a4  U R                  UR                  S   R                  R&                  U5        g [        UR                  5      S:X  ad  UR                  S   R                  S:X  aG  S UR                  S'   UR)                  U R*                  R-                  UR                  5       S	35        g U R/                  X5        g )
Nr   r    r4  ztorch.ops.higher_orderri  Tr   r  _unused)r   r  r   r  rz  r4  r_  rY  generate_getitemr   r;  r  r  rC  rn   rh   rK   rE   rI   r  _renamerx  _target_to_strdeserialize_multiple_outputs)r)  rQ  rb  r]  rM  deserialized_metadatas         rc   r`  +GraphModuleDeserializer.deserialize_outputs\	  s   &&'1,''(A-''*//;> )O,B,BB1NPTU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
 4
 o55a8>>FFP(()Q.?3J3J13M3R3RV_3_"&GLLOOtzz88HIQR))/Crb   rM  rf  r  c                    [        U[        5      (       a  UR                  nO[[        U[        5      (       a  UR                  nO9[        U[
        5      (       a  UR                  nO[        S[        U5       35      eU R                  R                  S[        R                  X$4US9nU R                  Xg5        UR                  U R                  U   5        UR                  R!                  U5        g )Nz+generate_getitem got unknown argument type rX  r  )rn   rL   r  rK   r  rI   r@  r   rx  r\  rm  rn  rC  rD  r  r;  r  )r)  r]  rb  rM  rf  r  r  individual_outputs           rc   r  (GraphModuleDeserializer.generate_getitem	  s     c>**88D^,,;;D-..;;D =d3i[I  !JJ22N	 3 
 	$244T:; 	%%&;<rb   c                 h   [        U5       GH  u  pV[        U[        [        [        45      (       a  U R                  XXeU5        M;  [        U[        5      (       d   eUR                  S;   a  U R                  XUR                  XT5        M  UR                  S;   a  U R                  R                  S[        R                  X%45      nUR                  / 5        U R                  US   XvR                  U5        UR                  R!                  U5        US   UR                  S'   GM  UR                  S:X  ai  U R                  R                  S[        R                  X%4SS9nUR                  S 5        S UR                  S'   UR                  R!                  U5        GM  [#        SU 35      e   g )	N)r4  r6  r  )rb  r  r  r  r  r  r  r  rX  r  r   r  r  z Unimplemented node output type: )rc  rn   rL   rK   rI   r  r!   r   rh   rx  r\  rm  rn  rD  generate_getitemsr;  r  NotImplementedError)	r)  r]  rb  rJ  r  rf  rM  list_outputr  s	            rc   r  )GraphModuleDeserializer.generate_getitems	  s    "$HC#@PQRR%%hCXYc8,,,,xxFF%%hC_ 	 	 #jj44#$$N
 #&&x|[))Mbc  ''(=>*22,  'Y&$(JJ$:$:#$$N"	 %; %! %04!&&u-!&&--.CD),LSE*RSSM (rb   c                    U R                  UR                  5      n/ n[        UR                  5      S:X  a  [	        UR                  S   R
                  [        5      (       d   e[	        UR                  S   R
                  S   [        5      (       d   eU R                  XBUR                  S   R                  U5        OU R                  XBUR                  U5        [        U5      UR                  S'   X R                  UR                  '   g )Nr    r   r   )r_  rY  r   r  rn   rh   r  rL   r  rb  r   r;  r  r  )r)  rQ  rb  r  r]  s        rc   r  4GraphModuleDeserializer.deserialize_multiple_outputs	  s     !% 9 9/:R:R S !&&'1,o55a8>>EEEEo55a8>>qA>RRRR""8o6M6Ma6P6[6[]rs""8o6M6MOde $HoU5<$$W\\2rb   rY  c                   ^ ^^ 0 nUR                  S5      =n(       a  X2S'   S[        4U 4S jjnUR                  S5      =n(       a3  S mS m[        UU4S jUR                  [        5       5       5      nXbS'   UR                  S5      =n(       aM  / nUR                  [        5       H.  n	U	R                  S	5      u  pUR                  X" U5      45        M0     XS'   UR                  S
5      =n(       a!  [        UR                  [        5      5      US
'   UR                  S5      =n(       a  [        R                  " U5      US'   U$ )Nr  r  c                 Z  > S nU R                  S5      (       a%  [        R                  nU R                  S5      SS  nOBU R                  S5      (       a  [        nU R                  S5      SS  nOTR	                  U 5      $ UnU H"  n[        X45      (       d  U s  $ [        X45      nM$     U$ )Nztorch.nnrQ  r   ro   r    )rR  ro   r   r  r  rw  rz  )r  rT  r   r  r  r)  s        rc   deserialize_meta_funcKGraphModuleDeserializer.deserialize_metadata.<locals>.deserialize_meta_func	  s    F ++J77*;*A*A#*Fqr*J'"--g66*;*A*A#*Fqr*J'001BCCF/v,,,,$V2F	 0
 Mrb   r  c                     XU44$ rf   r\   )keyr  r  s      rc   import_nn_module_stackLGraphModuleDeserializer.deserialize_metadata.<locals>.import_nn_module_stack
  s    2J&rb   c                 
   / nSu  p#Su  pE[        U 5       HE  u  pgXt;   a  US-  nM  Xu;   a  US-  nM  US:X  d  M%  US:X  d  M-  UR                  XU 5        US-   nMG     UR                  XS  5        [        U5      S:X  d   eU$ )N)r   r   )z[(z)]r    r  r      )rc  rD  r   )rY  outstartr  r  r  endr  s           rc   metadata_splitDGraphModuleDeserializer.deserialize_metadata.<locals>.metadata_split
  s    !'1FCvQQca1f

8C#89 #a 2 

8F+,3x1}$}
rb   c              3   :   >#    U  H  nT" T" U5      6 v   M     g 7frf   r\   )rr   rZ  r  r  s     rc   rt   ?GraphModuleDeserializer.deserialize_metadata.<locals>.<genexpr>
  s"      #CD 't(<=Cs   r  r  r  r  )	r\  r   r   r  r  rD  r   r   r   )r)  rY  r  r  r  nn_module_stack_strr  source_fn_st_strr  source_fn_strr  
target_strtorch_fn_str
custom_strr  r  s   `             @@rc   r_  ,GraphModuleDeserializer.deserialize_metadata	  sA    ",,}55;5!,	S 	& #+,,/@"AAA'  # #/55lC# O &5!"'||,=>>>L!1!7!7!E#0#6#6s#; ##T+@+L$MN "F &2!"#<<
33<3#L$6$6|$DEC
O!h//:/ JJz2CM
rb   rx  c                 V   [         R                  SU5        UR                  S:X  a(  [        R                  " UR
                  R                  S9$ UR                  S:X  a(  [        R                  " UR                  R                  S9$ UR                  S:X  a(  [        R                  " UR                  R                  S9$ UR                  S:X  a8  [        R                  " UR                  R                  U R                  U5      S9$ [        R                  " SU R                  U5      S9$ )	Nz[deserialize_argument_spec] %sr4  r  r6  r  r:  rE  r  )r   r<  r   rB  rL   r4  r  rK   r6  r  rI   r  rV  r:  rD  r{  s     rc   rf  1GraphModuleDeserializer.deserialize_argument_spec,
  s    		2A666[ $$!++*:*:;;VV|#$$!,,*>*>??VV~%&&ANN,B,BCCVV&&&AOO,@,@H^H^_`Habb&&Bd6L6LQ6OPPrb   r  c           	      d   [         R                  " UR                   Vs/ s H  o R                  U5      PM     snUR                   Vs/ s H  o R                  U5      PM     sn[        UR                  5      [        UR                  5      UR                  =n(       a  US9$ S S9$ s  snf s  snf )Nr  )	rB  r9   r  rf  r  r   r  r  r  r  s       rc   !deserialize_module_call_signature9GraphModuleDeserializer.deserialize_module_call_signature9
  s     %%;P;W;W;Wa..q1;W <Q;X;X;Xa..q1;X ##8#@#@A#$9$B$BC1F1X1X(X(Xe

 
	
 `d

 
	
s   B(	B-
r#  c           	          [         R                  S5        U Vs/ s HN  n[        R                  " UR                  UR
                  (       a  U R                  UR
                  5      OS S9PMP     sn$ s  snf )Nz 
[deserialize_module_call_graph]r  )r   r<  rB  r8   r  r  r  r  s      rc   r  5GraphModuleDeserializer.deserialize_module_call_graphH
  sn     			56 +

 + II  ::5??K +

 
	
 

s   AA2)r{   r|   r2  rx  rT  r  r  r  r  r  r  r  r  )r   Nrf   )NN)Ur]   r^   r_   r`   dataclassesr   r  r*  r   r   r  r   r  r  r   r   r   r   r   r   r  r
  rJ   ro   r"  rH   r&  rD   r*  rM   r   r   r%   rB  r7  rK  r<   r:  r*   rS  r   rE  r.   rh  r>   rl  r-   r  ro  r,   r   r=  r}   r
   r   r   r   r  rC  r[  ra  r  r:   r^  r!   rD  r$   rg  r  r]  r`  rL   rK   rI   r  r  r  r_  r  rf  r9   r  r8   r  ra   r\   rb   rc   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  	!
rb   c                   x   \ rS rSrSS\\\\4      4S jjrS\\\	R                  4   S\\\R                  4   S\\R                  \
4   4S jr SS	S
.S\S\\\\R"                  4   \4   S\\\\R"                  4   \4   S\\\\\R"                  S4   \\\4   4   \4      S\R                  4
S jjjrSrg)rX   iY
  Nexpected_opset_versionc                     0 U l         U(       a  U R                   R                  U5        SU R                   ;  a,  [        R                  R	                  5       U R                   S'   g g r  )r  r  ro   r+  r  )r)  r  s     rc   r*  $ExportedProgramDeserializer.__init__[
  sR    68#!''../EF44427((2T2T2VD''/ 5rb   r  r  r   c                     [         R                  S5        0 nUR                  5        HO  u  pEUR                  U5      =n(       a  [         R                  SXE5        XSU'   M9  [         R	                  SU5        MQ     U$ )Nz 
[deserialize_range_constraints]z([deserialize_range_constraints] %s -> %sz;Symbol %s did not appear in the graph that was deserialized)r   r<  rg   r\  r   )r)  r  r  r   ri   rj   symbols          rc   deserialize_range_constraints9ExportedProgramDeserializer.deserialize_range_constraintsb
  sq    
 			56(..0DA.22155v5		DaK,-&)Y[\] 1 ! rb   F_unsafe_skip_version_checkry   rz   r{   r|   .c                   [        U[        5      (       d   eUR                  nUR                  [        S   :w  aG  UR                  S:X  a  UR
                  S:X  d'  U(       d   [        SUR                   S[         S35      eUR                  R                  5        VVs0 s HN  u  pxU[        R                  " [        UR                  [        * 5      [        UR                  [        5      5      _MP     n	nn[        5       R!                  UR"                  UUUU	5      n
U R%                  U	U
R&                  5      n[(        R                  " U
R"                  U
R"                  R*                  U
R,                  U
R.                  UU
R0                  U
R2                  U
R4                  UR6                   Vs/ s H  n[9        U5      PM     snS9	n[:        R=                  SU5        U$ s  snnf s  snf )Nr   zSerialized schema version z+ does not match our current schema version rQ  )	rootrx  r"  rz   r   r#  r|   r{   r  z
[deserialize]: %s)rn   r'   r  r  rB   r  rZ   r   rg   r   r   r   min_valr   max_valrW   r  r  r  r  rB  rx  r  rz   r#  r|   r{   r  r   r   r<  )r)  ry   rz   r{   r|   r  versionri   rj   r  resr   r  s                rc   r  'ExportedProgramDeserializer.deserializeq
  s    *O<<<<"11 ==N1--w}}7Igmm_`N`-$01A1P1P0Q RAAO@PPQS  )::@@B	 
 C **!!))fW57HTZ7[  C	 	  
 $%[ --$ 	 !>>   

 ##!!""((MM~~/!33--mm1A1K1KL1KA}Q'1KL

 			'0C 
< Ms   AG"0G()r  rf   )r]   r^   r_   r`   r   r   r   r   r*  r   r   r   r   r  r'   r   ro   r=  r}   r   r
   rB  r  ra   r\   rb   rc   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 5rb   rX   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r   i
  c                    > [        U[        5      (       a  UR                  $ [        U[        5      (       a%  [        R
                  " U5      R                  S5      $ [        TU ]!  U5      $ )Nr   )	rn   r   rh   r}   base64	b64encoder   superr   )r)  r  	__class__s     rc   r   EnumEncoder.default
  sR    c4  99c5!!##C(//88ws##rb   r\   )r]   r^   r_   r`   r   ra   __classcell__)r  s   @rc   r   r   
  s    $ $rb   r   c           
      J   [        U [        5      (       a!  U R                  [        U R                  5      0$ [
        R                  " U 5      (       aN  [
        R                  " U 5       Vs0 s H,  nUR                  [        [        XR                  5      5      _M.     sn$ [        U [        5      (       a  U  Vs/ s H  n[        U5      PM     sn$ [        U [        5      (       a  [        S U  5       5      $ [        U [        5      (       a/  U R                  5        VVs0 s H  u  p4U[        U5      _M     snn$ [        U [        5      (       aB  U [        R                   :X  a  gU [        R                   * :X  a  gU [        R"                  :X  a  gU $ U $ s  snf s  snf s  snnf )Nc              3   8   #    U  H  n[        U5      v   M     g 7frf   )r   )rr   rx  s     rc   rt   %_dataclass_to_dict.<locals>.<genexpr>
  s     8Cq'**Cs   Infinityz	-InfinityNaN)rn   rS   r   r   rh   r  is_dataclassr  r  rz  r  r   r   rg   r   r   r   nan)r  frx  ri   rj   s        rc   r   r   
  sO   #v,SYY788		!	!#	&	& !'',
, FF&wsFF';<<,
 	
 
C		/23s!"1%s33	C		8C888	C		58YY[A[TQ%a(([AA	C		$((?TXXIDHH_J
)

 4 Bs   *3F9F Fr  c                 f    [         R                  " [        U 5      [        SS9R	                  S5      $ )NF)r   	allow_nanr   )r   r   r   r   r   )r  s    rc   _to_json_bytesr  
  s'    ::(-;%PWWX_``rb   ry   r  c                 \   [        U R                  5         [        X5      R                  U 5      nS S S 5        [	        WR
                  [        5      (       d   e[        UR
                  5      n[        UUR                  UR                  UR                  5      nU$ ! , (       d  f       Nr= frf   )r   r|   rV   rT   rn   ry   r'   r  rw   rz   r{   )ry   r  r   serialized_program
json_bytesr   s         rc   rT   rT   
  s    
 
00@0O0O	P6}V``
 
Q (99?KKKK 2 C CDJ!%%$$))	H O 
Q	Ps   B
B+c           	      (   [        U [        5      (       a   SU  S35       e[        R                  " U 5      [        :X  a  [        U R                  U5      $ [        R                  " U 5      [        R                  :X  a]  [        S 5      [        R                  " U 5      ;   a:  Uc  g [        R                  " U 5      n[        U5      S:X  d   e[        US   U5      $ [        U [        5      (       a  [        U [        5      (       a  [        U[        5      (       d   e[        U5      S:X  d   e[        [        UR!                  5       5      5      n[        [        UR#                  5       5      5      n[        U[        5      (       d   eU R$                  U   nU R&                  " S0 U[        XT5      0D6$ [(        R*                  " U 5      (       al  U " S0 UD6n[        R,                  " U 5      n[(        R.                  " U 5       H2  nUR0                  n	[        Xy   [3        Xi5      5      n
[5        XiU
5        M4     U$ [        U[6        5      (       aF  [        U5      S:X  a  U$ [        R                  " U 5      S   nU Vs/ s H  n[        X5      PM     sn$ [        U[        5      (       aH  [        R                  " U 5      S   nUR9                  5        VVs0 s H  u  pU[        X5      _M     snn$ U [:        :X  a  [;        U5      $ U$ s  snf s  snnf )NzUnresolved class type: 'z'.r   r   r    r\   )rn   r   typing
get_originr	   r   
__origin__r   r   get_argsr   
issubclassrS   r   r  iterr  r4  r~   r   r  r  get_type_hintsr  r  rz  setattrr  rg   r   )r   dataty_argsr  _value
field_typer  
type_hintsr  r  new_field_objd_typerd   v_typeri   rj   s                   rc   r   r   
  sv   #s##G'?uB%GG#*!#..$77-$t*PS@T2T<//#&7|q   !'!*d33	C		:c6#:#:$%%%%4yA~~T$))+&'d4;;=)*%%%%%((/
zzLU$6z$JKLL		!	!#	&	&kDk**3/
##C(A66D.z/?ASTMC}- ) 
	D$		t9>K%a(7;<t!"6-t<<	D$		%a(=AZZ\J\TQ%f00\JJ	T{K = Ks   =L	LFr  r  c                :   [        U R                  [        5      (       d   eU R                  R                  S5      n[        R
                  " U5      n[        [        U5      n[        U5      R                  UU R                  U R                  U R                  US9$ )Nr   r  )rn   ry   r}   r   r   r   r   r'   rX   r  rz   r{   r|   )r   r  r  exported_program_strexported_program_dictserialized_exported_programs         rc   r  r    s     h//7777#44;;GD JJ';<"4_F["\#$:;	'##'A 
 

	rb   c                 6  ^ ^^^^^ S[         4S jmU4S jmUUU 4S jnU" TR                  5      n[        U5      [        TR                  5      :X  d   e0 mUU4S jnU4S jnT  H  nT" Xh5        M     U H  n	U	R                   H  n
T" Xj5        M     M      U H(  n	U	R                   H  nT" XxR
                  5        M     M*     U H  n
T" Xz5        M     U H  n	U	R                  R                  5         M     [        [        TR                  R                  5       [        R                  " S5      S95      n[        [        TR                  R                  5       [        R                  " S5      S95      n[        [        TR                  R                  5       [        R                  " S5      S95      n[        [        TR                   R                  5       [        R                  " S5      S95      n[        [        TR"                  R                  5       [        R                  " S5      S95      nSnU H  nUR                   H  nUR
                  nUR$                  S	:X  d  M!  ['        UR(                  R*                  R                  UR(                  R*                  R                  UR(                  R*                  T5      u  UR(                  l        nS
U 3UR(                  l        US-  nM     M     [/        T UUUUUUTR0                  US9	mTT4$ )Nr  c                 L   U R                   S:X  a  g U R                   S:X  a  U R                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S	:X  a  g U R                   S
:X  a  U R                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  U R
                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  g U R                   S:X  a  U R                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  g U R                   S:X  a  U R                  $ U R                   S:X  a  U R                  $ U R                   S:X  a  g [        SU  35      e)Nr  r4  rb  r   r  r   r  r  r  r6  r  r  r  r  r  r  r  r   r  r  r  r  r  r:  r  z+Unknown input type to the ExportedProgram: )r   r4  rb  r6  r  r  r  r  r  r  r:  r@  r  s    rc   _get_argument*_canonicalize_graph.<locals>._get_argument&  s   66YVV{";;VV|#<<VVxVVy VVz!VV{"VV{"VV|#VV|#<<VV}$== VV~%>>!VV&??"VV''VV))VV{"VV{"VVy VVz!VV}$== VV~%>>!VVz!VV,,(((VV&??"VV}$ #Nqc!RSSrb   c                 n   > [        U[        5      (       d   e[        R                  " U T" U5      5        g rf   )rn   r!   r  tree_map)r  r  r:  s     rc   for_args%_canonicalize_graph.<locals>.for_args]  s)    !X&&&&=+,rb   c                 p  >^ ^^^^^^^^ [          " S S5      5       n[        5       m0 m0 m/ m0 m/ nS[        [           4S jmT H  nUU4S jnT" XC5        M     [	        T 5       H5  u  mnUUU4S jnUR
                   H  nT" Xg5        M     U" / S5      TT'   M7     [	        T 5       H6  u  mnUUUUUU4S jn	UR                   H  nT" XR                  5        M     M8     UU4S	 jn
UUU4S
 jmT H  nT" X5        M     S[        4UUUU 4S jjnTR                  5        H   u  mnUR                  S:X  d  M  U" T5        M"     [        T5      S:  a  [        R                  " T5      u    nmT T   nUR
                   H  nT" X5        M     UR                  U5        TT;   d   eTT   R                   HI  nTU   nUR                  S:  d   eU=R                  S-  sl
        UR                  S:X  d  MA  U" U5        MK     TT   R                  R!                  5         [        T5      S:  a  M  U$ )Nc                   0    \ rS rSr% \\   \S'   \\S'   Srg)6_canonicalize_graph.<locals>.sort_nodes.<locals>.Edgesib  outsinsr\   N)r]   r^   r_   r`   r  r   r~   ra   r\   rb   rc   EdgesrB  b  s    s)OHrb   rE  r   c                    U c  g [        U [        5      (       a  U R                  $ [        U [        [        [
        45      (       a;  U R                  S:X  a  U R                  $ U R                  S;   a  g [        SU  35      e[        U [        5      (       aE  U R                  S:X  a  U R                  R                  $ U R                  S:X  a  g [        SU  35      e[        U [        5      (       a  U R                  $ [        SU  35      e)Nr  )r   r   r   Unknown argument type: r4  r  zUnknown optional tensor type: )rn   rL   r  rK   rE   rI   r   r  r@  r=   r4  r%   r  s    rc   r  9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_namen  s    y!^,,vvAAQRSS66Y&99$VV@@(+B1#)FGGA56666[(;;+++VVy((+I!)MNNA011vv$'>qc%BCCrb   c                 H   > T" U 5      =n(       a  TR                  U5        g g rf   )r  )r  r   r  graph_inputss     rc   	add_input:_canonicalize_graph.<locals>.sort_nodes.<locals>.add_input  s%     #1# $$Q' $rb   c                 @   > T" U 5      =n(       a  UT;  d   eTTU'   g g rf   r\   )r  r   	def_tabler  rf  s     rc   add_def8_canonicalize_graph.<locals>.sort_nodes.<locals>.add_def  s.     #1#I---#&IaL $rb   r   c                    > T" U 5      =n(       aR  UT;   a  g UT;  a	  UT;   d   eg TU   nTU   R                   R                  T5        TT   =R                  S-  sl        g g )Nr    )rC  rD  rD  )	r  r   srcr{   rN  edgesr  rJ  rf  s	      rc   add_edge9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_edge  sk     #1#I~	) L000#A,C#JOO**3/#JNNa'N $rb   c                 R   > T" U 5      =n(       a  UT;  d   e[        T5      TU'   g g rf   )r   )r  r   r  ranks     rc   add_rank9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_rank  s0    QKq}$}d)Q  rb   c                 :   > T" U 5      nU(       a  UT;  a  TU   $ g)Nr  r\   )r  r   r{   r  rW  s     rc   get_rank9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_rank  s"    AQi'Awrb   rf  c                    > UU4S jnTU    nUR                    Vs/ s H   o3R                  U" UR                  5      4PM"     nn[        R                  " TUR
                  X@45        g s  snf )Nc                 *   >^ / mT" UU4S jU 5        T$ )Nc                 2   > TR                  T" U 5      5      $ rf   )rD  )rx  r[  rankss    rc   <lambda>c_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks.<locals>.<lambda>  s    5<<#<rb   r\   )r  r`  r>  r[  s    @rc   	get_ranksQ_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks  s    <a@rb   )r  r  rM  heapqheappushr  )	rf  rc  r   r  	args_rank
candidatesr>  r[  r  s	        rc   add_candidate>_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate  sX    
 :D=A[[I[&&)AEE"23[IINN:Y'DE Js   'A)r    )r   r  r   r   rc  r  r  rM  r   rg   rD  r   re  heappoprD  rC  clear)r  rE  r  r  rK  r   rO  rj  r  rT  rX  ri  r  r  rh  rN  rS  r  r[  rJ  rf  rW  r{   r>  sorted_inputss   `             @@@@@@@@rc   
sort_nodes'_canonicalize_graph.<locals>.sort_nodesa  s   		 	 
	 "%$&	"$IK
!	D8C= 	D0 A( Y"  #5)IC'
 \\$ " r1E#J * #5)IC	( 	( [[55) ! * 	$
	 AX! 	Fs 	F 	F kkmFCuuzc" $ *o!j1IAq#:D\\% "JJt%<<c
$Kuuqy y
55A:!$' ( #JOO!!# *o! 
rb   c                   > U4S jnU c  g [        U [        5      (       a#  U" U R                  TR                  5      U l        g [        U [        5      (       a4  U R
                  S:X  a#  U" U R                  TR                  5      U l        g g [        U [        5      (       a4  U R
                  S:X  a#  U" U R                  TR                  5      U l        g g [        U [        5      (       a4  U R
                  S:X  a#  U" U R                  TR                  5      U l        g g [        U [        5      (       a#  U" U R                  TR                  5      U l        g [        SU  35      e)Nc                 r   > S[        T5       3nU T;  d   eUTU '   X;   d   eUR                  U 5      X'   U$ )Nr  )r   pop)r1  r4  new_name
name_tables      rc   r  8_canonicalize_graph.<locals>.rename_def.<locals>._rename  sN    3z?+,H:---#+Jx %%%%zz(3FOrb   r  rG  )rn   rL   r  r  rK   r   r  r  rI   r  rE   r  r%   r  r@  )r  r  rx  rt  s     rc   
rename_def'_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#!>??rb   c                 `  > U c  g [        U [        5      (       a,  TR                  U R                  U R                  5      U l        g [        U [        [
        45      (       a=  U R                  S:X  a,  TR                  U R                  U R                  5      U l        g g [        U [        5      (       a=  U R                  S:X  a,  TR                  U R                  U R                  5      U l        g g [        U [        5      (       a[  U R                  S:X  aJ  TR                  U R                  R                  U R                  R                  5      U R                  l        g g [        U [        5      (       a,  TR                  U R                  U R                  5      U l        g [        SU  35      e)Nr  r4  rG  )rn   rL   r\  r  rK   rI   r   r  rE   r=   r4  r%   r@  )r  rt  s    rc   replace_use(_canonicalize_graph.<locals>.replace_use  s-   9a((^^AFFAFF3AFN,<=>>vv"&NN199aii@	 #?++vv"&NN199aii@	 #122vv$#->>!++2B2BAKKDTDT#U  %,--^^AFFAFF3AF #:1#!>??rb   r   r  r  _gr    )	r  r  r  r  r  r  r  r  r  )r!   r  r   r  r  rM  rY  rl  r   sortedr  rg   rm  
itemgetterr  r  r  r  r   _canonicalize_graphr  rx  r  r*   r  )rm  sorted_outputsrx  r{   rn  sorted_nodesrv  ry  r  r  rj  sorted_tensor_valuessorted_sym_int_valuessorted_sym_float_valuessorted_sym_bool_valuessorted_custom_obj_valuescounterr   r  r  r:  r>  rt  s   ` ``                @@@rc   r  r  #  s   4T 4Tn-un ekk*L|EKK 0000 "$J@6@&   AZ#   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 *rb   rB  r{   c                 |  ^^ [         R                  " U 5      n U=(       d
    [        5       n[        [	        U R
                  R                  5       [        R                  " S5      S95      n[        [	        U R                  R                  5       [        R                  " S5      S95      n[	        U R                  R                  S S9nU R                  R                  nU R                  R                  n[        UR                  5      [        UR                   5      :X  d   e[        UR"                  5      [        UR$                  5      :X  d   eS[&        [(        [*        [,           [(        4   4S jnS[&        [(        [*        [,           [(        4   4S jn[	        [/        [1        UR                  UR                   5      5      US9n	[        U	5      S:  a  [1        S U	 5       6 u  pOSn
Sn[	        [/        [1        UR"                  UR$                  5      5      US9n[1        S	 U 5       6 u  p[3        XXa5      u  nmU4S
 jnUU4S jnU H  mU" T5        M     U H  mU" T5        M     [5        [7        U[9        [;        U5      [;        U5      S9US9UUU R<                  U R>                  U R@                  S9$ )a3  
Normalize a serialized ExportedProgram, so that different eager program which
shares the same semantics can get a single representation on disk.

This function canonicalizes an ExportedProgram by:

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

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

Returns:
    ExportedProgram: The canonicalized exported program.
r   r{  c                     U R                   $ rf   )r  )rx  s    rc   ra  canonicalize.<locals>.<lambda>`  s    PQPUPUrb   r   c                 H   U u  nu  p#[        U[        5      (       d   eUR                  S:X  a  SS U4$ UR                  S:X  a  SUR                  R                  U4$ UR                  S:X  a  SUR
                  R                  U4$ UR                  S:X  a  SUR                  R                  U4$ UR                  S	:X  a  S
UR                  R                  U4$ UR                  S:X  a  SS U4$ UR                  S:X  a  SUR                  R                  U4$ [        SU 35      e)NrH     rK  r    r   r   rO  r  rP     rR  r   rF     Unknown input type: )rn   r.   r   rK  rJ  r   rL  rO  rN  rP  r5  rF  r  r@  )r  rf  _argrC  s       rc   
rank_input canonicalize.<locals>.rank_inputg  s   \d$	****99$dC<YY+%dnn33S88YY("dkk--s22YY++d**??DDYY,&doo55s::YY'!dC<YY**d))..33 #7v!>??rb   c                    U u  nu  p#[        U[        5      (       d   eUR                  S:X  a  SS U4$ UR                  S:X  a  SS U4$ UR                  S:X  a  SUR                  R                  U4$ UR                  S:X  a  SUR
                  R                  U4$ UR                  S:X  a  S	S U4$ UR                  S
:X  a  SS U4$ UR                  S:X  a  SS U4$ [        SU 35      e)Nra  r  rb  rc  r    rd  r  rf  r  rg  r   rR  r   Unknown output type: )rn   r>   r   rc  rL  rd  rJ  r@  )r  rf  r  rC  s       rc   rank_output!canonicalize.<locals>.rank_output{  s    \d$
++++99%dC<YY-'dC<YY++d**66;;YY11d00??DDYY22dC<YY//dC<YY'!dC< #8!?@@rb   c              3   *   #    U  H	  u  pUv   M     g 7frf   r\   rr   rf  r  s      rc   rt   canonicalize.<locals>.<genexpr>  s     *F:1:   r\   c              3   *   #    U  H	  u  pUv   M     g 7frf   r\   r  s      rc   rt   r    s     (Evsr  c                 ,  > [        U [        5      (       d   eU R                  S:X  Ga&  U R                  R                  nUR                  S:X  a!  UR
                  nTUR                     Ul        g UR                  S:X  aP  UR                  nUR                  S:X  a  TUR                     Ul        g UR                  S:X  a  g [        SU 35      eUR                  S:X  aP  UR                  nUR                  S:X  a  TUR                     Ul        g UR                  S:X  a  g [        S	U 35      eUR                  S
;   a  g [        SU 35      eU R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a+  U R                  R                  nTUR                     Ul        g U R                  S:X  a  g [        SU  35      e)NrH  r4  r6  r  r   Unknown sym_int type: r  r   Unknown sym_float type: )r  r   r   r   r  r:  r  rK  r   rO  rP  rR  rF  )rn   r.   r   rH  rM  r4  r  r6  r  r@  r  rK  r   rO  rP  rR  )rC  rM  r   r   r  t_custom_objtokreplace_tables          rc   replace_input#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!>??rb   c                   > [        T	[        5      (       d   eT	R                  S:X  Ga&  T	R                  R                  nUR                  S:X  a!  UR
                  nTUR                     Ul        g UR                  S:X  aP  UR                  nUR                  S:X  a  TUR                     Ul        g UR                  S:X  a  g [        SU 35      eUR                  S:X  aP  UR                  nUR                  S:X  a  TUR                     Ul        g UR                  S:X  a  g [        S	U 35      eUR                  S
;   a  g [        SU 35      eT	R                  S:X  a+  T	R                  R                  nTUR                     Ul        g T	R                  S:X  a+  T	R                  R                  nTUR                     Ul        g T	R                  S:X  a+  T	R                  R                  nTUR                     Ul        g T	R                  S:X  aI  T	R                  nTUR                  R                     UR                  l        TUR                     Ul        g T	R                  S:X  aI  T	R                   nTUR                  R                     UR                  l        TUR                     Ul        g T	R                  S:X  a+  T	R"                  R                  nTUR                     Ul        g [        ST	 35      e)Nra  r4  r6  r  r   r  r  r   r  )r  r   r   r   r  r  rb  rc  rd  rf  rg  rR  r  )rn   r>   r   ra  rM  r4  r  r6  r  r@  r  rb  rc  rd  rf  re  rg  rR  )
r  rM  r   r   r  gur  r  rC  s
           rc   replace_output$canonicalize.<locals>.replace_output  sn   $
++++99%""&&Cxx;&MM&qvv.\)NN66Y& -aii 8AIVVx'(+A!)EFF^+$$66Y& -aii 8AIVVz)(+CA3)GHHVV$';C5%ABBYY-'  $$A"166*AFYY++$$((A"166*AFYY11**..A"166*AFYY22++A&quuzz2AEEJ -a.?.? @AYY//((A&quuzz2AEEJ -a.?.? @AYY'!**..C$SXX.CH #8!?@@rb   rs  )rx  r  r#  r  )!copydeepcopyr  r   r}  r  rg   rm  r~  r   r  r#  r  rx  r   r  rt  r  ru  r   r   r   r   rc  r  r  r'   r,   r-   r  r  r  r  )rB  r{   r  r   r#  r  rx  r  r  
sorted_insrm  rt  sorted_outsr  ru  sorted_graphr  r  r  rC  s                     @@rc   r  r  G  s]   ( 
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 N"5u#L-5@n0Ad d  t   $ -!,/ 0
 $+((,,&& rb   c                       \ rS rSrSr\S\4S j5       r\S\4S j5       r\S\4S j5       r	\S\
R                  4S j5       rS	rg
)ExtensionHandleri"  z.
Base class for handling extension operators.
r   c                 2    [        U R                   S35      e)Nz  namespace() must be implementedr  r  r   s    rc   r~  ExtensionHandler.namespace&      !S]]O3S"TUUrb   c                 2    [        U R                   S35      eNz op_name() must be implementedr  r   rs   s     rc   r  ExtensionHandler.to_op_name*      !S]]O3Q"RSSrb   r  c                 2    [        U R                   S35      er  r  )r   r  s     rc   r  ExtensionHandler.from_op_name.  r  rb   c                 2    [        U R                   S35      e)Nz  op_schema() must be implementedr  r  s     rc   r  ExtensionHandler.op_schema2  r  rb   r\   N)r]   r^   r_   r`   __doc__classmethodr   r~  r  r  ro   FunctionSchemar  ra   r\   rb   rc   r  r  "  s     V# V V Ts T T T T T Ve22 V Vrb   r  op_typeextension_handlerc                    [        U[        5      (       d   SU S35       eU [        ;  d
   U  S35       e[        U [        5      (       d   eU R
                  R                  S5      (       d   U R
                  R                  S5      (       a   eUR                  5       [        ;  d   eU[        U '   U[        UR                  5       '   g)zJRegister custom de/serialization method for a node with non-standard type.zExpected ExtensionHandler, got rQ  z is already registered.ro   builtinsN)	r(  r  r  rn   r   r^   rR  r~  r  )r  r  s     rc   register_extensionr  7  s    
 ')9::r>]^o]ppq<rr:11VgY>U3VV1gt$$$$""--g66':L:L:W:WXb:c:cdd&&(0IIII'8G$?P/99;<rb   c                  <    [        [        R                  5       5      $ rf   )r   r  r  r\   rb   rc   r  r  E  s    $$& rb   r  r  rf   (  r  r  r   r  re  r  r   r   r  loggingr   rm  r  r$  collectionsr   r   
contextlibr   r   r   enumr   r	   r
   r   r   r   r   r   collections.abcr   r   ro   torch.export.exported_programexportry   rB  torch._export.verifierr   torch._export.non_strict_utilsr   "torch._library.fake_class_registryr   torch._subclasses.fake_tensorr   r   torch.fx.experimentalr   torch.utilsr   r  torch.utils._pytreer   r   torch.utils._sympy.numbersr   torch.utils._sympy.symbolr   r   torch.utils._sympy.value_rangesr   r  r   r  r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   unionrS   __all__	getLoggerr]   r   r   rZ   r   rk   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   r4  
sparse_coo	SparseCoo
sparse_csr	SparseCsr
sparse_csc	SparseCsc
sparse_bsr	SparseBsr
sparse_bsc	SparseBsc_mkldnnstridedStridedr   r  contiguous_formatContiguousFormatchannels_lastChannelsLastchannels_last_3dChannelsLast3dpreserve_formatPreserveFormatr*  r  eqnelegeltgtnegpostruncsym_notmulr  subfloordivmodpowsym_int	sym_floatsym_itesym_maxsym_minsym_sqrttruedivand_ro  anyrw   r   r   r   r  r   r   r   r   r=  r   r   r~   r   r}   r   r   r   r   r   r   r   r   r   r  r  r
  r   r  rU   rV   rW   rX   JSONEncoderr   r   r  rT   r   r  r  r  r  r  r  r  r  r  r\   rb   rc   <module>r(     sn         	        / % (    %   * * 0 Q ? D 1 ) > - 6 7 03 3 3 3 3 3 3 3 3 3 3 3 3h  !	\ 	.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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*:%; ;< Arb   