
    Ph;!                    
   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dlm
Z
mZ d dlmZ d dlmZmZmZmZmZmZmZmZ d dlZd dlZd dlmc mZ d dlmZ d dlmZm Z  d dl!m"Z" d d	l#m$Z$m%Z% d d
l&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZO g dZPd dlmQZRmJZSmKZT ddlUmVZV  ej                  eX      ZY G d deZ      Z[deeef   fdZ\eee]ej                  e^ej                  f   Z_dZ`ej                  eCj                  ej                  eCj                  ej                  eCj                  ej                  eCj                  ej                  eCj                  ej                  eCj                  ej                  eCj                  ej                  eCj                  ej                  eCj                  ej                  eCj                  ej                  eCj                  ej                  eCj                  ej                  eCj                  iZz e\ez      Z{ej                  e9j                  ej                  e9j                  ej                   e9j                  ej                  e9j                  ej                  e9j
                  ej                  e9j                  ej                  e9j                  iZ e\e      Zej                  e;j                  ej                  e;j                  ej                  e;j                   ej"                  e;j$                  iZ e\e      Zej*                  ej,                  ej.                  ej0                  ej2                  hZej6                  ej8                  ej:                  ej<                  ej>                  ej@                  hZe
 G d d             Zde-dejF                  fdZdee]ej                  f   deIfdZdee^ej                  f   deEfdZdejN                  deLfdZdefdZdefd Zd!ejX                  fd"ZdejX                  fd#Zd$eej^                  e'f   deeeBf   fd%Zd&ejd                  jf                  de^fd'Zd&ejd                  jf                  de^fd(Ze
 G d) d*             Z G d+ d,      Z G d- d.      Z G d/ d0      Z G d1 d2      Z G d3 d4ejv                        Z	 d<d5ej\                  d6eeee]f      defd7Zd8 Z	 d<d9ed:eeee]f      dej\                  fd;Zy)=    N)contextmanager)	dataclassfield)Enum)AnyCallablecastDictIteratorListOptionalUnion)load_verifier)
FakeTensorFakeTensorMode)symbolic_shapes)treespec_dumpstreespec_loads)ValueRanges   )'_UnionArgumentBufferMutationSpecCustomObjArgumentDeviceExportedProgramGradientToParameterSpecGradientToUserInputSpecGraphGraphArgumentGraphModuleGraphSignature	InputSpecInputToBufferSpecInputToParameterSpecInputToTensorConstantSpecLayoutLossOutputSpecMemoryFormatModuleCallEntryModuleCallSignatureNamedArgumentNodeOptionalTensorArgument
OutputSpecRangeConstraint
ScalarTypeSCHEMA_VERSIONSymBoolSymBoolArgumentSymExprSymExprHintSymIntSymIntArgumentTensorArgument
TensorMetaTREESPEC_VERSIONUserInputSpecUserOutputSpec)	serializeGraphModuleSerializerExportedProgramSerializerGraphModuleDeserializerExportedProgramDeserializer)ConstantArgumentr8   r9   )GraphModuleOpUpgraderc                       e Zd Zy)SerializeErrorN)__name__
__module____qualname__     hC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_export/serde/serialize.pyrF   rF   W   s    rK   rF   dc                 j    | j                         D ci c]  \  }}|j                  | c}}S c c}}w N)itemsvalue)rM   kvs      rL   _reverse_maprT   [   s,    #$779-941aAGGQJ9---s   /;c                   6    e Zd ZU eeef   ed<   eed<   eed<   y)SerializedArtifactexported_program
state_dict	constantsN)rG   rH   rI   r   r   bytes__annotations__rJ   rK   rL   rW   rW      s    OU233rK   rW   returnc                     | j                    t        j                  | j                        S t        j                  | j                  | j                         S )N)typer_   index)ra   torchdevicer_   )rM   s    rL   deserialize_devicerd      s7    ww||((<<QVV17733rK   sc                 8   t        | t        j                  t        f      rt	        j
                  |       rt        j                  t        |             S t        | t        j                        sJ | j                  j                  (t        j                  t        t        |                   S t        j                  t        t        |       t        j                  | j                  j                                    S t        d|  dt        |        d      )Nas_intas_exprhintz,SymInt should be either symbol or int, got `` of type ``)
isinstancerb   r7   intr   is_concrete_intcreatenoderl   r5   strr6   rF   r_   re   s    rL   serialize_sym_intrv      s    !ellC()**1-==A//a...vv{{"}}WSV_==}}WSV+BTBT\]\b\b\g\gBh-ijj:1#[a	QRS
 	
rK   c                 2   t        | t        j                  t        f      r]t	        j
                  |       rt        j                  t        |             S t        j                  t        t        |                   S t        d|  dt        |        d      )Nas_bool)expr_strri   z.SymBool should be either symbol or bool, got `rm   rn   )ro   rb   r3   boolr   is_concrete_boolrr   r5   rt   rF   r_   ru   s    rL   serialize_sym_boolr}      ss    !emmT*+++A.>>$q'22>>'3q6*BCC<QC{4PQ7)STU
 	
rK   tc                    t        t        | j                     | j                  D cg c]  }t	        |       c}| j
                  t        | j                  j                  | j                  j                        | j                         D cg c]  }t	        |       c}dt        | j                           S c c}w c c}w )z.
    Extract a TensorMeta describing `t`.
    r`   r   )dtypesizesrequires_gradrc   stridesstorage_offsetlayout)r:   _TORCH_TO_SERIALIZE_DTYPEr   shaperv   r   r   rc   r_   ra   stride_TORCH_TO_SERIALIZE_LAYOUTr   )r~   re   s     rL   serialize_tensor_metar      s     '0-.WW5W #W5oo188==?/0xxz:z!"1%z:)!((3 5 ;s   B8
B=c                 v    t        j                         }t        j                  | |       |j	                         S rO   )ioBytesIOrb   savegetvalue)artifactbuffers     rL   serialize_torch_artifactr      s*    ZZ\F 
JJx ??rK   
serializedc                     t        |       dk(  ri S t        j                  |       }|j                  d       t	        j
                  |      S Nr   )lenr   r   seekrb   load)r   r   s     rL   deserialize_torch_artifactr      s;    
:!	ZZ
#F
KKN::frK   valc                     | t         j                  k(  rt        j                  S | t         j                   k(  rt        j                   S t	        | t         j
                        rt        |       S t        d      )Nz4Export constraints cannot be non-integer expressions)sympyoomathinfro   Integerrp   RuntimeErrorr   s    rL   _sympy_int_to_intr      sW    
ehhxx
uxxiy#u}}%3x
> rK   c                     | t         j                  k(  rt        j                  S | t         j                   k(  rt        j                   S t        j                  |       S rO   )r   r   r   r   r   r   s    rL   _int_to_sympy_intr      s?    
dhhxx
txxiy==rK   range_constraintsc                     | j                         D ci c]A  \  }}t        |      t        t        |j                        t        |j
                              C c}}S c c}}w rO   )rP   rt   r0   r   lowerupper)r   rR   rS   s      rL   serialize_range_constraintsr     sb     &++-
 .DAq	 	Aagg&agg&
 	
 .  s   AAtargetc                     | j                   j                  }t        |      dk(  xr' t        |d   j                  t
        j                        S )Nr   r   )_schemareturnsr   ro   	real_typerb   
TensorType)r   r   s     rL   _is_single_tensor_returnr     s<    nn$$Gw<1SGAJ,@,@%BRBR!SSrK   c                     | j                   j                  }t        |      dk7  ry|d   j                  }t	        |t
        j                        xr( t	        |j                         t
        j                        S )Nr   Fr   )	r   r   r   r   ro   rb   ListTypegetElementTyper   )r   r   return_types      rL   _is_single_tensor_list_returnr     sb    nn$$G
7|q!*&&Kk5>>2 z""$e&6&68 rK   c                       e Zd ZU  ee      Zee   ed<    ee      Z	ee   ed<    ee      Z
ee   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<   dZeed	<   y
)
GraphState)default_factoryinputsoutputsnodestensor_valuessym_int_valuessym_bool_valuesFis_single_tensor_returnN)rG   rH   rI   r   listr   r   r   r\   r   r   r-   dictr   r
   rt   r:   r   r7   r   r3   r   r{   rJ   rK   rL   r   r   !  s    "48FDN8#D9GT(^9d3E4:3+0+FM4Z(F(-d(CNDf%C*/*EOT#w,'E$)T)rK   r   c                      e Zd Zdej                  deej                     fdZed        Z	de
j                  j                  fdZde
j                  j                  fdZdefd	Zde
j                  j                  fd
Zd Zde
j                  j                  deeef   fdZdee   fdZ	 d&de
j.                  j0                  dee   fdZdefdZdefdZdefdZdefdZ de!fdZ"de!fdZ#dejH                  de$fdZ%dejL                  de&fdZ'dej                  de(fdZ)dejT                  defdZ+dejX                  de,fdZ-deej                     dee   fd Z.de
j                  j                  dee   fd!Z/de
j                  j                  dee   fd"Z0d#e
j                  jb                  de2fd$Z3d#e
j                  jb                  de1fd%Z4y)'r?   graph_signaturemodule_call_graphc                 L    t               | _        || _        || _        i | _        y rO   )r   graph_stater   r   custom_objs)selfr   r   s      rL   __init__zGraphModuleSerializer.__init__-  s&    
 &<.!2=?rK   c              #   r   K   | j                   }t               | _         	 d  || _         y # || _         w xY wwrO   )r   r   r   saveds     rL   save_graph_statez&GraphModuleSerializer.save_graph_state7  s3       %<	%$DuDs   7+ 7	47rs   c           
         |j                   dk(  sJ t        |j                  d   t        j                        rdt        j                  t        |j                              }t        |j                  d         | j                  j                  |j                  <   nt        |j                  d   t        j                        rt        d      t        |j                  d   t        t        t         t"        t%        d       f      r| j'                  |j                  d         }nt        d|j                  d          | j                  j(                  j+                  |       y )Nplaceholderr   name	as_tensorz*SymInt graph input is not implemented yet.z Unimplemented graph input type: )opro   metarb   Tensorr   rr   r9   r   r   r   r   r7   AssertionErrorrp   r{   rt   floatr_   serialize_inputr   append)r   rs   graph_inputs      rL   handle_placeholderz(GraphModuleSerializer.handle_placeholder@  s    ww-'''dii&5"//N		4RSK8MdiiX]N^8_D**4995		%(%,,7 !MNN		%(3c5$t**MN..tyy/?@K #CDIIeDTCU!VWW&&{3rK   c                    |j                   dk(  sJ t        |j                        dk(  sJ d       |j                  d   }t        |t        j
                  j                        r3d| j                  _        | j                  |      g| j                  _
        y t        |t        t        f      sJ |D cg c]  }| j                  |       c}| j                  _
        y c c}w )Noutputr   z"FX.Node's args should have one argr   T)r   r   argsro   rb   fxr-   r   r   r   r   tupler   )r   rs   	node_argsargs       rL   handle_outputz#GraphModuleSerializer.handle_outputM  s    ww("""499~"H$HH"IIaL	i/7;D4(,(<(<Y(G'HD$i%777MV'WYc(<(<S(AY'WD$'Ws   3Cr]   c                     t        |t              r|S |j                  j                  d      r-|j                  j	                  dd      }| d|j
                   S |j                   d|j
                   S )Nz
torch._ops	torch.ops.)ro   rt   rH   
startswithreplacerG   )r   r   modules      rL   serialize_operatorz(GraphModuleSerializer.serialize_operatorY  sr    fc"M)),7 &&..|[IFXQv/00''(&//):;;rK   c           
         |j                   dk(  sJ |j                  t        j                  u ry |j                  t        v rt        |j                        dk(  sJ |j                  d   }t        | j                  |j                        | j                  |j                        t        j                  | j                  |j                  |            g| j!                  |            }n|j                  t"        v rt        |j                        dk(  sJ |j                  d   }t        | j                  |j                        | j                  |j                        t        j                  | j%                  |j                  |            g| j!                  |            }nt'        |j                  t(        j*                  j,                        rwt        | j                  |j                        | j/                  |j                  |j                  |j                        | j1                  |      | j!                  |            }njt'        |j                  t(        j*                  j2                        r"|j                  D cg c]  }t5        d| j7                  |              }}|j                  d   }t'        |t(        j8                        r2t        j                  | j;                  |j                  |      	      g}n\t'        |t<        t>        f      r;tA        d
 |D              r)| jC                  |      }t        j                  |      g}ntE        d      t        | j                  |j                        ||| j!                  |            }ntE        d|j                   d      | jF                  jH                  jK                  |       y c c}w )Ncall_functionr   r   
as_sym_int)r   r   r   metadataas_sym_bool r   r   r   c              3   P   K   | ]  }t        |t        j                           y wrO   )ro   rb   r   ).0rS   s     rL   	<genexpr>z=GraphModuleSerializer.handle_call_function.<locals>.<genexpr>  s     <kbj]^Z5<<=Xbj   $&
as_tensorszeOnly single tensor output or list of tensor output is supported for HigherOrderOperator serializationzSerializing z is not supported)&r   r   operatorgetitem_SYM_INT_OPSr   kwargsr   r-   r   serialize_sym_op_inputsr   r   rr   serialize_sym_int_outputr   serialize_metadata_SYM_BOOL_OPSserialize_sym_bool_outputro   rb   _ops
OpOverloadserialize_inputsserialize_outputsHigherOrderOperatorr,   r   r   serialize_tensor_outputr   r   all_handle_getitem_usersrF   r   r   r   )r   rs   meta_valex_nodear   r   arg_lists           rL   handle_call_functionz*GraphModuleSerializer.handle_call_functiond  s   ww/))) ;;(***;;,&t{{#q(((yy'H..t{{;33DII>!D4Q4QRVR[R[]e4fgh006	G [[M)t{{#q(((yy'H..t{{;33DII>!T5S5STXT]T]_g5hij006	G UZZ%:%:;..t{{;,,T[[$))T[[Q..t4006G UZZ%C%CD  99	 %a ,,Q/ %	   yy'H(ELL1#??T5Q5QRVR[R[]e5fghHtUm4<kbj<k9k55d;#??h?@$I 
 ..t{{;006	G !<}<M!NOO%%g.;s   	#Oc                      y rO   rJ   )r   rs   s     rL   handle_get_attrz%GraphModuleSerializer.handle_get_attr  s    rK   c           	         i }|j                   j                  d      x}r||d<   |j                   j                  d      x}rHd }|j                         D cg c]  \  }}| d ||        }}}t        j	                  |      |d<   |j                   j                  d      x}	rA|	D 
cg c]  }
|
d    d| j                  |
d            }}
t        j	                  |      |d<   |S c c}}w c c}
w )Nstack_tracenn_module_stackc                     t        | t              rt        |       dk(  sJ | \  }}t        |t              sJ |j                  dz   |j
                  z   }|dz   |z   S )N   r   ,)ro   r   r   rt   rH   rI   )r   pathtynormalized_tys       rL   export_nn_module_stackzHGraphModuleSerializer.serialize_metadata.<locals>.export_nn_module_stack  s[    !#u-#c(a-??b!$,,, " 3boo EczM11rK   r  source_fn_stackr   r   )r   getrP   ST_DELIMITERjoinr   )r   rs   retr  r  r  rR   rS   nn_module_listsource_fn_st	source_fnsource_fn_lists               rL   r  z(GraphModuleSerializer.serialize_metadata  s   ))--66;6!,C"iimm,=>>?>2 ,1133DAq #Q-a0123   &2%6%6~%FC!"99==):;;<;iuviu\e1a0G0G	RS0U/VWiuNv%1%6%6~%FC!"
 ws   C*+#C0c           	          g }ddg}t        ||      D ]0  \  }}|j                  t        || j                  |                   2 |S )Nr  br   )zipr   r,   r   )r   r   serialized_args
args_names	args_namer   s         rL   r   z-GraphModuleSerializer.serialize_sym_op_inputs  sP    3Z
!*d3NIs""9$2F2Fs2KL 4 rK   Nr   c           
         t        |t        j                  j                        sJ |xs i }g }t	        |j
                  j                        D ]  \  }}|j                  |v rC|j                  t        |j                  | j                  ||j                                        W|j                  sG|t        |      k  r9|j                  t        |j                  | j                  ||                       |S )Nr   )ro   rb   r  r  	enumerater   	argumentsr   r   r,   r   
kwarg_onlyr   )r   r   r   r   r*  i
schema_args          rL   r  z&GraphModuleSerializer.serialize_inputs  s     &%**"7"78882&v~~'?'?@MAz&(&&!'__ 00
1HI  **q3t9}&&!'__ 00a9 % A* rK   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S rO   )ro   rp   rb   r   r-   r   r   r   r   r   s     rL   is_sym_int_argz$GraphModuleSerializer.is_sym_int_arg  sB    #s# 
sEHHMM*Zsxx4;K;K;Z;Z/Z	
rK   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S rO   )ro   r{   rb   r   r-   r   r   r   r4  s     rL   is_sym_bool_argz%GraphModuleSerializer.is_sym_bool_arg  sB    #t$ 
sEHHMM*[sxx4;K;K;[;[/[	
rK   c           
      L    dd l mc m} |j                  |j                  ft        |t        j                  j                        r|j                  dk(  rt        |j                  t              sJ t        |j                  j                  |j                        }t        |t        j                        rt!        d      t        |t        j                  j"                        rU j%                         5   j'                  |      }d d d        t)        j*                  t-        |j                              S t!        d|j                   dt/        |              j1                  |      r4t)        j*                  t3        j*                  |j4                        	      S  j7                  |      r4t)        j*                  t9        j*                  |j4                        
      S t)        j*                  t;        |j4                              S t        |      r9|j=                         }|J d       t)        j*                  t;        |            S t        |t        j>                        r3t)        j*                  t3        j*                  t        |            	      S t        |t@              rt)        j*                  |      S t        |t              rt)        j*                  |      S t        |tB              rt)        j*                  |      S t        |tD              rt)        j*                  |      S |t)        j*                  d      S t        |tF        tH        f      rtK        d |D              rt)        j*                  tG        |            S tK        d |D              rt)        j*                  tG        |            S tK        d |D              rt)        j*                  tG        |            S tK        d |D              rt)        j*                  tG        |            S tK        d |D              rAt)        j*                  |D cg c]!  }t3        j*                  t        |            # c}      S tK         fd|D              rg }|D ]  }t        |t        j                  j                        r0|jM                  t3        j*                  |j4                               Wt        |tB              sh|jM                  t3        j*                  |              t)        j*                  |      S tK         fd|D              rg }|D ]  }t        |t        j                  j                        r0|jM                  t9        j*                  |j4                               Wt        |t@              sh|jM                  t9        j*                  |              t)        j*                  |       S tK        d! |D              r^g }|D ]A  }|j                  dk(  rt!        d      |jM                  t;        |j4                               C t)        j*                  |"      S tK        d# |D              r,d$ }	t)        j*                  tG        tO        |	|            %      S tK        fd&|D              r<t)        j*                  |D cg c]  }t;        |j=                                c}"      S tK        fd'|D              r.fd(}	t)        j*                  tG        tO        |	|            %      S t!        d)|D cg c]  }t/        |       c}       t        |t        jP                        rt)        j*                  tR        |   *      S t        |t        jT                        r5t)        j*                  tW        |j.                  |jX                  +      ,      S t        |t        jZ                        rt)        j*                  t\        |   -      S t        |t        j^                        rt)        j*                  t`        |   .      S t        |t        jb                  jd                        rw|jg                  d/      r|jg                  d0      st!        d1| d2      d3ti         jj                         }
| jj                  |
<   t)        j*                  tm        |
      4      S t!        d5t/        |             # 1 sw Y   xY wc c}w c c}w c c}w )6Nr   get_attrz?getattr nodes containing tensors should not appear in the graph)r   graph)as_graphzUnsupported getattr attribute z with type: as_namer   r   r   r   zBuffer must have valid namerx   )	as_stringrg   )as_floatrJ   as_nonec              3   <   K   | ]  }t        |t                y wrO   )ro   r{   r   r  s     rL   r   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>(  s     41:a&   )as_boolsc              3   <   K   | ]  }t        |t                y wrO   )ro   rp   rC  s     rL   r   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>*       5AZ3'rD  )as_intsc              3   <   K   | ]  }t        |t                y wrO   )ro   r   rC  s     rL   r   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>,  s     73aZ5)3rD  )	as_floatsc              3   <   K   | ]  }t        |t                y wrO   )ro   rt   rC  s     rL   r   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>.  rG  rD  )
as_stringsc              3   P   K   | ]  }t        |t        j                           y wrO   )ro   rb   r7   rC  s     rL   r   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>0  s     >#QZ5<<0#r   )as_sym_intsc              3   @   K   | ]  }j                  |        y wrO   )r5  r   r  r   s     rL   r   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>8  s     9ST((+S   c              3   @   K   | ]  }j                  |        y wrO   )r7  rP  s     rL   r   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>A  s     :cT))!,crQ  )as_sym_boolsc              3   d   K   | ](  }t        |t        j                  j                         * y wrO   )ro   rb   r   r-   rC  s     rL   r   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>J  s      ?3aZ588==13s   .0r   c              3   z   K   | ]3  }t        |t        j                  j                  t	        d       f       5 y wrO   )ro   rb   r   r-   r_   rC  s     rL   r   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>R  s)     MAZEHHMM4:#>?s   9;c                     | t        j                  d      S t        | t        j                  j
                        r t        j                  | j                        S t        d|        NrJ   r@  r   z!Unsupported list/tuple argument: )r.   rr   ro   rb   r   r-   r   rF   )r  s    rL   serialize_optional_tensor_argszMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_argsT  sT    y5<<RHH#Auxx}}55<<qvvNN,/PQRPS-TUUrK   )as_optional_tensorsc              3   6   K   | ]  }t        |        y wrO   )ro   r   r  inductor_tensor_bufferss     rL   r   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>^  s     ISZ#:;Ss   c              3   R   K   | ]  }t        |g t        d                y wrO   )ro   r_   r[  s     rL   r   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>c  s+     XTWqZ#I%<#Id4j#IJTWs   $'c                     | t        j                  d      S t        |       r$t        j                  | j                               S t	        d|        rW  )r.   rr   ro   get_namerF   )r  r\  s    rL   rX  zMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_argse  sP    y5<<RHH#A'>?5<<qzz|TT,/PQRPS-TUUrK   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_custom_objzUnsupported argument type: )7torch._inductor.ir	_inductorirBufferReinterpretViewro   rb   r   r-   r   r   rt   getattrr:  owning_moduler   rF   r!   r   serialize_graphr   rr   r    r_   r5  r8   r   r7  r4   r9   r_  r7   r{   rp   r   r   r   r  r   mapr   r   rc   r   ra   memory_format!_TORCH_TO_SERIALIZE_MEMORY_FORMATr   r   _CScriptObject_has_methodr   r   r   )r   r   inductor_irattrr:  arg_namer  valuesr/  rX  custom_obj_namer\  s   `          @rL   r   z%GraphModuleSerializer.serialize_input  s   00''#

 c588==)vv#!#**c222syy66

CdELL1()jkkehh&:&:;..0 $ 4 4T : 1#??MszzY^4_``(+I#**Uabfgkblam)noo$$S).2G2GPSPXPX2YZZ%%c*?3I3IRURZRZ3[\\SXX1NOO45
 ||~H'F)FF'??^-JKKU\\*
 ??n.C.CCPSH.UVVT"??3//S!??S11S!??#..U#??C00[??2..dE]+444S	::555tCy997377c;;555$s)<<>#>>
  PS TPS1!6!6s1v!FPS T  9S99A!!UXX]]3n&;&;AFF&KL#As+n&;&;1&EF	 
  6:::c::A!!UXX]]3o&<&<QVV&LM#At,o&<&<Q&GH	 
  F;;?3??	Attz),-noo$$^%@A   )<<MMMV  (,S1OQT-U(V  ISIIKNO3aAJJL A3O  XTWXXV  (,S1OQT-U(V  %'M`cNd`c[\tTUw`cNdMe%fggU[[)??2KC2PQQU\\*??V-STTU001??4UVY4Z[[U\\*??-G-LMMUXX223//$7u => >  !-S1A1A-B,CDO03D_-??1B?1STT #>tCyk!JKKO 10f !UV  P Oes   8d
&d!d	d!

dc                     || j                   j                  vsJ t        |      | j                   j                  |<   t        |      S )Nr   )r   r   r   r9   r   r   r  s      rL   r
  z-GraphModuleSerializer.serialize_tensor_output  sB    4++99999/DX/N&&t,4((rK   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S Nr<  )r   r   rv   r8   rr   r|  s      rL   r  z.GraphModuleSerializer.serialize_sym_int_output  sH    4++:::::0A(0K''-$$T22rK   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S r~  )r   r   r}   r4   rr   r|  s      rL   r  z/GraphModuleSerializer.serialize_sym_bool_output  sH    4++;;;;;1CH1M((.%%d33rK   specc                    |j                   t        j                  j                  k(  r9t	        j
                  t        | j                  |j                                    S |j                   t        j                  j                  k(  r}|j                  J t        |j                  t        j                        sJ t	        j
                  t        t        |j                  j                        |j                              S |j                   t        j                  j                  k(  r}|j                  J t        |j                  t        j                        sJ t	        j
                  t!        t        |j                  j                        |j                              S |j                   t        j                  j"                  k(  r}|j                  J t        |j                  t        j                        sJ t	        j
                  t%        t        |j                  j                        |j                        	      S t'        d
|       )Nr   )
user_inputr   r   parameter_name)	parameterr   buffer_name)r   )r   tensor_constant_name)tensor_constantUnknown argument kind: )kindep	InputKind
USER_INPUTr#   rr   r<   serialize_argument_specr   	PARAMETERr   ro   r9   r%   r   BUFFERr$   CONSTANT_TENSORr&   r   r   r  s     rL   serialize_input_specz*GraphModuleSerializer.serialize_input_spec  s   99///##(44TXX> 
 YY",,000;;***dhh(9(9:::##.&DHHMM:#';;  YY",,---;;***dhh(9(9:::##(&DHHMM: $  YY",,666;;***dhh(9(9:::## 9&DHHMM:)-!  !#:4&!ABBrK   c                    |j                   t        j                  j                  k(  r9t	        j
                  t        | j                  |j                                    S |j                   t        j                  j                  k(  rdt        |j                  t        j                        sJ t	        j
                  t        t        |j                  j                                    S |j                   t        j                  j                  k(  rs|j                  J t        |j                  t               sJ t	        j
                  t#        t        |j                  j                        |j                              S |j                   t        j                  j$                  k(  rs|j                  J t        |j                  t               sJ t	        j
                  t'        t        |j                  j                        |j                              S |j                   t        j                  j(                  k(  rs|j                  J t        |j                  t               sJ t	        j
                  t+        t        |j                  j                        |j                  	      
      S t-        d|       )Nr  )user_outputr   )loss_outputr  )buffer_mutationr  )gradient_to_parameter)r   user_input_name)gradient_to_user_inputr  )r  r  
OutputKindUSER_OUTPUTr/   rr   r=   r  r   LOSS_OUTPUTro   r9   r(   r   BUFFER_MUTATIONr   PyTensorArgumentr   GRADIENT_TO_PARAMETERr   GRADIENT_TO_USER_INPUTr   r   r  s     rL   serialize_output_specz+GraphModuleSerializer.serialize_output_spec  s   99111$$*44TXX> 
 YY"--333dhh(9(9:::$$*&DHHMM: 
 YY"--777;;***dhh(8999$$ 2&DHHMM: $!  YY"--===;;***dhh(8999$$&=&DHHMM:#';;'  YY"-->>>;;***dhh(8999$$'>&DHHMM:$(KK(  !#:4&!ABBrK   sigc           	          t        |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j	                  |       c}      S c c}w c c}w N)input_specsoutput_specs)r"   r  r  r  r  )r   r  re   s      rL   serialize_signaturez)GraphModuleSerializer.serialize_signature  s[    ?BO!2215OADAQAQRAQA$44Q7AQR
 	
ORs
   AA!
xc                 j   t        |t              r*t        j                  t	        |j
                              S t        |t              r4t        j                  t        j                  |j
                              S t        |t              r| j                  |j                        S t        d      )Nr   r   r<  r   TODO)ro   r  r   rr   r9   r   PySymIntArgumentr8   PyConstantArgumentr   rQ   r   r   r  s     rL   r  z-GraphModuleSerializer.serialize_argument_spec  sy    a)*??^-HII+,??n.C.CAFF.STT-.''00 ((rK   module_call_signaturec           	      0   t        |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j                  |       c}t	        |j
                  t              t	        |j                  t                    S c c}w c c}w N)r   r   in_specout_spec)r+   r   r  r   r   r  r;   r  r   r  r  s      rL   serialize_module_call_signaturez5GraphModuleSerializer.serialize_module_call_signature  s    "=R=Y=YZ=YD003=YZ>S>[>[\>[T11!4>[\"#8#@#@BRS#$9$B$BDTU	
 	
Z\s
   BB
c           	          |D cg c]@  }t        |j                  |j                  r| j                  |j                        nd       B c}S c c}w N)fqn	signature)r*   r  r  r  r   r   entrys      rL   serialize_module_call_graphz1GraphModuleSerializer.serialize_module_call_graph  sV    
 -	
 -% IISXSbSb$>>uOhl -	
 	
 
s   AAc           	         |j                   dk(  r.t        |j                  t        j                  j
                        sJ t        |j                  t        j                  j
                        sJ |j                  j                  j                  }t        |      dk(  rg S |j                  d   }d }t        |j                        r1t        j                  | j                  |j                  |            gS t        |      dk(  rKt        |t        j                        r1t        j                  | j!                  |j                  |            gS t        |      dk(  rKt        |t        j"                        r1t        j                  | j%                  |j                  |            gS t'        |j                        rug }t)        |      D ]N  \  }} |||      }||j                  n|j                   d	| }	|j+                  | j                  |	|             P t        j                  |
      gS g }
t)        t-        ||            D ]  \  }\  }}|Lt        |j.                  t        j0                        sJ |
j+                  t        j                  d             Xt        |t        j2                  j4                  j6                        rt        |j.                  t        j8                        sJ  |||      }||j                  n|j                   d	| }	|
j+                  t        j                  | j                  |	|                   t        |t:              st        |j.                  t        j<                        r2t        |j.                  j?                         t        j8                        sJ  |||      }|J g }t)        |      D ]H  \  }}|	 |||      }|
J d|        |j+                  | j                  |j                  |             J |
j+                  t        j                  |
              |
S )a5  For a given node, return the dataclass representing its output values.

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

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

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

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

        We want names to be consistent across these two schemes, so that we can
        mostly reuse the names coming from FX. This function computes a mapping from
        the FX representation to our representation, preserving the names.
        r   r   r   c                     | j                   D ]>  }|j                  t        j                  u s
J | d       ||j                  d   k(  s<|c S  y )Nz is not a getitem noder   )usersr   r   r   r   )rs   ra   users      rL   output_node_at_indexzEGraphModuleSerializer.serialize_outputs.<locals>.output_node_at_index)  sO    

{{h&6&66W4&@V8WW6DIIaL(K # rK   r   r   r   r   _unused_r   rJ   r@  zNo user found at index ) r   ro   r   rb   r  r  r   r   r   r   r   r   rr   r
  r   r7   r  r3   r  r   r.  r   r)  r   OptionalType_subclassesfake_tensorr   r   r   r   r   )r   rs   r   r  r  tensor_argsidxr   	user_noder   output_argumentsreturn_schemar   r1  msub_user_nodes                   rL   r  z'GraphModuleSerializer.serialize_outputs  s   & ww/)jejjF[F[.\\\$++uzz'<'<===++%%--w<1I99U#	 $DKK0OOd.J.J499V^._`aa\Q:h#EOOt/L/LTYYX`/abcc\Q:h#FOO0N0NtyyZb0cdee*4;;7K&x0	T0s;	 !, NN II;hse4 
 ""4#?#?d#KL 1 OO{;<< *3C'4J*K&C&$|!-"9"95;M;MNNN ''(CDD%"3"3"?"?"J"JK!-"9"95;K;KLLL0s;	 !, NN II;hse4 
 !''OOd.J.J4QU.VW D$'!!++U^^ !++::<e>N>N 
 1s;	 ,,,%dODAqy $8A$FM(4S8OPQs6SS4KK < <]=O=OQR ST , !''4(HIC +LF  rK   c                    |j                   d   }i }|j                  D ]H  }|j                  t        j                  u sJ d| d| d       |j
                  ||j                  d   <   J t        |      D ]  \  }}||vs|j
                   d| ||<     g }t        |      D ])  \  }}	|j                  | j                  ||   |	             + |S )Nr   z
User node z of z is incorrectr   r  )
r   r  r   r   r   r   r   r.  r   r
  )
r   rs   r  idx_to_namer  r  _r  r1  element_meta_vals
             rL   r  z+GraphModuleSerializer._handle_getitem_usersu  s    99U#JJD;;("2"22^jd4&P]4^^2(,		K		!%   )FC +%&*ii[#>C  * #,X#6AOO,,[^=MN $7
 rK   graph_modulec           	      b   t        |t        j                  j                        sJ |j                  j
                  D ]"  }	  t        | d|j                         |       $ t        | j                  j                  | j                  j
                  | j                  j                  | j                  j                  | j                  j                   | j                  j"                  | j                  j$                        S # t        $ r%}t        d| d|j                                |d }~ww xY w)Nhandle_zFailed serializing node z in graph: )r   r   r   r   r   r   r   )ro   rb   r   r!   r:  r   rm  r   	ExceptionrF   format_noder   r   r   r   r   r   r   r   )r   r  rs   es       rL   ro  z%GraphModuleSerializer.serialize_graph  s   ,(<(<=== &&,,Dn2y1248 - ##**""((**88++:: ,,<<$$,,$($4$4$L$L
 	
  n$'?v[QUQaQaQcPd%eflmmns   D  	D.	 D))D.c                     | j                  |      }t        || j                  | j                        | j	                  | j
                              S )N)r:  r  r   )ro  r!   r  r   r  r   )r   r  r:  s      rL   r>   zGraphModuleSerializer.serialize  sJ    $$\2..t/C/CD">>t?U?UV
 	
rK   rO   )5rG   rH   rI   r  ExportGraphSignaturer   r*   r   r   r   rb   r   r-   r   r   rt   r   r  r  r
   r  r,   r   r  r  r  r{   r5  r7  r   r   r9   r
  r8   r  r  r#   r  r/   r  r"   r  ArgumentSpecr  r+   r  r  r  r  r!   r   ro  r>   rJ   rK   rL   r?   r?   ,  s_   @00@   2 23@ % %4uxx}} 4
X%((-- 
X	<C 	<@/ @/Duxx}} c3h 6tM/B  ;?jj++	m	:
T 


d 

VLh VLp) )
3. 3
4> 4
#C #C) #CJ*C"-- *CJ *CX
r'>'> 
> 
) )X )
RE[E[ 
`s 

T"BTBT=U 
Z^_nZo 
g ehhmm g X g R%((-- D<P .
EHH,@,@ 
U 
$
ehh&:&: 
{ 
rK   r?   c                   N    e Zd Zddeeeef      fdZdej                  de
fdZy)r@   Nopset_versionc                     i | _         |r| j                   j                  |       d| j                   vr,t        j                  j	                         | j                   d<   y y Naten)r  updaterb   rs  _get_max_operator_version)r   r  s     rL   r   z"ExportedProgramSerializer.__init__  sQ    -/%%m4+++).)K)K)MDv& ,rK   rX   r]   c           	         t        |j                  |j                        }|j                  |j                        }t        |j                        }i }|j                  j                         D ]
  \  }}|||<    |j                  j                         D ]  \  }}||vsJ |||<    t        t        || j                  |t        |j                        t        |j                         t        |            S )zS
        Args:
            exported_program: Exported Program to serialize
        )r  r  r   schema_versiondialect)r?   r   r   r>   r  r   r   r   rP   tensor_constantsrW   r   r  r2   r  r   rY   )	r   rX   gm_serializerserialized_graph_moduleserialized_range_constraintsrZ   ncr~   s	            rL   r>   z#ExportedProgramSerializer.serialize  s    
 .,,..
 #0"9"9:J:W:W"X'BCSCeCe'f$
 	!--335DAqIaL 6$55;;=DAqI%%%IaL > "4"00">-(00 %%5%@%@A$Y/

 
	
rK   rO   )rG   rH   rI   r   r
   rt   rp   r   r  r   rW   r>   rJ   rK   rL   r@   r@     s7    NhtCH~&> N 
"*<*<  
AS  
rK   r@   c            
          e Zd Zej                   G d d             Zd Zeded   fd       Z	de
fdZd	edeeej                  f   fd
Zd	edeeej"                  f   fdZdededefdZdej0                  j2                  fdZdedej0                  j6                  fdZdededdfdZdede j>                  fdZ!de"de jD                  fdZ#de$de jJ                  fdZ&	 	 d2de'de(e)e
e*jV                  f      de(e)e
e,f      defdZ-de
d ej0                  j2                  fd!Z.d" Z/dej`                  jb                  defd#Z2d$e3de,fd%Z4d& Z5ded ej0                  j2                  fd'Z6ded ej0                  j2                  fd(Z7ded ej0                  j2                  ddfd)Z8d*e)e
e
f   de)e
e,f   fd+Z9d,e3de jt                  fd-Z;d.e<de jx                  fd/Z=d0e>e?   de>e j~                     fd1Z@y)3rA   c                       e Zd ZU ej                  j
                  ed<   ej                  ed<   e	ej                     ed<   eeej                  f   ed<   y)GraphModuleDeserializer.Resultr  r  r   names_to_symbolsN)rG   rH   rI   rb   r   r!   r\   r  r  r   r*   r
   rt   r   SymbolrJ   rK   rL   Resultr    sC    hh****** 2 233sELL011rK   r  c                     i | _         i | _        t        j                  j	                         | _        t        j                  j                         | _        y rO   )	serialized_name_to_nodeserialized_name_to_metarb   r   r   r:  nnModuler   )r   s    rL   r   z GraphModuleDeserializer.__init__  s6    AC$<>$XX^^%
hhoo'rK   r]   Nc              #     K   | j                   | j                  | j                  | j                  f}t        j
                  j                         | _         t        j                  j                         | _        i | _        i | _        	 d  |\  | _         | _        | _        | _        y # |\  | _         | _        | _        | _        w xY wwrO   )	r:  r   r  r  rb   r   r   r  r  r   s     rL   save_graph_modulez)GraphModuleDeserializer.save_graph_module  s     

DKK)E)EtGcGccXX^^%
hhoo'')$')$	hbg_DJT%A4C_bg_DJT%A4C_s   BCB& 
C&CCserialized_targetc                    |j                  d      rt        }|j                  d      dd  }n8|j                  d      r%t        j                  }|j                  d      dd  }n|S |}|D ]  }t        ||      s|c S t        ||      }  |S )N	_operatorr   r   r   r  )r   r   splitrb   opshasattrrm  )r   r  r   serialized_target_namesr   r   s         rL   deserialize_operatorz,GraphModuleDeserializer.deserialize_operator  s    ''4F&7&=&=c&B12&F#))+6YYF&7&=&=c&B12&F#$$+D64((( .	 ,
 rK   re   c                    |j                   }|j                  dk(  ra|j                  | j                  v r| j                  |j                     }nt	        j
                  |j                  | j                        }t        |t        j                        r|| j                  |j                  <   | j                  j                  |j                        x}rMt        j                  | j                  ||j                  |j                  |j                  |j                         |j                  d }n1|j                  j                  dk(  sJ |j                  j                   }| j                  j!                  ||      S |j                  dk(  rt        |t"              sJ |S t%        d|j                   d|j                          )Nrj   locals)compiler_mincompiler_maxruntime_minruntime_maxrh   rk   zSymInt has invalid field type  with value )rQ   r_   rz   symbol_name_to_symbolr   sympifyro   r  symbol_name_to_ranger  r   _constrain_symbol_range	shape_envr   r   rl   create_symintnoderp   rF   )r   re   r   symvrrl   s         rL   deserialize_sym_intz+GraphModuleDeserializer.deserialize_sym_int  sa   gg66Y||t99900>mmCLL9S9STc5<<0?BD..s||<!66::3<<HHrH'?? NN)+)+(*(* xxxx}}000xx~~>>33Cd3CCVVxc3'''J 0QWWIN rK   c                 T   |j                   }|j                  dk(  rFt        j                  |j                  | j
                        }| j                  j                  |      S |j                  dk(  rt        |t              sJ |S t        d|j                   d|j                          )Nrj   r  ry   zSymBool has invalid field type r  )rQ   r_   r   r
  rz   r	  r  create_symboolnodero   r{   rF   )r   re   r   exprs       rL   deserialize_sym_boolz,GraphModuleDeserializer.deserialize_sym_bool"  s    gg66Y==d6P6PQD>>44T::VVy c4(((J 1!&&aggYO rK   tensor_metafake_tensor_modec                 :    |5  t        t        t        j                  t	         fd|j
                  D              t	         fd|j                  D              t        |j                        t        |j                                 cd d d        S # 1 sw Y   y xY w)Nc              3   @   K   | ]  }j                  |        y wrO   r  r   r   r   s     rL   r   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>8  s     UCTC$2237CTrQ  c              3   @   K   | ]  }j                  |        y wrO   r  r  s     rL   r   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>9  s     WCVC$2237CVrQ  )rc   r   )r	   r   rb   empty_stridedr   r   r   rd   rc   _SERIALIZE_TO_TORCH_DTYPEr   )r   r  r  s   `  rL   deserialize_tensor_metaz/GraphModuleDeserializer.deserialize_tensor_meta/  sq    
 ##U;CTCTUUW;CVCVWW-k.@.@A3K4E4EF	 s   BBBc                    t        |j                  t              r#| j                  |j                  j                     S t        |j                  t
        t        f      r#| j                  |j                  j                     S t        d|       )Nz"Unable to deserialize output node )	ro   rQ   r9   r  r   r8   r4   r=  rF   )r   r   s     rL   deserialize_graph_outputz0GraphModuleDeserializer.deserialize_graph_output?  sl    fllN3//0A0ABB~&GH//0D0DEE #EfX!NOOrK   serialized_graphc                    |j                   j                         D ]0  \  }}| j                  || j                        }|| j                  |<   2 |j
                  j                         D ]#  \  }}| j                  |      | j                  |<   % |j                  j                         D ]#  \  }}| j                  |      | j                  |<   % |j                  D ]W  }| j                  j                  |j                  j                        }| j                  |j                  j                  |       Y |j                  D ]0  }		 | j!                  |	j"                        }
| j%                  |	|
       2 g }|j*                  D ]"  }|j-                  | j/                  |             $ |j0                  rt3        |      dk(  sJ |d   }nt5        |      }| j                  j7                  |      }|j0                  r5|j8                  d   j:                  d   |j:                  d<   | j                  S t5        d |j8                  d   D              |j:                  d<   | j                  S # t&        $ r}t)        d|	       |d }~ww xY w)NzFailed deserializing node r   r   r   c              3   :   K   | ]  }|j                   d      yw)r   N)r   )r   r   s     rL   r   z<GraphModuleDeserializer.deserialize_graph.<locals>.<genexpr>q  s      ,+>C+>s   )r   rP   r  r  r  r   r  r   r  r   r:  r   r   r   sync_fx_noder   r   r   deserialize_noder  rF   r   r   r!  r   r   r   r   r   r   )r   r"  r   tensor_valuer  sym_int_valuesym_bool_valueinputplaceholder_nodeserialized_noder   r  r   r   output_nodes                  rL   deserialize_graphz)GraphModuleDeserializer.deserialize_graphG  s]   "2"@"@"F"F"HD,33L$BWBWXH19D((. #I $4#B#B#H#H#JD-151I1I-1XD((. $K %5$D$D$J$J$L D.151J1J>1ZD((. %M &,,E#zz55eoo6J6JKeoo224DE -
  055O\22?3I3IJ%%ov>  6 &..FNN488@A / 33w<1$$$ajGGnGjj''033&1&6&6q&9&>&>u&EKU# zz	 ', ,+6+;+;A+>, 'KU# zz/  \$'A/AR%STZ[[\s   -I''	J0I??Jr,  r   c                     |j                   dk(  rq|j                  d   j                  j                  } j	                  |j
                        } j                  j                  d||i |      } j                  ||       nt        |t        j                  j                        rt        |j                        dk(  r|j                  d   j                  dv sJ d       |j                  d   }|j                  dk(  r|j                  j                  nd }t!         fd|j
                  D              } j                  j                  d||i |      }|j                  dk(  r j#                  ||       |j                  d	k(  r j%                  ||       nt        |t        j                  j&                        rwt)        |      r#|j                  d   j                  j                  nd } j+                  ||      \  }} j                  j                  d||||      } j-                  ||       nt/        d
| d|       |j0                  j3                   j5                  |j6                               y )Nr  r   r   r   )r   r   z[Only single tensor output or list of tensor output is supported for higher order operators.r   c              3   T   K   | ]  }j                  |j                         ! y wrO   deserialize_inputr   r   r*  r   s     rL   r   z;GraphModuleDeserializer.deserialize_node.<locals>.<genexpr>  s#     _H^u//		:H^   %(r   z!Unsupported target type for node z: )rH   r   rQ   r=  deserialize_sym_op_inputsr   r:  create_nodedeserialize_sym_op_outputsro   rb   r  r	  r   r_   r   r   r%  deserialize_multiple_outputsr  r   deserialize_inputsdeserialize_outputsrF   r   r  deserialize_metadatar   )r   r,  r   r   r   fx_noder   r   s   `       rL   r&  z(GraphModuleDeserializer.deserialize_nodew  s4   +"**1-33;;D11/2H2HIDjj,,_fdBPTUG++OWE

 > >?O++,1#++A.337RRm mmS %,,Q/F ;;+- !! 
 _H^H^__Djj,,_fdBPTUG{{k)!!$0{{l*11/7K

 5 56 ,F3  ''*0055 
  226?KLD&jj,,_fdFTXYG$$_g> #D_DUUWX^W_!`aaD55o6N6NOPrK   r1  c                    |j                   St        j                  t        j                  j                  | j                  |j                   j                        d       S |j                  lt        j                  t        j                  j                  t        |j                  j                  j                        |j                  j                        S |j                  lt        j                  t        j                  j                  t        |j                  j                  j                        |j                  j                        S |j                  lt        j                  t        j                  j                   t        |j                  j                  j                        |j                  j"                        S t%        d|       )Nr  r   r   r   zUnkown input spec )r  r  r#   r  r  deserialize_argument_specr   r  r  r  r   r  r   r  r  r  r  r  r   )r   r1  s     rL   deserialize_input_specz.GraphModuleDeserializer.deserialize_input_spec  sI   <<#<<\\,,221<<3C3CD 
 [[$<<\\++$!++//*>*>?{{11 
 XX!<<\\(($!((,,*;*;<xx++ 
 *<<\\11$!*;*;*?*?*D*DE((==  !#5aS!9::rK   oc                 t   |j                   St        j                  t        j                  j                  | j                  |j                   j                        d       S |j                  Xt        j                  t        j                  j                  t        |j                  j                  j                        d       S |j                  lt        j                  t        j                  j                  t        |j                  j                  j                        |j                  j                        S |j                  lt        j                  t        j                  j                  t        |j                  j                  j                        |j                  j                         S |j"                  lt        j                  t        j                  j$                  t        |j"                  j                  j                        |j"                  j&                        S t)        d|       )Nr>  r   zUnknown output spec )r  r  r/   r  r  r?  r   r  r  r  r   r  r  r  r  r  r  r  r  r  r   )r   rA  s     rL   deserialize_output_specz/GraphModuleDeserializer.deserialize_output_spec  s   ==$==]]..221==3D3DE 
 ]]&==]]..$!--*;*;*@*@A 
 *==]]22$!*;*;*?*?*D*DE((44 
 $$0==]]88$!*A*A*E*E*J*JK..== 
 %%1==]]99$!*B*B*F*F*K*KL//??  !#7s!;<<rK   r  c           	          t        j                  |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j                  |       c}      S c c}w c c}w r  )r  r  r  r@  r  rC  )r   r  r1  rA  s       rL   deserialize_signaturez-GraphModuleDeserializer.deserialize_signature  sa    &&ADQA44Q7QCFCSCSTCSa$66q9CST
 	
QTs   A&A+
r  r  rZ   c                    t        j                  d      | _        t        dd| j                        | _        i | _        |i n|| _        |i n|| _        | j                  |j                         | j                  |j                        }| j                  |j                        }t        j                  t         j"                  j$                  j'                  | j(                  | j                        ||| j
                        S )NT)assume_static_by_defaultF)allow_fallback_kernelsallow_non_fake_inputsr  )r  r  r   r  )r   ShapeEnvr  r   r  r	  r  rZ   r.  r:  rE  r  deserialize_module_call_graphr   rA   r  rb   _exportrX   _create_graph_module_for_exportr   )r   r  r  rZ   r  r   s         rL   deserializez#GraphModuleDeserializer.deserialize  s     )114P .#("&nn!

 ?A"*>*FBL`!(0i6<<=(()@)J)JK >>?V?h?hi&--77WWX\XcXceieoeop/!77	 . 
 	
rK   r   r<  c                     || j                   v rt        d| d      || j                   |<   d|j                  vsJ | j                  |   |j                  d<   y )NzNode z& has already been deserialized before.r   )r  rF   r   r  )r   r   r<  s      rL   r%  z$GraphModuleDeserializer.sync_fx_node  s`    4/// 5.T!UVV-4$$T*GLL((("::4@UrK   c                 ,     t         fd|D              S )Nc              3   T   K   | ]  }j                  |j                         ! y wrO   r1  r3  s     rL   r   zDGraphModuleDeserializer.deserialize_sym_op_inputs.<locals>.<genexpr>  s!     KF5T++EII6Fr4  )r   )r   r   s   ` rL   r5  z1GraphModuleDeserializer.deserialize_sym_op_inputs
  s    KFKKKrK   c                    |j                   j                  }|j                  D ci c](  }|j                  | j	                  |j
                        * }}g }i }|D ]n  }|j                          xr |j                   }	|	r|j                  ||j                            D|j                  |v sS||j                     ||j                  <   p t        |      |fS c c}w rO   )
r   r/  r   r   r2  r   has_default_valuer0  r   r   )
r   r   r,  schema_argsr*  actual_argsr   r   r2  is_positionals
             rL   r9  z*GraphModuleDeserializer.deserialize_inputs  s    nn..GVG]G]
G]eEJJ..uyy99G] 	 
 %J * < < >>\zG\G\C\MK
89??k1.9*//.JF:??+ & T{F""
s   -Cinpc                 6    j                   }j                  }|dk(  ry |dk(  r	t        |   S |dk(  r	t        |   S |dk(  r	t        |   S |dk(  rt        |t              sJ  j                         5   j                  |j                         t        j                  j                  j                   j                   j                        }d d d         j                  j                  |j                           j                  j#                  d|j                   |j                         S t        |t$              rt'        |      S t        |t(              r j*                  |j                      S t        |t,        t.        t0        f      r|S t        |t2              rt3        |      S t        |t4        t6        f      r j9                  |      S t        |t:              rt=        |      dk(  rg S t        |d   t(              r3g }|D ]*  }|j?                   j*                  |j                             , |S t        |d   t,        t.        t0        f      rt;        |      S t        |d   t4        t6        f      r|D cg c]  } j9                  |       c}S t        |d   t@              r fd	}t;        tC        ||            S tE        d
       t        |tF              r jH                  |j                      S tE        d
       # 1 sw Y   ?xY wc c}w )NrA  r`  rb  rc  r;  r9  r   r   c                     | j                   dk(  ry | j                   dk(  rj                  | j                     S t        d       )NrA  r   Unhandled argument )r_   r  rQ   rF   )r  rW  r   s    rL    deserialize_optional_tensor_argszSGraphModuleDeserializer.deserialize_input.<locals>.deserialize_optional_tensor_argsM  sF    vv*#;.#;;AGGDD,/B3%-HIIrK   rZ  )%rQ   r_   r  !_SERIALIZE_TO_TORCH_MEMORY_FORMAT_SERIALIZE_TO_TORCH_LAYOUTro   r    r  r.  r:  rb   rL  rX   rM  r   register_moduler   r6  r   rd   r9   r  rp   r   r{   rt   r8   r4   deserialize_sym_argumentr   r   r   r.   rp  rF   r   rZ   )r   rW  rQ   typ_	submoduleresultr   r[  s   ``      rL   r2  z)GraphModuleDeserializer.deserialize_input  s   		xx9 %%,U33''4U;;[ -e44Ze]333'')&&u{{3!MM::ZZ[_[f[fhlhrhrs	 * KK''

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

ZZ *  
 v&%e,,~.//

;;UD12Ls#u:@A0077t$5zQ	E!Hn5 CMM$">">sxx"HI !E!HsE4&89E{"E!H~&GHFKLes55c:eLLE!H&<=J C @%HII$':3%%@AA01>>%**-- #6se!<==] *)> Ms   2AL	;L	Lc                     |j                   dk(  r|j                  S |j                   dk(  sJ | j                  |j                     S )Nrh   r=  )r_   rh   r  r=  )r   sym_int_args     rL   r_  z0GraphModuleDeserializer.deserialize_sym_argument\  sG    x'%%%##y000//0C0CDDrK   c                 j    | j                  |j                  d   j                  j                  |       y r   )r%  r   rQ   r=  )r   r,  r<  s      rL   r7  z2GraphModuleDeserializer.deserialize_sym_op_outputsc  s)    /11!4::BBGLrK   c                 V   t        |j                  t        j                  j                        sJ |j                  j
                  j                  }t        |      dk(  ry t        |j                        r4| j                  |j                  d   j                  j                  |       y t        |      dk(  rat        |j                  d   j                  t        t        f      r4| j                  |j                  d   j                  j                   |       y | j#                  ||       y )Nr   r   )ro   r   rb   r  r  r   r   r   r   r%  r   r   r   rQ   r8   r4   r=  r8  )r   r,  r<  r   s       rL   r:  z+GraphModuleDeserializer.deserialize_outputsf  s    '..%***?*?@@@..((00 w<1#GNN3o55a8BBGGQ\Q:o.E.Ea.H.N.NQ_apPq#ro55a8>>FFP))/7CrK   c                      j                  |j                        dt        j                  j                  dt
        dt        f fddt        j                  j                  f fdg }t        |j                        dk(  rwt        |j                  d   j                  t              sJ t        |j                  d   j                  d   t
              sJ  |||j                  d   j                         n |||j                         t        |      |j                  d<   | j                  |j                   <   y )	Nr<  r   r  c                    |j                   }j                  j                  dt        j                  ||f|      }j                  ||       | j                  j                  |          |j                  j                         y )Nr   r   )
r   r:  r6  r   r   r%  r   r  r   r  )r  r<  r   r  r   individual_outputdeserialized_metadatar   s         rL   generate_getitemzNGraphModuleDeserializer.deserialize_multiple_outputs.<locals>.generate_getitemz  s}    88D $

 6 6  #	 !7 ! d$56OOD88>? ""))*?@rK   c                    t        |      D ]  \  }}t        |t              r|j                  }t        |t              r | |||       >t        |t
        t        f      ry	j                  j                  dt        j                  ||f      }| j                  g         | d   ||       |j                  j                         | d   |j                  d<   t        d|        y )Nr   r   z Unimplemented node output type: )r.  ro   r   rQ   r9   r   r   r:  r6  r   r   r   r   r  NotImplementedError)
r  r<  r   r  r   list_outputrj  rk  generate_getitemsr   s
         rL   rp  zOGraphModuleDeserializer.deserialize_multiple_outputs.<locals>.generate_getitems  s    %dOSc8,))Cc>2$XwSAdE]3"&**"8"8' (( ##K
 OOB'%hrlKE$$++,AB.6rlK$$U+-0PQTPU.VWW! ,rK   r   r   r   )r;  r   rb   r   r-   r9   rp   r   r   ro   rQ   r   r   r   r   r  r   )r   r,  r<  r  rj  rk  rp  s   `   @@@rL   r8  z4GraphModuleDeserializer.deserialize_multiple_outputsw  s    $ 9 9/:R:R S	A 	AN 	AY\ 	A	X 	X 	X2 !&&'1,o55a8>>EEEo55a8>>qA>RRRh1H1H1K1V1VWh1H1HI $HoU5<$$W\\2rK   r   c                     i }|j                  d      x}r||d<   dt        f fd}|j                  d      x}r/d t        fd|j                  t              D              }||d<   |j                  d      x}rNg }|j                  t              D ]/  }	|	j                  d      \  }
}|j                  |
 ||      f       1 ||d<   |S )	Nr  r  c                 <   d }| j                  d      r%t        j                  }| j                  d      dd  }n=| j                  d      rt        }| j                  d      dd  }nj	                  |       S |}|D ]  }t        ||      s| c S t        ||      }  |S )Nztorch.nnr   r  rb   r   )r   rb   r  r  r   r  rm  )r  r   r  r   r   r   s        rL   deserialize_meta_funczKGraphModuleDeserializer.deserialize_metadata.<locals>.deserialize_meta_func  s    F ++J7*;*A*A#*Fqr*J'"--g6*;*A*A#*Fqr*J'001BCCF/vt,,,$VT2F	 0
 MrK   r  c                     | ||ffS rO   rJ   )keyr  r  s      rL   import_nn_module_stackzLGraphModuleDeserializer.deserialize_metadata.<locals>.import_nn_module_stack  s    T2J&rK   c              3   F   K   | ]  } |j                  d          yw)r  N)r  )r   itemrv  s     rL   r   z?GraphModuleDeserializer.deserialize_metadata.<locals>.<genexpr>  s&      #CD '

38Cs   !r  r  )r  rt   r   r  r   r   )r   r   r"  r  rs  nn_module_stack_strr  source_fn_st_strr$  source_fn_strr   
target_strrv  s   `           @rL   r;  z,GraphModuleDeserializer.deserialize_metadata  s     ",,}55;5!,C	S 	& #+,,/@"AAA'" #/55lC# O &5C!"'||,=>>>L!1!7!7!E#0#6#6s#; j##T+@+L$MN "F &2C!"
rK   r  c                     |j                    t        |j                   j                        S |j                   t	        |j                  j
                        S t        | j                  |            S )Nr   )rQ   )r   r  r   r   r  r=  r  r2  r  s     rL   r?  z1GraphModuleDeserializer.deserialize_argument_spec  sV    ;;"#)9)9::\\%#)=)=>>%D,B,B1,EFFrK   r  c           	      0   t        j                  |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j                  |       c}t        |j                        t        |j                              S c c}w c c}w r  )r  r+   r   r?  r   r   r  r  r  s      rL   !deserialize_module_call_signaturez9GraphModuleDeserializer.deserialize_module_call_signature  s    %%?T?[?[\?[!D2215?[\@U@]@]^@]1T33A6@]^"#8#@#@A#$9$B$BC	
 	
\^s   BB
r   c           	          |D cg c]J  }t        j                  |j                  |j                  r| j	                  |j                        nd       L c}S c c}w r  )r  r*   r  r  r  r  s      rL   rK  z5GraphModuleDeserializer.deserialize_module_call_graph  s\    
 -	
 -% IIUZUdUd$@@Qjn -	
 	
 
s   AA)NN)ArG   rH   rI   dataclassesr   r  r   r   r   r  rt   r   r7   r   rp   rb   r  r3   r{   r  r:   r   r   r  r   r-   r!  r   r.  r   r&  r#   r  r@  r/   rC  r"   r  rE  r!   r   r
   r   r   r   rN  r%  r5  r  r  r9  r   r2  r_  r7  r:  r8  r;  r  r?  r+   r  r   r*   rK  rJ   rK   rL   rA   rA     s   2 2 2( 	h8D> 	h 	hc $!V !c5<<6G0H !Fg %emm8K2L  ) 
	 P%((-- P.% .EHHNN .`+Q +Qh +Q4 +QZ;	 ;bll ;8 =  =  =D
 
B<S<S 
 RV.2	
!,
 'tC1L1L,L'MN
 DcN+	

 

6A Auxx}} AL#)>)> #QU # =>X =># =>~EM$ M MD4 D%((-- D"4=D 4=588== 4=]a 4=l)T#s(^ )S#X )VG8 G G
GZ 
_a_u_u 

tO?T 
Y]^`^p^pYq 
rK   rA   c                       e Zd Zddeeeef      fdZdeeej                  f   deee
j                  f   dee
j                  e	f   fdZdedej                  fd	Zd
eeeef      fdZy)rB   Nexpected_opset_versionc                     i | _         |r| j                   j                  |       d| j                   vr,t        j                  j	                         | j                   d<   y y r  )r  r  rb   rs  r  )r   r  s     rL   r   z$ExportedProgramDeserializer.__init__  sR    68#!''../EF44427((2T2T2VD''/ 5rK   r  r	  r]   c                     i }|j                         D ]7  \  }}|j                  |      x}r|||<   t        j                  d| d       9 |S )NzSymbol z2 did not appear in the graph that was deserialized)rP   r  logwarning)r   r  r	  r   rR   rS   symbols          rL   deserialize_range_constraintsz9ExportedProgramDeserializer.deserialize_range_constraints  s`    
 (..0DAq.22155v5,-!&)gaS(Z[\	 1
 ! rK   serialized_artifactc                    t        |j                  t              sJ |j                  j                  t        k7  r*t        d|j                  j                   dt         d      |j                  j                  j                         D ci c]B  \  }}|t        j                  t        |j                        t        |j                              D }}}t        |j                        }|j                         D ci c]#  \  }}t        |t        j                         s!||% }}}t#               j%                  |j                  j&                  ||      }| j)                  ||j*                        }|j                  j,                  }	| j/                  |	       t1        | j2                  |	      }
t        |j4                        }t7        j                  |j&                  |j&                  j8                  |j:                  ||g |j<                  d t?        |j                  j@                        |
      }|
jC                  |      S c c}}w c c}}w )NzSerialized schema version z+ does not match our current schema version r   )r  )"ro   rX   r   r  r2   rF   r   rP   r   r   r   min_valmax_valr   rZ   rb   r   rA   rN  r  r  r  r  _validate_model_opset_versionrD   r  rY   r  r:  r  r   r   r  upgrade)r   r  rR   rS   r  rZ   r  resr   model_opset_versionupgraderrY   rX   s                rL   rN  z'ExportedProgramDeserializer.deserialize  s%    ->>PPP//>>.P ,-@-Q-Q-`-`,a b==K<LAO  ,<<NNTTV 
V1 **+<QYY+GIZ[\[d[dIeffV 	  
 //B/L/LM	 '__.
.TQ*Q2MAqD. 	 

 $%[#44AA$ 	 !>> #"6"6
 9L8\8\8j8j**+>?()D)DFYZ/0C0N0NO
--""MM!!->>FFG-
  011S 

s   AI="I
 I
r  c                    |st        d      |D ch c]  }|| j                  v s| }}|D ]{  }t        ||   x}t              sJ d||           t        | j                  |   x}t              sJ d| j                  |           ||k7  sat	        d| d| j                   d       |D ]   }||v rt
        j                  dd|i	       " y
c c}w )a'  Compare model_opset_version with expected_opset_version and raise error if we can't resolve the version
        difference.
        E.g., model_opset_version = {"aten": 3, "custom": 4}
        expected_opset_version = {"aten": 4, "custom": 4}
        This means we can use an upgrader for ATen to reconcile the deserialized model.

        The logic of this method:

        For common op namespaces:
        1. if model version < expected version, this case can be handled by upgraders.
        2. if model version > expected version, we need downgraders but not implemented yet.
        3. if model version == expected version, we don't need extra handling.

        For op namespace only in model_opset_version, we should give a warning because it is missing from
        expected_opset_version.
        z+Serialized model should have opset version.z-model_opset_version value should be int, got z0expected_opset_version value should be int, got zModel opset version z) doesn't match to compiler opset version z-! Upgrader/downgrader is not implemented yet.z>Compiler doesn't have a version table for op namespace: {ns}. ns)extraN)r   r  ro   rp   rn  r  r  )r   r  ru  common_namespaces	namespacemodel_versioncompiler_versions          rL   r  z9ExportedProgramDeserializer._validate_model_opset_version<  s*   " #LMM,?f,?S3$JeJeCeS,?f*I,?	,JJ=CP`>?RS\?]>^_`P t/J/J9/UU+WZ[kA$B]B]^gBhAijk[  00)*+>*??h2233`b  + -I--KKXaegp`qKr -! gs
   CCrO   )rG   rH   rI   r   r
   rt   rp   r   r   r   r   r  r  rW   r  r   rN  r  rJ   rK   rL   rB   rB     s    WxS#X/G W!"3(C(C#CD!  $C$56! 
ellK'	(	!42#542			42l&s$sTWx.AY &srK   rB   c                        e Zd Z fdZ xZS )EnumEncoderc                     t        |t              r|j                  S t        |t              r$t	        j
                  |      j                  d      S t        | !  |      S Nutf-8)	ro   r   rQ   r[   base64	b64encodedecodesuperdefault)r   obj	__class__s     rL   r  zEnumEncoder.defaultf  sL    c4 99c5!##C(//88ws##rK   )rG   rH   rI   r  __classcell__)r  s   @rL   r  r  e  s    $ $rK   r  rX   r  c                 f   | j                          t        |      j                  |       }t        |j                  t
              sJ t        j                  t        j                  |j                        t              }|j                  d      }t        ||j                  |j                        }|S )N)clsr  )	_validater@   r>   ro   rX   r   jsondumpsr  asdictr  encoderW   rY   rZ   )rX   r  r  json_program
json_bytesr   s         rL   r>   r>   n  s      !-0::;KL  )::OLLL::.??@kL $$W-J!&&%%H
 OrK   c           	      x   t        | t              rJ d|  d       t        j                  |       t        j                  k(  rWt        d       t        j                  |       v r7|y t        j                  |       }t        |      dk(  sJ t        |d   |      S t        | t
              r^t        | t              rN | di |}| j                  |j
                     }t        ||j
                  t        ||j                               |S t        j                  |       rk | di |}t        j                   |       }t        j"                  |       D ]4  }|j$                  }t        ||   t'        ||            }t        |||       6 |S t        |t(              rBt        |      dk(  r|S t        j                  |       d   }	|D 
cg c]  }
t        |	|
       c}
S t        |t*              rFt        j                  |       d   }|j-                         D ci c]  \  }}|t        ||       c}}S |S c c}
w c c}}w )NzUnresolved class type: 'z'.r  r   r   rJ   )ro   rt   typing
get_originr   r_   get_argsr   _dict_to_dataclass
issubclassr   r\   setattrrQ   r  is_dataclassget_type_hintsfieldsr   rm  r   r   rP   )r  dataty_argsr  
field_type
type_hintsfr   new_field_objd_typerM   v_typerR   rS   s                 rL   r  r    s
   #s#G'?uB%GG#-$t*PS@T2T<//#&7|q   !'!*d33	C	:c6#:kDk((2
SXX1*ciiHI
		!	!#	&kDk**3/
##C(A66D.z$/?dASTMC}- ) 
	D$	t9>K%a( 
 vq)
 	
 
D$	%a( 


$1 !&!,,$
 	
 K

s   H1H6r   r  c                 ,   t        | j                  t              sJ | j                  j                  d      }t	        j
                  |      }t        t        |      }t        |      j                  t        || j                  | j                              S r  )ro   rX   r[   r  r  loadsr  r   rB   rN  rW   rY   rZ   )r   r  exported_program_strexported_program_dictserialized_exported_programs        rL   rN  rN    s     h//777#44;;GD JJ';<"4_F["\#$:;	+##""

	rK   rO   )r  r  r   r  loggingr   r   r  
contextlibr   r   r   enumr   r   r   r	   r
   r   r   r   r   r   rb   torch.export.exported_programexportrX   r  torch._export.verifierr   torch._subclasses.fake_tensorr   r   torch.fx.experimentalr   torch.utils._pytreer   r   torch.utils._sympy.value_rangesr   schemar   r   r   r   r   r   r   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=   __all__rC   r  r  r  r  rD   	getLoggerrG   r  r   rF   rT   rp   r{   MetaTyper   uint8BYTEint8CHARint16SHORTint32INTint64LONGfloat16HALFfloat32FLOATfloat64DOUBLE	complex32COMPLEXHALF	complex64COMPLEXFLOAT
complex128COMPLEXDOUBLEBOOLbfloat16BFLOAT16r   r  
sparse_coo	SparseCoo
sparse_csr	SparseCsr
sparse_csc	SparseCsc
sparse_bsr	SparseBsr
sparse_bsc	SparseBsc_mkldnnstridedStridedr   r]  contiguous_formatContiguousFormatchannels_lastChannelsLastchannels_last_3dChannelsLast3dpreserve_formatPreserveFormatrr  r\  muladdsubfloordivmodr   eqnelegeltgtr  rW   rc   rd   rv   r}   r   r   r[   r   r   Exprr   r   r  rt   r   r  r  r   r   r   r?   r@   rA   rB   JSONEncoderr  r>   r  rN  rJ   rK   rL   <module>r     s     	      % (  M M M   * * 0 D 1 > 7( ( ( ( ( ( ( ( ( ( (V  +g!	\ 	.DdO . S%,,emmCD  
KK	JJ
	KK!!	KK	KK	MM:??	MM:##	MM:$$	OOZ++	OOZ,,	j..	JJ
	NNJ'' " ))BC  
f&&	f&&	f&&	f&&	f&&	MM6>>	MM6>>  **DE  
\::	22	L77	<66	% ! %11R$S ! LLLLLLLL KKKKKKKKKKKK   4& 4U\\ 4
sELL01 
f 
 	
%emm 34 	
 	
U\\ j 	% 	5 
5:: 
ejj 	ELL+56		#
	TUZZ%:%: Tt T
%***?*? D  * * *y	
 y	
x(
 (
V[
 [
|qs qsh$$"" $ /3((DcN+ *#P 8< $T#s(^4 rK   