
    qio                       U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlmZmZ d dlmZmZmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZmZmZm Z m!Z!m"Z" d dl#Z#d dl$Z$d dl%m&c m'Z( d dl)m*Z* d d	l+m,Z, d d
l-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z6 d dl7m8Z8m9Z9 d dl:m;Z; d dl<m=Z=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD ddlEmFZF ddlGmHZH ddlHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z| ddl}m~Z~ g dZ e	j                   e      Z G d de      Zdeeef   fdZe"e.ee$j                  ee$j                  ee$j                  e(j                  f   ZdZdZi e$j                  ekj                  e$j                  ekj                   e$j"                  ekj$                  e$j&                  ekj(                  e$j*                  ekj,                  e$j.                  ekj0                  e$j2                  ekj4                  e$j6                  ekj8                  e$j:                  ekj<                  e$j>                  ekj@                  e$jB                  ekjD                  e$jF                  ekjH                  e$j                  ekjJ                  e$jL                  ekjN                  e$jP                  ekjR                  e$jT                  ekjV                  e$jX                  ekjZ                  e$j\                  ekj^                  iZ ee      Ze$jd                  e^jf                  e$jh                  e^jj                  e$jl                  e^jn                  e$jp                  e^jr                  e$jt                  e^jv                  e$jx                  e^jx                  e$jz                  e^j|                  iZ ee      Ze$j                  e`j                  e$j                  e`j                  e$j                  e`j                  e$j                  e`j                  iZ eeɫ      Zej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  e
j                  e$j                  ej                  ej                  ej                  ej                  ej                  ej                  e$j                  e$j                  e$j                  e$j                  e$j                  e$j                  ej                  ej                  hZ ed  eD              rJ e G d! d"             Ze G d# d$             Z G d% d&e      ZdeOd'e$j                  fd(Zd)eet   d'eed*f   fd+Zd,eet   d'eed*f   fd-Zd.ekd'e$j                  fd/Zd0etd'efd1Zd2e"e$j                  e$j                  e$j                  e#j                  f   fd3Zd2e"ee$j                  f   d'etfd4Zd2e"ee$j                  f   d'erfd5Zd2e"ee$j                  f   d'enfd6Zd7e$j                  d'ewfd8Zdae!d9   ed:<   d;e.fd<Zd=ed>ed'e.fd?Zefd@e!e   dAed'efdBZdCe"eeef   eed*f   ef   fdDZdEe#j                  dFed'e!e   fdGZ dEe!e   d'e#j                  fdHZdIe#j                  dJe>fdKZdLee#j                  e@f   d'eeejf   fdMZdN Ze G dO dP             Z G dQ dRe      ZdS Z	dTe$j                  j                  fdUZe  G dV dWeX             Ze  G dY dZeX             Ze  G d[ d9eX             Ze  G d\ d]eX             Z G d^ d_ej                         Zd` Zdaed'efdbZdefdce(j                  dde!eeef      dAed'efdeZdf Zdg Zdhedied'efdjZ	 d{dkdld@edme!eeef      d'e(j                  fdnZd'eeSeeef   f   fdoZ	 d{dpePdqe!ee      d'ePfdrZ G ds dt      Zduee   dvee   fdwZdx Zi Zeee   ee   f   edy<   i Z eeee   f   edz<   y)|    N)
namedtupleOrderedDict)CallableIterableIteratorSequence)contextmanager)	dataclassfield)Enum)	AnnotatedAnycastfinalOptionalUnion)&_enable_graph_inputs_of_type_nn_module)load_verifier)
FakeTensorFakeTensorMode)_ConstantAttributeType)symbolic_shapes)_pytree)treespec_dumpstreespec_loads)int_oo)
prefix_strSymT)ValueRanges)CapturedTraceback)
has_triton   )remove_proxy_from_state_dict   )schema)4ArgumentArgumentKindBufferMutationSpecComplexValueConstantValueCustomObjArgumentDeviceExportedProgramGradientToParameterSpecGradientToUserInputSpecGraphGraphArgumentGraphModuleGraphSignature	InputSpecInputToBufferSpecInputToConstantInputSpecInputToCustomObjSpecInputTokenSpecInputToParameterSpecInputToTensorConstantSpecLayoutLossOutputSpecMemoryFormatModuleCallEntryModuleCallSignatureNamedArgumentNamedTupleDefNodeOptionalTensorArgument
OutputSpecOutputTokenSpecParameterMutationSpecRangeConstraint
ScalarTypeSCHEMA_VERSIONSchemaVersionSymBoolSymBoolArgumentSymExprSymExprHintSymFloatSymFloatArgumentSymIntSymIntArgumentTensorArgument
TensorMetaTokenArgumentTREESPEC_VERSIONUserInputMutationSpecUserInputSpecUserOutputSpec)_Union)	serializeGraphModuleSerializerExportedProgramSerializerGraphModuleDeserializerExportedProgramDeserializerc                       e Zd Zy)SerializeErrorN)__name__
__module____qualname__     c/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/torch/_export/serde/serialize.pyra   ra   o   s    rf   ra   dc                 j    | j                         D ci c]  \  }}|j                  | c}}S c c}}w N)itemsvalue)rh   kvs      rg   _reverse_mapro   s   s(    #$779-41aAGGQJ---s   /;c              #   d   K   | ](  }t        |t        j                  j                         * y wrj   )
isinstancetorch_ops
OpOverload).0ops     rg   	<genexpr>rx      s!     Hz"ejj334H   .0c                   6    e Zd ZU eed<   eed<   eed<   eed<   y)SerializedArtifactexported_program
state_dict	constantsexample_inputsN)rb   rc   rd   bytes__annotations__re   rf   rg   r{   r{      s    rf   r{   c                   6    e Zd ZU eed<   eed<   eed<   eed<   y)_SerializedProgramr|   r}   r~   r   N)rb   rc   rd   r-   r   r   re   rf   rg   r   r      s    %%rf   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)LazyMapz
    Dictionary class for deferred instantiation of node metadata values.
    Purpose is to avoid creation of symbolic-shape tensors before relevant shape guards are parsed.
    c                 0    i | _         t               | _        y rj   )mapset	evaluatedselfs    rg   __init__zLazyMap.__init__   s    rf   c                 "    || j                   |<   y rj   )r   )r   rm   rn   s      rg   __setitem__zLazyMap.__setitem__   s    rf   c                     | j                   |   }|| j                  v r|S | j                  j                  |        |       | j                   |<   | j                   |   S rj   )r   r   add)r   rm   outs      rg   __getitem__zLazyMap.__getitem__   sO    hhqkJ1exx{rf   c                 6    | j                   j                         S rj   )r   __repr__r   s    rg   r   zLazyMap.__repr__   s    xx  ""rf   N)rb   rc   rd   __doc__r   r   r   r   re   rf   rg   r   r      s    
#rf   r   returnc                     | j                    t        j                  | j                        S t        j                  | j                  | j                         S )N)typer   index)r   rs   devicer   )rh   s    rg   deserialize_devicer     s7    ww||((<<QVV17733rf   sizes.c                 z    | D ]%  }|j                   dk(  rJ d|j                            t        d | D              S )Nas_intOnly as_int is supported, got c              3   4   K   | ]  }|j                     y wrj   r   )rv   sym_int_sizes     rg   rx   z#deserialize_size.<locals>.<genexpr>  s     ?$$?   r   tuple)r   r   s     rg   deserialize_sizer     sP     
  H, 	
,\->->,?@	
,
 ????rf   stridesc                 z    | D ]%  }|j                   dk(  rJ d|j                            t        d | D              S )Nr   r   c              3   4   K   | ]  }|j                     y wrj   r   )rv   sym_int_strides     rg   rx   z%deserialize_stride.<locals>.<genexpr>  s     E>&&Er   r   )r   r   s     rg   deserialize_strider     sP    ! 
""h. 	
,^-@-@,AB	
.
 EWEEErf   stc                     t         |    S rj   )_SERIALIZE_TO_TORCH_DTYPE)r   s    rg   deserialize_scalar_typer     s    $R((rf   offsetc                 `    | j                   dk(  sJ d| j                           | j                  S )Nr   r   )r   r   )r   s    rg   deserialize_storage_offsetr     s/    ;;("R&DV[[M$RR"==rf   sc                     t        | t        j                  t        j                  t        j                  f      r| j
                  j                  } t        j                  j                  j                  |       S rj   )rr   rs   rQ   rK   rO   nodeexprsympyprintingreprsreprr   s    rg   _print_sympyr      sG    !ellEMM5>>BCFFKK>>$$Q''rf   c                 v   t        | t        j                  t        j                  t
        f      rt        j                  |       rt        j                  t        |             S t        | t        j                  t        j                  f      sJ | j                  j                  (t        j                  t        t        |                   S t        j                  t        t        |       t        j                  | j                  j                                    S t        d|  dt        |        d      )Nr   as_exprhintz,SymInt should be either symbol or int, got `` of type ``)rr   rs   rQ   r   Symbolintr   is_concrete_intcreater   r   rM   r   rN   ra   r   r   s    rg   serialize_sym_intr   &  s    !ellELL#67**1-==A//a%,,!=>>>vv{{"}}W\!_-EFF}}#$Q(//qvv{{C  :1#[a	QRS
 	
rf   c                 v   t        | t        j                  t        j                  t
        f      rt        j                  |       rt        j                  t        |             S t        | t        j                  t        j                  f      sJ | j                  j                  (t        j                  t        t        |                   S t        j                  t        t        |       t        j                  | j                  j                                    S t        d|  dt        |        d      )Nas_floatr   r   z0SymFloat should be either symbol or float, got `r   r   )rr   rs   rO   r   r   floatr   is_concrete_floatr   r   r   rM   r   rN   ra   r   r   s    rg   serialize_sym_floatr   ;  s    !ennellE:;,,Q/??E!H55a%..%,,!?@@@vv{{"w|A/GHH#$Q(//E  >qcTRSWIUVW
 	
rf   c                 2   t        | t        j                  t        f      r]t	        j
                  |       rt        j                  t        |             S t        j                  t        t        |                   S t        d|  dt        |        d      )Nas_bool)expr_strr   z.SymBool should be either symbol or bool, got `r   r   )rr   rs   rK   boolr   is_concrete_boolr   rM   r   ra   r   r   s    rg   serialize_sym_boolr   P  ss    !emmT*+++A.>>$q'22>>'<?*KLL<QC{4PQ7)STU
 	
rf   tc                    t        t        | j                     | j                  D cg c]  }t	        |       c}| j
                  t        | j                  j                  | j                  j                        | j                         D cg c]  }t	        |       c}t	        | j                               t        | j                           S c c}w c c}w )z.
    Extract a TensorMeta describing `t`.
    r   )dtyper   requires_gradr   r   storage_offsetlayout)rT   _TORCH_TO_SERIALIZE_DTYPEr   shaper   r   r,   r   r   r   strider   _TORCH_TO_SERIALIZE_LAYOUTr   )r   r   s     rg   serialize_tensor_metar   \  s     '0-.WW5 #5oo188==?/0xxz:!"1%:()9)9);<)!((3 5 ;s   C
Cr^   _CURRENT_DESERIALIZERfake_tensorc                     t        | t        j                  j                        }t	        |       }t        j                  t        |      t              j                  d      }t        ||ffS )Nclsutf-8)rr   rs   nn	Parameterr   jsondumps_dataclass_to_dictEnumEncoderencode_reconstruct_fake_tensor)r   is_parametertensor_metatensor_meta_bytess       rg   _reduce_fake_tensorr   n  sY    k588+=+=>L'4K

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

8V_E "":.G"":.s   AB B(
serializedc                    t        | t        t        f      r| S t        |       dk(  ri S t	        j
                  |       }|j                  d       	 t        j                  |d      }t        |t        t        f      sJ |S # t        $ rS}|j                  d       t        j                  |d      }t        j                  dt        |      |       Y d }~qd }~ww xY w)Nr   T)weights_onlyFz\Fallback to weights_only=False succeeded. Loaded object of type %s after initial failure: %s)exc_info)rr   dictr   lenr  r  seekrs   load	Exceptionlogwarningr   )r  r  r   es       rg   deserialize_torch_artifactr    s     *tUm,
:!	ZZ
#F
KKN

::f48 h...O  
A::f59AN	 	 	
 	

s   B 	C
A	CCvaladjustc                 z   | t         j                  t        fv ry | t         j                   t         fv ry t        | t         j                        rt        |       S t        j                  dt        |       | |       |dk(  rt        j                  |       S |dk(  rt        j                  |       S t        d|       )NztExport constraints cannot be non-integer expressions. Found type %s, and value %s. We will attempt to %s this value.floorceilzGot invalid adjustment )r   oor   rr   Integerr   r  r  r   mathr  r  RuntimeError)r  r  s     rg   _sympy_int_to_intr    s    
uxx  
y6'""#u}}%3x KK	 	S	 zz#	6	yy~4VH=>>rf   c                     | |S | t          t         fv r| S | t        j                  k(  rt         S | t        j                   k(  rt          S t        j                  |       S rj   )r   r  infr   r  )r  defaults     rg   _int_to_sympy_intr!    sT    
{
w

dhh
txxiw==rf   symsym_typec                 P    t        t        |       t        t        |         d        S rj   )r   strr  r   )r"  r#  s     rg   _symbol_indexr&    s#    s3xJx013455rf   range_constraintsc                     | j                         D ci c]C  \  }}t        |      t        t        |j                  d      t        |j
                  d            E c}}S c c}}w )Nr  r  )rk   r%  rG   r  lowerupper)r'  rm   rn   s      rg   serialize_range_constraintsr+    s_     &++-
 Aq	 	Aaggv.aggw/
 	
  s   AA c                     t        | t        j                  j                        r| j                  S t        |       t        v r!t        t        |          j                  |       S t        dt        |              )NzCannot find schema for )	rr   rs   rt   ru   _schemar   _serialization_registry	op_schemar  )targets    rg   _get_schema_from_targetr1    s^    &%**//0~~	f0	0&tF|4>>vFF
0f?
@@rf   c                   @   e Zd ZU  ee      Zee   ed<    ee      Zee   ed<    ee      Z	ee
   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<    ee      Zeeef   ed<   d	Zeed
<    ee      Zeeef   ed<   y)
GraphState)default_factoryinputsoutputsnodestensor_valuessym_int_valuessym_bool_valuessym_float_valuesFis_single_tensor_returncustom_obj_valuesN)rb   rc   rd   r   listr5  r&   r   r6  r7  rB   r  r8  r%  rT   r9  rQ   r:  rK   r;  rO   r<  r   r=  r+   re   rf   rg   r3  r3    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Qrf   r3  c                       e Zd Zd Zy)Finalc                     |D ]+  }t        |t              st        d|j                   d       t        j                  | ||t        |            S )Nztype 'z ' is not an acceptable base type)rr   r@  	TypeErrorrb   r   __new__r  )metaclsnamebases	classdictbs        rg   rC  zFinal.__new__  sQ     	WA!U#&4T UVV	W ||GT5$y/BBrf   N)rb   rc   rd   rC  re   rf   rg   r@  r@    s    Crf   r@  c                     g d}|D ]7  }t        | |      st        ||      st        | |      t        ||      k7  s7 y y)N)num_cpu_threads	num_warps
num_stagesnum_ctasFT)hasattrgetattr)configentry_metadatametadata_attrsattrs       rg   is_metadata_matchedrT    sG    ON 64 W^T%Bvt$(EE rf   r   c                    | j                   t        j                  j                  j                  u sJ t               sJ d       ddlm} ddlm	} t        | j                  d   t              sJ t        j                  j                  j                  j                  | j                  d         }t        ||      }|r|j                  n|}t!        |d      rP|j"                  }t%        |j'                               dk(  sJ t)        t+        |j-                                     d   }nqt!        |d      rM|j.                  }t%        |j'                               dk(  sJ t)        t+        |j-                                     }nt1        d	|j2                         t%        |j'                               dk(  r$|t)        t+        |j-                                     fS t        ||      xr& t!        |d
      xr t%        |j4                        dkD  }|r_i }	|j4                  D ]d  }
|
t%        |j6                        k  s|j6                  |
   }| j                  j9                  di       }t        |t:              sX||v s]||   |	|<   f |j4                  D cg c]%  }|j6                  |   |	v r|	|j6                  |      ' }}g }|j=                         D ]  \  }}t?        j@                  d|      }|sg }|D ]\  }|dv r|jC                  |dk(         d|v sd|v sd|v r|jC                  tE        |             C|jC                  t        |             ^ ||k(  s|jC                  ||f        ntG        |j=                               }t%        |      dk(  r2t1        d|j2                   dtG        |j'                                      t%        |      dk(  r
||d   d   fS |r[|D ]6  \  }}|jH                  }|jJ                  D ]  }tM        ||      s||fc c S  8 t1        d|j2                   d|rdnd d      t1        d|j2                   d|rdnd d|D cg c]  \  }}|	 c}}       c c}w c c}}w )Nz+triton required to serialize triton kernelsr   )	Autotuner)JITFunction
kernel_idxdevice_cachesr$   cachez#kernel caches not found for kernel 
constexprskwargsz\('constexpr',\s*([^)]+)\))TrueFalser]  .r  Ez[couldn't find a kernel cache entry with metadata matching the autotuner configs for kernel z. Available cache keys: z2Multiple cache entries found for autotuned kernel  zwith same constexpr valueszwith no constexprz* and couldn't disambiguate using configs. z6Multiple cache entries found for non-autotuned kernel z0. This should not happen. Available cache keys: )'r0  rs   _higher_order_opstriton_kernel_wrap triton_kernel_wrapper_functionalr!   triton.runtime.autotunerrV  triton.runtime.jitrW  rr   r\  r   kernel_side_table
get_kernelfnrN  rY  r  keysnextitervaluesrZ  AssertionErrorrb   r[  	arg_namesgetr  rk   refindallappendr   r>  metadataconfigsrT  )r   rV  rW  kernelis_autotuneractual_kernelcachesrZ  has_constexprsconstexpr_valsconstexpr_idx
param_namekwargs_dictidxexpected_valuesmatching_entriessig_keycache_entryconstexpr_matchesconstexpr_valuesmatch_sig_keyrQ  rP  key_s                             rg   !get_triton_kernel_and_cache_entryr    s   ""55VV	W	W <FFF<2.dkk,/555$$77IITTL!F fi0L!-FII6M}o.,,6;;=!Q&&&T&--/*+A.		($$6;;=!Q&&&T&--/*+1-2H2H1IJ
 	

 5::<Ad4#7888 	=+. 	.M<0	.(()A-  *55 	MMs=#:#:;;*44]C
"kkooh;k40![05@5Lz2	M %//	
 &&s+~=	 =22378
 
 $)KKM 	D G[ "

+H' R #% . <E 11(//@(//e=(//E
;< $6$++Wk,BC	D  .
!ijw  kA  kA  jB B%%)%**,%7$8:
 	
 !.q1!444%5 	6!Hk(11N .. 6&v~>(+556	6 @AWAW@XXY/=+CVW X89
 	
 
@AWAW@XXY+9'?R
S T9L\9]&#q#9]8^	` i
p :^s   *Q1Q6c                      e Zd Zdej                  deej                     fdZed        Z	de
j                  j                  fdZde
j                  j                  fdZdefd	Zde
j                  j                  fd
Zd Zdee
j                  j                     fdZdefdZde
j                  j                  deeef   fdZdej0                  defdZdee   fdZ	 d7dedee   fdZdee   fdZdefdZ defdZ!defdZ"defdZ#d7dee   de$fdZ%de&fdZ'de(fdZ)de*fdZ+de(fdZ,d ejZ                  de-fd!Z.d ej^                  de/fd"Z0d#ej                  de1fd$Z2d%ejf                  de$fd&Z4d'e5jl                  defd(Z7d)ejp                  de8fd*Z9d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-Z<d.ed/ede$fd0Z=de
j                  j                  dee&   fd1Z>d2e
j                  j~                  de@fd3ZAd4eeef   fd5ZBd2e
j                  j~                  de?fd6ZCy)8r\   graph_signaturemodule_call_graphc                 h    t               | _        || _        || _        i | _        i | _        i | _        y rj   )r3  graph_stater  r  custom_objsduplicate_getitem_nodestreespec_namedtuple_fields)r   r  r  s      rg   r   zGraphModuleSerializer.__init__  s6    
 &<.!2=?79$DF'rf   c              #   r   K   | j                   }t               | _         	 d  || _         y # || _         w xY wwrj   )r  r3  r   saveds     rg   save_graph_statez&GraphModuleSerializer.save_graph_state  s3       %<	%$DuDs   7+ 7	47r   c           
          |j                   dk(  sJ |j                  d   }t        j                  d|j                  |       t        |t        j                        r2t        j                  | j                  |j                  |            }nLt        |t        j                        r2t        j                  | j                  |j                  |            }n t        |t        j                        rt        d      t        |t        t         t"        t$        t'        d       f      r| j)                  |      }nt        |t*        j,                        rj|j.                  }t        j                  t-        |j                  |            }| j1                  |      | j2                  j4                  |j                  <   nt        d	|j                  d          | j2                  j6                  j9                  |       y )
Nplaceholderr  z[handle_placeholder] %s: %s	as_tensor
as_sym_intz,SymFloat graph input is not implemented yet.rE  	class_fqnas_custom_objz Unimplemented graph input type: )rw   metar  debugrE  rr   rs   Tensorr&   r   serialize_tensor_outputrQ   serialize_sym_int_outputrO   rn  r   r   r%  r   r   serialize_inputepr+   r  serialize_script_obj_metar  r=  r5  rs  )r   r   r  graph_inputr  s        rg   handle_placeholderz(GraphModuleSerializer.handle_placeholder  sv   ww-'''ii		/C@c5<<("//66tyy#FK U\\*"//88CHK U^^, !OPPc4eT$Z@A..s3KR112I"///TYY)TK ..s3 ..tyy9 !#CDIIeDTCU!VWW&&{3rf   c                    |j                   dk(  sJ t        |j                        dk(  sJ d       |j                  d   }t        j	                  d|j
                  |       t        |t        j                  j                        r3d| j                  _        | j                  |      g| j                  _        y t        |t        t        f      sJ |D cg c]  }| j                  |       c}| j                  _        y c c}w )Noutputr$   z"FX.Node's args should have one argr   z[handle_output] %s: %sT)rw   r  argsr  r  rE  rr   rs   fxrB   r  r<  r  r6  r   r>  )r   r   	node_argsargs       rg   handle_outputz#GraphModuleSerializer.handle_output  s    ww("""499~"H$HH"IIaL			*DIIyAi/7;D4(,(<(<Y(G'HD$i%777MV'Wc(<(<S(A'WD$'Ws   C?r   c                     t        |t              r|S |j                  j                  d      r-|j                  j	                  dd      }| d|j
                   S |j                   d|j
                   S )Nz
torch._opsz	torch.opsr_  )rr   r%  rc   
startswithreplacerb   )r   r0  modules      rg   serialize_operatorz(GraphModuleSerializer.serialize_operator  sr    fc"M)),7 &&..|[IFXQv/00''(&//):;;rf   c           	          |j                   dk(  sJ |j                  j                  d      }t        j	                  d|j
                  |j                  |j                  |j                  |       |j                  t        j                  u ry |j                  t        v s;|t        |t        j                  t        j                  t        j                   f      rt#        |j                        dk(  sJ t%         j'                  |j                         j)                  |j                  |j                         j+                  |j
                  |      g j-                  |            }nSt        |j                  t        j.                  j0                        rwt%         j'                  |j                         j3                  |j                  |j                  |j                         j5                  |       j-                  |            }nt        |j                  t        j.                  j6                        r<dt8        fd}|j                  t        j:                  j<                  u rvt?        |j                        }|j                  d   j
                  }tA        |jB                  jD                  |      sJ tG        |jB                  jD                  |      }|jH                  |d<   d |d<   g }|d	   t        |d	   tJ              ry|d	   D ]l  }	t        |	t        jL                  j$                        r5t        |	j                  j                  dd       tN        jP                        r\|jS                  |	       n ||d	<    fd
}
t%         j'                  |j                         jU                  ||j                         |
|       j-                  |      d      }n|j                  t        j:                  jV                  jX                  u rt[        |      \  }}|j\                  }|j                  d   }t        |t^              sJ |ja                         }g }|jb                  D ch c]  }|jd                  s|j
                   }}d}d}d}t        |j                  d   t^              sJ |j                  d   jg                         D ]5  \  }}||v rd}|rJ d       ||v r|jS                  |       ||fz  }|dz  }7 t        |j                  d   t>              sJ |jh                  jj                   d|jl                   }||j                  d   d   ||jn                  d}tA        |d      r|jp                  |d<   tA        |d      r|jr                  |d<   t%         j'                  |j                         jU                  ||       ju                  |       j-                  |       ||            }nt%         j'                  |j                         jU                  |j                  |j                         ju                  |       j-                  |       ||            }nCtw        |j                        tx        v rtw        |j                        tx        v sJ tw        |j                         d       tx        tw        |j                           }|j{                         }|j}                  |j                        }t        |t~              rt        |t~              sJ d|vrd|vsJ t%        d| d|  j3                  |j                  |j                  |j                         j5                  |       j-                  |            }nt        d|j                   d       j                  j                  jS                  |       y c c}w )Ncall_functionr  z-[handle_call_function] %s: %s(%s, {%s}) -> %sr   )r0  r5  r6  rt  r   c                     t        | j                  t        j                  j                        sJ | j
                  j                  dd       }|d uxr t        |t        j                        S )Nr  )rr   r0  rs   rt   HigherOrderOperatorr  rp  r  )r   meta_vals     rg   _is_hop_single_tensor_returnzPGraphModuleSerializer.handle_call_function.<locals>._is_hop_single_tensor_return  sO    !$++uzz/M/MNNN99==5t+R
8U\\0RRrf   r$   r"   c                     | j                   j                  dd       }g }t        |      D ]8  \  }}j                  | |      }|j	                  j                  ||             : t        j                  |      gS )Nr  
as_tensors)r  rp  	enumerate_output_node_name_at_indexrs  r  r&   r   )r   r  tensor_argsr  r  rE  r   s         rg   serialize_tensor_list_outputzPGraphModuleSerializer.handle_call_function.<locals>.serialize_tensor_list_output   sw    #yy}}UD9H"$K%.x%8 U	T#>>tSI#**4+G+Gd+STU %OO{CDDrf   F)r0  r5  r6  rt  is_hop_single_tensor_returnre   r\  Tz/non-constexpr args found after constexpr arg(s)gridr  )rE  r  output_indicesrK  rJ  sharedshared_memory_bytesz* is not supported in export serialization.:#zSerializing z is not supported)Crw   r  rp  r  r  rE  r0  r  r\  operatorgetitem_SYM_OPSrr   rs   rQ   rK   rO   r  rB   r  serialize_sym_op_inputsserialize_outputserialize_metadatart   ru   serialize_inputsserialize_outputsr  r   rb  aoti_call_delegater>  rN  graphowning_modulerO  	aoti_pathr   r  r  r+   rs  serialize_hoo_inputsrc  rd  r  rt  r  rj  paramsis_constexprrk   ri  rb   hashrK  rJ  r  serialize_hoo_outputsr   r.  	namespace
to_op_namer%  ra   r  r7  )r   r   r  ex_noder  serializable_argslowered_module_namelowered_moduleserializable_weight_nodesweight_noder  rv  kernel_cache_entrykernel_cache_metadataoutput_keysr  pconstexpr_keysfound_constexprargs_newirm   rn   kernel_name_with_hash
kwargs_newhandlerr  op_names   `                           rg   handle_call_functionz*GraphModuleSerializer.handle_call_function  s   ww/)))99=='		;IIKKIIKK	
 ;;(***;;(" 8ellEMM5>>%RSt{{#q(((..t{{;33DKKK..tyy(CD006	G UZZ%:%:;..t{{;,,T[[$))T[[Q..t4006G UZZ%C%CDSd S {{e55HHH$(O! ,099Q<+<+<#tzz779LMMM!()A)ACV!W'5'?'?!!$ (,!!$,.)$Q'3
%a((9 (9'; F &k588==Aj',,00=r?S?SG %188EF ,E%a(E 224;;?445FT8>!44T:05 **==^^_ .Ot-T**(:(C(C%99U+!(D111&mmo!#28--!RQ1>>!&&!R!R"'!$++h"7>>> KK1779 DAq N**. . I. K'&--a0$HFA" "$++f"5t<<< yy))*!,A,F,F+GH & 2 KK/2&4!6!@!@	
 02CD-== 01 0(;8M8T8TJ45224;;?44XzJ 66t<!44T:0LT0R 224;;?44TYYL 66t<!44T:0LT0R $++"99$(?? $%%OP? .d4;;.?@G))+I((5Gi-*Wc2JJJi'Cw,>>>9+Qwi0,,T[[$))T[[Q..t4006	G !<}<M!NOO%%g.[ "Ss   3_%_%c                 D    t         j                  d|j                         y )Nz[handle_get_attr] %s)r  r  rE  )r   r   s     rg   handle_get_attrz%GraphModuleSerializer.handle_get_attr  s    		($))4rf   c                     d }|j                   D ]c  }|j                  t        j                  u s
J | d       ||j                  d   k(  s<||}A|j
                  | j                  |j
                  <   e |S )Nz is not a getitem noder$   )usersr0  r  r  r  rE  r  )r   r   r   	user_nodeusers        rg   _output_node_at_indexz+GraphModuleSerializer._output_node_at_index  s    	JJ 	MD;;("2"22Stf<R4SS2		!$$ $I ?HnnD00;	M rf   c                 d    | j                  ||      }||j                   d| S |j                  S )N_unused_)r  rE  )r   r   r   r  s       rg   r  z0GraphModuleSerializer._output_node_name_at_index  s9    ..tU;	ii[00>>!rf   c           	      0   i }|j                   j                  d      x}r||d<   |j                   j                  d      x}rHd }|j                         D cg c]  \  }}| d ||        }}}t        j	                  |      |d<   |j                   j                  d      x}	rA|	D 
cg c]  }
|
d    d| j                  |
d            }}
t        j	                  |      |d<   |j                   j                  d      x}r!t        j	                  t        |            |d<   |j                   j                  d	      x}r	 t        j                  |      |d	<   |S |S c c}}w c c}
w # t        $ r!}t        d
|j                   d|       |d }~ww xY w)Nstack_tracenn_module_stackc                     t        | t              rt        |       dk(  sJ | \  }}t        |t              sJ t        |t              sJ |dz   |z   S )Nr"   ,)rr   r   r  r%  )r  pathtys      rg   export_nn_module_stackzHGraphModuleSerializer.serialize_metadata.<locals>.export_nn_module_stack  sS    !#u-#c(a-??b!$,,,!"c***czB&rf   r  source_fn_stackr   r$   torch_fncustomz-Failed to serialize custom metadata for node z with error )r  rp  rk   ST_DELIMITERjoinr  r>  r   r   r  ra   rE  )r   r   retr  r  r  rm   rn   nn_module_listsource_fn_st	source_fnsource_fn_listr  r  r  s                  rg   r  z(GraphModuleSerializer.serialize_metadata  s   ))--66;6!,C"iimm,=>>?>' @O?T?T?V7;q!1#Q-a012N  &2%6%6~%FC!"99==):;;<; ". Q<.$"9"9)A,"G!HIN  &2%6%6~%FC!"yy}}Z0080*//X?C
OYY]]8,,6, $

6 2H 
s
/  $CDII;l[\Z]^s$   E +#E&E+ +	F4FFscript_obj_metac                 p    t         j                  d|       t        |j                  |j                        S )Nz[serialize_script_obj_meta] %sr  )r  r  r+   rE  r  r   r  s     rg   r  z/GraphModuleSerializer.serialize_script_obj_meta  s2     			2OD  %%%//
 	
rf   c           	         t        |t        j                  j                        r.|j                  j
                  D cg c]  }|j                   }}n@|t        v sJ t        t        j                  |      j                  j                               }g }t        ||      D ]?  \  }}|j                  t        || j!                  |      t"        j$                               A |S c c}w )NrE  r  kind)rr   rs   rt   ru   r-  	argumentsrE  r  r>  inspect	signature
parametersrj  ziprs  r@   r  r'   
POSITIONAL)r   rw   r  r  
args_namesserialized_args	args_names          rg   r  z-GraphModuleSerializer.serialize_sym_op_inputs  s    b%**//0.0jj.B.BCs#((CJC>!>g//3>>CCEFJ!*d3 	NIs""",,S1%00	  Ds   C%Nr0  c           
         d }g }t        |t        j                  j                  j                        r|d   }|d   }|j                  ||      }n=t        |t        j                  j                  gt                     sJ t        |      }|J |xs i }t        |j                        D ]  \  }}	|	j                  |v r]|j                  t        |	j                  | j                  ||	j                     |	j                         t"        j$                               q|	j&                  sa|t)        |      k  rS|j                  t        |	j                  | j                  ||   |	j                         t"        j*                               ތ |S )Nr   r$   r  )rr   rs   rb  	torchbindCallTorchBindr%   rt   ru   _registered_extension_typesr1  r  r  rE  rs  r@   r  r   r'   KEYWORD
kwarg_onlyr  r  )
r   r0  r  r\  r%   r  objmethodr  
schema_args
             rg   r  z&GraphModuleSerializer.serialize_inputs  sl    fe55??MMNq'C!WF]]3/F..O1L1NO   -V4F!!!2&v'7'78 	MAz&(&&!'__ 00":??3Z__ *11  **q3t9}&&!'__ 00a*//J)44 -	0 rf   c                 B   |D cg c]-  }t        d| j                  |      t        j                        / }}|j	                  |j                         D cg c]0  \  }}t        || j                  |      t        j                        2 c}}       |S c c}w c c}}w )zM
        For serializing HOO inputs since HOOs do not have a schema.
         r  )r@   r  r'   r  extendrk   r  )r   r  r\  ar5  rE  s         rg   r  z*GraphModuleSerializer.serialize_hoo_inputs  s     	
  T11!4<;R;R
 
 	  &||~ D! ,,Q/%--		
 !
s   2B5B
c                 \    t        |      t        u xs t        |t        j                        S rj   )r   r   rr   rs   rQ   r   r  s     rg   is_inductor_sym_int_argz-GraphModuleSerializer.is_inductor_sym_int_arg,  s#    
 CyC@:c5<<#@@rf   c                     t        |      t        u xsH t        |t        j                  j
                        xr" |j                  | j                  j                  v S rj   )	r   r   rr   rs   r  rB   rE  r  r9  r)  s     rg   is_sym_int_argz$GraphModuleSerializer.is_sym_int_arg3  sG    CyC 
sEHHMM* <D,,;;;	
rf   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S rj   )rr   r   rs   r  rB   rE  r  r;  r)  s     rg   is_sym_float_argz&GraphModuleSerializer.is_sym_float_arg9  sE    #u% 
sEHHMM* >D,,===	
rf   c                     t        |t              xsH t        |t        j                  j                        xr" |j
                  | j                  j                  v S rj   )rr   r   rs   r  rB   rE  r  r:  r)  s     rg   is_sym_bool_argz%GraphModuleSerializer.is_sym_bool_arg?  sE    #t$ 
sEHHMM* =D,,<<<	
rf   arg_typec           
      0     dd l mc m} |j                  |j                  ft        |t        j                  j                        r*|j                  dk(  rgt        |j                  t              sJ t        |j                  j                  |j                        }t        |t        j                        rt!        d      t        |t        j                  j"                        rU j%                         5   j'                  |      }d d d        t)        j*                  t-        |j                              S t/        |      j0                  dk(  rGt        |dd       }t        |dd       }|J d	       |J d
       t)        j*                  | d|       S t!        d|j                   dt/        |              j3                  |      r4t)        j*                  t5        j*                  |j6                              S  j9                  |      r4t)        j*                  t;        j*                  |j6                              S  j=                  |      r4t)        j*                  t?        j*                  |j6                              S t        |j@                  d   tB        jD                        rBt)        j*                  tE        |j6                  |j@                  d   jF                              S |j6                   jH                  v r9 jH                  |j6                     }t)        j*                  tK        |            S t)        j*                  tK        |j6                              S t        |      r9|jM                         }	|	J d       t)        j*                  tK        |	            S t        ||jN                        rv|jM                         }	|	J d       |jQ                         }
|
jS                         jU                         }|
 jV                  |	<   t)        j*                  tE        |	|            S t        |t        jX                        r3t)        j*                  t5        j*                  t        |                  S t        |t        jZ                        r3t)        j*                  t;        j*                  t        |                  S t/        |      t\        u rt)        j*                  |      S t/        |      t        u rt)        j*                  |      S t/        |      t^        u rt)        j*                  |      S t/        |      t`        u rt)        j*                  |      S t/        |      tb        u r5t)        j*                  te        |jf                  |jh                              S |t)        j*                  d      S t        |tj              rki }|jm                         D ]@  \  }}t        |t              st!        d t/        |              jo                  |      ||<   B t)        j*                  |!      S t        |tp        tr        f      rbtu        |      dk(  r|t        |t        jv                        r|jy                         }t        |t        jz                        sJ |jy                         }t        |t        jv                        r|jy                         }t        |t        j|                        rt)        j*                  g "      S t        |t        j~                        rt)        j*                  g #      S t        |t        j                        rt)        j*                  g $      S t        |t        j                        rt)        j*                  g %      S t        |t        j                        rt)        j*                  g &      S t!        d'| d(      t        j                  d)       t)        j*                  g &      S t        d* |D              rt)        j*                  tq        |      "      S t        d+ |D              rt)        j*                  tq        |      #      S t        d, |D              rt)        j*                  tq        |      $      S t        d- |D              rt)        j*                  tq        |      %      S t         fd.|D              rg }|D ]  }t        |t        jX                        r/|j                  t5        j*                  t        |                   Lt/        |      t^        u s^|j                  t5        j*                  |              t)        j*                  |/      S t        d0 |D              rAt)        j*                  |D cg c]!  }t;        j*                  t        |            # c}1      S t         fd2|D              rg }|D ]  }t        |t        j                  j                        r0|j                  t5        j*                  |j6                               Wt/        |      t^        u si|j                  t5        j*                  |              t)        j*                  |/      S t         fd3|D              rg }|D ]  }t        |t        j                  j                        r0|j                  t;        j*                  |j6                               Wt        |t`              sh|j                  t;        j*                  |              t)        j*                  |1      S t         fd4|D              rg }|D ]  }t        |t        j                  j                        r0|j                  t?        j*                  |j6                               Wt        |t\              sh|j                  t?        j*                  |              t)        j*                  |5      S t        d6 |D              r^g }|D ]A  }|j                  dk(  rt!        d      |j                  tK        |j6                               C t)        j*                  |&      S t        d7 |D              r,d8 }t)        j*                  tq        t        ||            9      S t        fd:|D              r<t)        j*                  |D cg c]  }tK        |jM                                c}&      S t        fd;|D              r.fd<}t)        j*                  tq        t        ||            9      S t        d= |D              r-t)        j*                  |D cg c]  }tq        |       c}>      S t!        d?|D cg c]  }t/        |       c}       t        |t        j                        rt)        j*                  t        |   @      S t        |t        j                        r5t)        j*                  t        |j.                  |j                  A      B      S t        |t        j                        rt)        j*                  t        |   C      S t        |t        j                        rt)        j*                  t        |   D      S t        |t        j                  j                        r|j                  dE      r|j                  dF      st!        dG| dH      dItu         jV                         }| jV                  |<   |jS                         jU                         }t)        j*                  tE        ||            S t        |t        j                  j                  t        j                  j                  f      r%t)        j*                   j                  |      J      S t!        dKt/        |       dL|       # 1 sw Y   xY wc c}w c c}w c c}w c c}w )MNr   get_attrz?getattr nodes containing tensors should not appear in the graph)rE  r  )as_graphLoweredBackendModulemodule_name
backend_idzmodule_name should not be Nonezbackend_id should not be None-	as_stringzUnsupported getattr attribute z with type: as_namer  as_sym_floatas_sym_boolr  r  r  rE  r  zBuffer must have valid namer   r   r   )realimag)
as_complexTas_nonezDict keys must be strings, got )as_string_to_argument)as_bools)as_ints)	as_floats)
as_stringsr  zEmpty list with type z nyi.zUnsure how to serialize the given empty list, as we don't know what is the type of this argument. Serializing it as a tensor list by default.c              3   >   K   | ]  }t        |      t        u   y wrj   )r   r   rv   r'  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     0q47d?0   c              3   >   K   | ]  }t        |      t        u   y wrj   r   r   rM  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>       1T!W^1rN  c              3   >   K   | ]  }t        |      t        u   y wrj   )r   r   rM  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     3!T!W%3rN  c              3   >   K   | ]  }t        |      t        u   y wrj   )r   r%  rM  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  rQ  rN  c              3   @   K   | ]  }j                  |        y wrj   )r*  rv   r'  r   s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     BT11!4B   )as_sym_intsc              3   P   K   | ]  }t        |t        j                           y wrj   )rr   rs   rO   rM  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     @qZ5>>2@s   $&)as_sym_floatsc              3   @   K   | ]  }j                  |        y wrj   )r,  rU  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     9T((+9rV  c              3   @   K   | ]  }j                  |        y wrj   )r.  rU  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     ;!T**1-;rV  c              3   @   K   | ]  }j                  |        y wrj   )r0  rU  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s     :T))!,:rV  )as_sym_boolsc              3   d   K   | ](  }t        |t        j                  j                         * y wrj   )rr   rs   r  rB   rM  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>
  s     ?aZ588==1?ry   c              3   z   K   | ]3  }t        |t        j                  j                  t	        d       f       5 y wrj   )rr   rs   r  rB   r   rM  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s(     MAZEHHMM4:#>?Ms   9;c                     | t        j                  d      S t        | t        j                  j
                        r*t        j                  t        | j                              S t        d|        NTrE  rA  r  z!Unsupported list/tuple argument: )	rC   r   rr   rs   r  rB   rS   rE  ra   r'  s    rg   serialize_optional_tensor_argszMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_args  s`    y5<<TJJ#Auxx}}55<<&4!&&&A   -/PQRPS-TUUrf   )as_optional_tensorsc              3   6   K   | ]  }t        |        y wrj   )rr   rv   r'  inductor_tensor_bufferss     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>#  s     IZ#:;Is   c              3   R   K   | ]  }t        |g t        d                y wrj   )rr   r   rf  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>(  s-      JK
1D 7DdDEs   $'c                     | t        j                  d      S t        |       r.t        j                  t        | j	                                     S t        d|        ra  )rC   r   rr   rS   get_namera   )r'  rg  s    rg   rc  zMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_args,  s\    y5<<TJJ#A'>?5<<&4!**,&G   -/PQRPS-TUUrf   c              3   d   K   | ](  }t        |t              xr t        d  |D               * yw)c              3   >   K   | ]  }t        |      t        u   y wrj   rP  rv   xs     rg   rx   zBGraphModuleSerializer.serialize_input.<locals>.<genexpr>.<genexpr>:  s     ,GT!W^,GrN  N)rr   r   allrM  s     rg   rx   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>9  s/      LM
1e$G,GQ,G)GGry   )as_int_listsz&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 )Xtorch._inductor.ir	_inductorirBufferReinterpretViewrr   rs   r  rB   rw   r0  r%  rO  r  r  r  ra   r2   r  serialize_graphr&   r   r1   r   rb   r,  rR   rE  r.  rP   r0  rL   r  r  r+   r  r  rS   rj  TorchBindObjectget_real_obj_typequalified_namer  rQ   rO   r   r   r   complexr)   rB  rC  r  rk   r  r>  r   r  OptionalTypegetElementTypeListTypeBoolTypeIntType	FloatType
StringType
TensorTyper  r  ro  rs  r   r   r   r   r,   r   memory_format!_TORCH_TO_SERIALIZE_MEMORY_FORMATr   r   _CScriptObject_has_methodrt   ru   r  r  )r   r  r1  inductor_irrS  r  r6  r7  
dedup_namearg_namearg_valr  serialized_dictr  rl   	elem_typerm  r'  r  rc  r   custom_obj_namerg  s   `                     @rg   r  z%GraphModuleSerializer.serialize_inputF  s\   00 ''#

 c588==)vv#!#**c222syy66

CdELL1(Y   ehh&:&:;..0 ; $ 4 4T :;#??!.CJJe!L  $Z((,BB #*$t"DK!(|T!BJ&2T4TT2%1R3RR1#??}Aj\5RSS(8LQUVZQ[P\]  $$S)-44SXXF  &&s+!1!8!8!J  %%c* / 6 6sxx H  CHHUOR-A-AB"3 XX%1J1J# 
 T999!99#((C
Z1PQQSXX1NOO45
 ||~H'F)FF'??^-JKK[889 ||~H'F)FF'&&(G668I)0DX&??1B8Y1WXXU\\*
 ??n.C.CCPSH.UVVU^^,
 ??-44SXF  #Y$??3//#Y#??S11#Y#??#..#Y%??C00#Y'!??'SXXCHHE  [??400T" O!iik C
U!#s+(+J4PS9+)VWW'+';';E'B$C ??IIdE]+3x1}'!(E,>,>?#+#:#:#<%h??? ( 7 7 9I!)U-?-?@$-$<$<$>	!)U^^<';;#Iu}}='r::#Iu?'<<#Iu/?/?@'"==#Iu/?/?@'"== -/DYKu-UVV KKF
 $??b990C00S	::1S11tCy993s33c;;1S11$s)<<BcBB  GA!!U\\2n&;&;CF&KLaCn&;&;1&EF	G
  6::@C@@TW"Xq#3#:#:3q6#J"X  9S99 GA!!UXX]]3n&;&;AFF&KLaCn&;&;1&EF	G
  6::;s;; KA!!UXX]]3&6&=&=aff&MN#Au-&6&=&=q&IJ	K
  V<<:c:: IA!!UXX]]3o&<&<QVV&LM#At,o&<&<Q&GH	I
  F;;?3??	 BAttz),]  $$^%@AB  )<<MMMV  (,S1OQT-U(V  ISIIKNOaAJJL AO   OR V  (,S1OQT-U(V   QT   c4JT!W4JKK$<s=S!d1g=S<TU  U[[)??2KC2PQQU\\*??V-STTU001??!B3!G  U\\*??-G-LMMUXX223/OON3$7u => >  !-S1A1A-B,CDO03D_-		224I??/K  ejj33UZZ5S5STU??t/F/Fs/KLL -d3i[8NxjY U; ;j #Yr  P. 5K >Ts)   87&A@=!A@	A@1A@
7A@c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        |      S )NrA  )r  r8  r   rS   r   rE  r  s      rg   r  z-GraphModuleSerializer.serialize_tensor_outputf  sB    4++99999/DX/N&&t,4((rf   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S Nr;  )r  r9  r   rR   r   r  s      rg   r  z.GraphModuleSerializer.serialize_sym_int_outputk  sH    4++:::::0A(0K''-$$T22rf   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S r  )r  r;  r   rP   r   r  s      rg   serialize_sym_float_outputz0GraphModuleSerializer.serialize_sym_float_outputp  sH    4++<<<<<2Eh2O))$/&&t44rf   c                     || j                   j                  vsJ t        |      | j                   j                  |<   t        j                  |      S r  )r  r:  r   rL   r   r  s      rg   serialize_sym_bool_outputz/GraphModuleSerializer.serialize_sym_bool_outputu  sH    4++;;;;;1CH1M((.%%d33rf   specc                 t   t         j                  d|       |j                  t        j                  j
                  k(  r$t        |j                  t        j                        rt        |j                  j                        t        u r,t        j                  |j                  j                        }n@t        |j                  j                        t        u r+t        j                  |j                  j                        }nt        |j                  j                        t        u r+t        j                  |j                  j                        }nt        |j                  j                        t         u r+t        j                  |j                  j                        }nP|j                  j                  t        j                  d      }n#t#        d|j                  j                   d	      t%        j                  t'        |j                  j(                  |
            S t%        j                  t+        | j-                  |j                                    S |j                  t        j                  j.                  k(  r}|j0                  J t        |j                  t        j2                        sJ t%        j                  t5        t3        |j                  j(                        |j0                              S |j                  t        j                  j6                  k(  r|j0                  J t        |j                  t        j2                        sJ |j8                  J t%        j                  t;        t3        |j                  j(                        |j0                  |j8                              S |j                  t        j                  j<                  k(  r}|j0                  J t        |j                  t        j2                        sJ t%        j                  t?        t3        |j                  j(                        |j0                              S |j                  t        j                  j@                  k(  r|j0                  J t        |j                  t        jB                        sJ t%        j                  tE        tC        |j                  j(                  |j                  jF                        |j0                              S |j                  t        j                  jH                  k(  rdt        |j                  t        jJ                        sJ t%        j                  tM        tK        |j                  j(                                    S tO        d|       )Nz[serialize_input_spec] %sr   r   r9  r   TrE  zUnhandled constant input z to serializerE  rl   )constant_inputr  )
user_inputrA  r  parameter_name)	parameter)r  buffer_name
persistent)r  )r  tensor_constant_name)tensor_constantr  )r  r  )
custom_objtokenUnknown argument kind: )(r  r  r  r  	InputKind
USER_INPUTrr   r  ConstantArgumentr   rl   r   r*   r   r   r%  r   ra   r4   r6   rE  rX   serialize_argument_spec	PARAMETERr0  rS   r9   BUFFERr  r5   CONSTANT_TENSORr:   
CUSTOM_OBJr+   r7   r  TOKENrU   r8   rn  )r   r  constant_specs      rg   serialize_input_specz*GraphModuleSerializer.serialize_input_specz  s   		-t499///$((B$7$78'3.$1$8$8$OM$((..)T1$1$8$8$PM$((..)S0$1$8$8488>>$RM$((..)U2$1$8$8$((..$QMXX^^+$1$8$8$FM(3DHHNN3C=Q  !''#;!XX]]-$  !'',1M1Mdhh1WX  YY",,000;;***dhh(9(9:::##.&DHHMM:#';;  YY",,---;;***dhh(9(9:::??...##(&DHHMM: $#  YY",,666;;***dhh(9(9:::## 9&DHHMM:)-!  YY",,111;;***dhh(<(<===##/)!XX]]dhh6H6H %)KK	  YY",,,,,dhh(8(8999##$%488==9  !#:4&!ABBrf   c                 	   t         j                  d|       |j                  t        j                  j
                  k(  r9t        j                  t        | j                  |j                                    S |j                  t        j                  j                  k(  rdt        |j                  t        j                        sJ t        j                  t        t        |j                  j                                    S |j                  t        j                  j                   k(  r}|j"                  J t        |j                  t        j                        sJ t        j                  t%        t        |j                  j                        |j"                              S |j                  t        j                  j&                  k(  r}|j"                  J t        |j                  t        j                        sJ t        j                  t)        t        |j                  j                        |j"                        	      S |j                  t        j                  j*                  k(  r}|j"                  J t        |j                  t        j                        sJ t        j                  t-        t        |j                  j                        |j"                        
      S |j                  t        j                  j.                  k(  r}|j"                  J t        |j                  t        j                        sJ t        j                  t1        t        |j                  j                        |j"                              S |j                  t        j                  j2                  k(  r}|j"                  J t        |j                  t        j                        sJ t        j                  t5        t        |j                  j                        |j"                              S |j                  t        j                  j6                  k(  rdt        |j                  t        j8                        sJ t        j                  t;        t9        |j                  j                                    S t=        d|       )Nz[serialize_output_spec] %sr  )user_outputrA  )loss_output)r  r  )buffer_mutationr  )parameter_mutation)gradient_to_parameter)r  user_input_name)gradient_to_user_input)user_input_mutationr  r  )r  r  r  r  
OutputKindUSER_OUTPUTrD   r   rY   r  r  LOSS_OUTPUTrr   rS   r<   rE  BUFFER_MUTATIONr0  r(   PARAMETER_MUTATIONrF   GRADIENT_TO_PARAMETERr.   GRADIENT_TO_USER_INPUTr/   USER_INPUT_MUTATIONrW   r  rU   rE   rn  )r   r  s     rg   serialize_output_specz+GraphModuleSerializer.serialize_output_spec  sa   		.599111$$*t/K/KDHH/UV  YY"--333dhh(9(9:::$$*~488==/QR  YY"--777;;***dhh(9(9:::$$ 2&DHHMM: $!  YY"--:::;;***dhh(9(9:::$$#8&DHHMM:#';;$  YY"--===;;***dhh(9(9:::$$&=&DHHMM:#';;'  YY"-->>>;;***dhh(9(9:::$$'>&DHHMM:$(KK(  YY"--;;;;;***dhh(9(9:::$$$9&DHHMM:$(KK%  YY"-----dhh(8(8999$$%%488==9  !#:4&!ABBrf   sigc           	          t         j                  d       t        |j                  D cg c]  }| j	                  |       c}|j
                  D cg c]  }| j                  |       c}      S c c}w c c}w )Nz
[serialize_signature]input_specsoutput_specs)r  r  r3   r  r  r  r  )r   r  r   s      rg   serialize_signaturez)GraphModuleSerializer.serialize_signature	  s^    		+,?BO!2215OADAQAQRA$44Q7R
 	
ORs   A1A6
rn  c                    t        |t        j                        r*t        j                  t        |j
                              S t        |t        j                        r4t        j                  t        j                  |j
                              S t        |t        j                        r4t        j                  t        j                  |j
                              S t        |t        j                        r| j                  |j                        S t        |t        j                        r5t        j                  t        |j
                  |j                              S t        d      )	NrA  r  r;  r  r=  r  r  TODO)rr   r  rS   r&   r   rE  rR   rP   r  r  rl   r+   r  rn  r   rn  s     rg   r  z-GraphModuleSerializer.serialize_argument_spec  s    a**+??^-HII2,,-??n.C.CAFF.STT2../??0@0G0GPQPVPV0WXX2../''002//0??/QVVq{{S  !((rf   treespecc                 l     dt         j                  dd f fdt        |t              } |       |S )Ntsr   c           	      J   | j                   y | j                   t        u st        j                  | j                         rt        j                  | j
                     j                  }|j                  v rej                  |   j                  }|| j
                  j                  k7  r`t        d| j
                   d| j
                  j                   d| d      t        | j
                  j                        j                  |<   | j                         D ]
  } |        y )Nz%The given TreeSpec's namedtuple type z was found to have field names z6 but somehow previously was found to have field names r_  )field_names)r   r   pytreeis_namedtuple_classSUPPORTED_SERIALIZED_TYPEScontextserialized_type_namer  r  _fieldsra   rA   children)r  r  r  childr   store_namedtuple_fieldss       rg   r  zIGraphModuleSerializer.serialize_treespec.<locals>.store_namedtuple_fields#  s   wwww*$(B(B277(K'-'H'HJJ(&& % (4+J+JJ"&"A"A,#!k   #bjj&8&88,CBJJ< P==?ZZ=O=O<P QTT_S``ac  &"**2D2DE 334HI  /'./rf   )r  TreeSpecr   rV   )r   r  serialized_treespecr  s   `  @rg   serialize_treespecz(GraphModuleSerializer.serialize_treespec   s8    	/ 	/D 	/2 -X7GH)""rf   module_call_signaturec           	         t         j                  d|       t        |j                  D cg c]  }| j	                  |       c}|j
                  D cg c]  }| j	                  |       c}| j                  |j                        | j                  |j                        |j                  x}r|      S d       S c c}w c c}w )Nz$[serialize_module_call_signature] %sr5  r6  in_specout_specforward_arg_names)
r  r  r?   r5  r  r6  r  r  r  r  r   r  rn  namess       rg   serialize_module_call_signaturez5GraphModuleSerializer.serialize_module_call_signature@  s     			8:OP"9N9U9U45,,Q/ :O9V9V45,,Q/ ++,A,I,IJ,,-B-K-KL.@@@@ $
 	
 
 	
s   B<C
c           	          t         j                  d       |D cg c]@  }t        |j                  |j                  r| j                  |j                        nd       B c}S c c}w )Nz
[serialize_module_call_graph]fqnr  )r  r  r>   r  r  r  r   r  entrys      rg   serialize_module_call_graphz1GraphModuleSerializer.serialize_module_call_graphR  sa     			34 +

  II  88I

 
	
 

s   AA"c                 B   dt         dt        fd}|j                  dk(  r:t        |j                  t
        j                  j                  gt                     sJ t        |j                        }|j                  }t        |      dk(  rg S |j                  d   } ||j                        r_g }t        |      D ]8  \  }}| j                  ||      }	|j                  | j!                  |	|             : t#        j$                  |      gS t        |      dk(  r| j'                  |j(                  |      gS g }
t        t+        ||            D ]L  \  }\  }}|\t        |j,                  t
        j.                  t
        j0                  f      sJ |
j                  t#        j$                  d	
             ht        |t2              rjt        |j,                  t
        j.                  t
        j0                  f      sJ | j                  ||      }	|
j                  | j'                  |	|             t        |t4              rt        |j,                  t
        j6                        r2t        |j,                  j9                         t
        j0                        sJ | j;                  ||      }|J g }t        |      D ];  \  }}|	| j                  ||      }|j                  | j!                  ||             = |
j                  t#        j$                  |             t        |t<        t>        t@        tB        f      r5| j                  ||      }|
j                  | j'                  ||             'tE        dtG        |       d|jI                                 |
S )a5  For a given node, return the dataclass representing its output values.

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

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

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

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

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

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

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

 > >?667M7MNLD&001I1IJH.t.fmmo. ,a/ADDJ4F FFMM(+," ../14O33A6DO-JDQ  ''*4499   jj,,vtG $$_g>LL)UZZ**K-H-JK
 ,F3  ''*4499 
  226?KLD&jj,,vtG $$_g> fc* ,F83DEuvmn DD   !66Gr$v,WXYZ 
 	D55o6N6NOP		7LLNNLLNNLLU#	
 UYY^^22:::gll1o5s=xxdEMM2NN@@		G uyy~~BBJJJ,,q/&&u-C#u||,88G JJ77!5.0GLL*+ 6 8rf   r  c           	         t         j                  d|       |j                  dk(  rSt        j                  t        j
                  j                  | j                  |j                  j                        d       S |j                  dk(  rvt        j                  t        j
                  j                  t        j                  |j                  j                  j                        |j                  j                        S |j                  dk(  rt        j                  t        j
                  j                  t        j                  |j                   j                  j                        |j                   j"                  |j                   j$                        S |j                  dk(  rvt        j                  t        j
                  j&                  t        j                  |j(                  j                  j                        |j(                  j*                        S |j                  d	k(  rt        j                  t        j
                  j,                  t        j.                  |j0                  j                  j                  |j0                  j                  j2                  
      |j0                  j4                        S |j                  dk(  rbt        j                  t        j
                  j6                  t        j8                  |j:                  j                  j                        d       S |j                  dk(  r|t        j                  t        j
                  j                  t        j<                  |j>                  j                  | jA                  |j>                  jB                              d       S tE        d|       )Nz[deserialize_input_spec] %sr  r  r  r0  r  rA  r  )r  r  r0  r  r  r  r  r  r  r  zUnknown input spec )#r  r  r   r  r4   r  r  deserialize_argument_specr  r  r  rS   r  rE  r  r  r  r  r  r  r  r  r  r+   r  r  r  r  rU   r  r  r  deserialize_constant_inputrl   rn  )r   r  s     rg   deserialize_input_specz.GraphModuleDeserializer.deserialize_input_speck	  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!:;;rf   oc                    t         j                  d|       |j                  dk(  rSt        j                  t        j
                  j                  | j                  |j                  j                        d       S |j                  dk(  rbt        j                  t        j
                  j                  t        j                  |j                  j                  j                        d       S |j                  dk(  rvt        j                  t        j
                  j                  t        j                  |j                  j                  j                        |j                  j                         S |j                  dk(  rvt        j                  t        j
                  j"                  t        j                  |j$                  j                  j                        |j$                  j&                        S |j                  dk(  rvt        j                  t        j
                  j(                  t        j                  |j*                  j                  j                        |j*                  j&                        S |j                  d	k(  rvt        j                  t        j
                  j,                  t        j                  |j.                  j                  j                        |j.                  j0                        S |j                  d
k(  rvt        j                  t        j
                  j2                  t        j                  |j4                  j                  j                        |j4                  j0                        S |j                  dk(  rbt        j                  t        j
                  j6                  t        j8                  |j:                  j                  j                        d       S t=        d|       )Nz[deserialize_output_spec] %sr  r  r  rA  r  r  r  r  r  r  zUnknown output spec )r  r  r   r  rD   r  r  r  r  r  r  rS   r  rE  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rU   r  rn  )r   r  s     rg   deserialize_output_specz/GraphModuleDeserializer.deserialize_output_spec	  s   		0!466]"==]]..221==3D3DE 
 VV}$==]]..%%1==+<+<+A+AB 
 VV((==]]22%%1+<+<+@+@+E+EF((44 
 VV++==]]55%%1+?+?+C+C+H+HI++:: 
 VV..==]]88%%1+B+B+F+F+K+KL..== 
 VV//==]]99%%1+C+C+G+G+L+LM//?? 
 VV,,==]]66%%1+@+@+D+D+I+IJ,,<< 
 VVw==]](($$!''++*:*:;  !#7s!;<<rf   r  c           	      
   t         j                  d       t        j                  |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j                  |       c}      S c c}w c c}w )Nz
[deserialize_signature]r  )r  r  r  r  r  r  r  r  )r   r  r  r  s       rg   deserialize_signaturez-GraphModuleDeserializer.deserialize_signature	  sd    		-.&&ADQA44Q7QCFCSCSTa$66q9T
 	
QTs   A;B 
r2  serialized_state_dictr~   r   .r^  c           	      6   t         J | a 	 t        j                  d       t        j                  d      | _        t        dd| j
                        | _        i dt        j                  j                  j                  j                  dt        j                  j                  j                  j                  dt        j                  j                  j                  j                  d	t        j                  j                  j                  j                  d
t        j                  j                  j                  j                   dt        j                  j                  j                  j"                  dt        j                  j                  j                  j$                  dt        j                  j                  j                  j&                  dt        j                  j                  j                  j(                  dt        j                  j                  j                  j*                  dt        j                  j                  j                  j,                  dt        j                  j                  j                  j.                  dt        j                  j                  j                  j0                  dt        j                  j                  j                  j2                  dt        j                  j                  j                  j4                  dt        j                  j                  j                  j6                  dt        j                  j                  j                  j8                  t        j                  j                  j                  j:                  t        j                  j                  j                  j<                  t        j                  j                  j                  j>                  t        j                  j                  j                  j@                  t        j                  j                  j                  jB                  d| _"        i | _#        tI        |      | _%        | jM                  |jN                        | _'        i | _(        tS               | _*        d\  }}d tV        jX                  tV        jZ                  fD        \  }}	|r|j]                         D ]  \  }
}|j^                  }t        j`                  tc        |td               |jf                        | jP                  |
<   |
ji                  |      r$tk        |
tm        |      d        }to        ||      }|
ji                  |	      stk        |
tm        |	      d        }to        ||      } tq        |dz         D ]!  }| j
                  xjr                  dz  c_9        # tq        |dz         D ]!  }| j
                  xjt                  dz  c_:        # |tm        |      dkD  rtI        |      | _;        nd | _;        | jy                  |jz                         t}        | jv                        5  | j                  |j                        }d d d        t        j                  | j                  | jz                        }i }|j                  j                  d      x}rt        j                  |      |d<   t        |d      r9i |d<   |j                  j]                         D ]  \  }}|j                  |d   |<    ||_K        t        j                  || jN                  | jF                  tI        |      | jJ                  | jv                        d a S # 1 sw Y   xY w# d a w xY w)Nz
[deserialize]T)assume_static_by_defaultF)allow_fallback_kernelsallow_non_fake_inputsr[  FloorDivModularIndexingWhere	PythonModModCleanDiv	CeilToInt
FloorToIntCeilDivLShiftRShiftPowByNaturalFloatPowFloatTrueDiv
IntTrueDiv!IsNonOverlappingAndDenseIndicatorTruncToFloat)
TruncToInt
RoundToIntRoundDecimalToFloatIdentity)r  c              3   .   K   | ]  }t         |     y wrj   )r   )rv   r   s     rg   rx   z6GraphModuleDeserializer.deserialize.<locals>.<genexpr>
  s      @"#
1@s   r$   r   r  r  )r  r  r  r;  r}   r~   r   )Nr   r  r  r   ShapeEnvr[  r   rx  rs   utils_sympy	functionsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rg  rW  r  r~   r  r  r^  r   rB  r   rZ  rY  rk   r)  r   r!  r   r*  r  r   r  maxrangeunbacked_symfloat_counterunbacked_symint_counterr   r  r  r   deserialize_module_call_graphr  r  _create_graph_module_for_exportr  rt  rp  r   r   rN  r  r  r  r^   r<  )r   r2  r  r~   r   r^  count_unbacked_symfloatcount_unbacked_symintunbacked_symfloat_prefixunbacked_symint_prefixrm   rb  r)  r  r  r  r  r  r  type_fieldss                        rg   deserializez#GraphModuleDeserializer.deserialize	  sC    %,,, $h	)II'(,55tTDN$2',&*..%D!
$
 EKK..88AA$ "5;;#5#5#?#?#O#O$ ++55;;$ U[[//99CC$ u{{))3377$ EKK..88AA$ U[[//99CC$ ekk00::EE$ 5;;--77??$ %++,,66==$ %++,,66==$   2 2 < < I I!$" EKK..88AA#$$  2 2 < < I I%$& ekk00::EE'$( 4U[[5G5G5Q5Q5s5s)$*  2 2 < < I I+$, $kk00::EE#kk00::EE % 2 2 < < I I ;;--77??!KK..88AA5$D 8 CED&7	BDN!77'11DN )+D% %(ED!=C:#%:@(,(;(;T=N=N'O@<$&< $1779 
NEArHHE3B3N3N)%&92884D--a0 ||$<=#&>"?"A BC256Mq2Q/&<=#&<"="? @A034I10M-
N 2Q67 >88A=8>0145 <66!;6< )c..AA.E&@&P#&*#""#:#@#@A78K8KL $($F$F+==%! ==dkk4::VLD099==hGGvG!%F!3X.0LM5712 -GGMMOS @F@R@RD56u=	S
 !%L*11).."3!%!;!;56KL..#22 2  %)!5 4 %)!s,   U9^ C!^ '^D^ ^^ ^rE  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>  ra   rE  r  r?  )r   rE  r  s      rg   r  z$GraphModuleDeserializer.sync_fx_nodeS
  sg    4/// 5.T!UVV-4$$T*GLL((("::4@Urf   c                 ,     t         fd|D              S )Nc              3   T   K   | ]  }j                  |j                         ! y wrj   )r  r  )rv   inputr   s     rg   rx   zDGraphModuleDeserializer.deserialize_sym_op_inputs.<locals>.<genexpr>]
  s      K5T++EII6Ks   %()r   )r   r5  s   ` rg   r  z1GraphModuleDeserializer.deserialize_sym_op_inputs\
  s    KFKKKrf   c                 t   t        |      j                  }|j                  D ci c]  }|j                  |j                   }}|j                  D ci c](  }|j                  | j                  |j                        * }}g }t               }|D ]  }	|	j                  |v r||	j                     }
||	j                     }|t        j                  k(  r|j                  |
       U|t        j                  k(  r/t        j                  |	j                        s|
||	j                  <   |	j                          xr |	j                   }|r|j                  ||	j                            t        j                  |	j                        rn|	j                  rJ t!        |      dkD  r2t               }|j#                  t%        |j'                                      |j                  ||	j                            e|	j                  |v su||	j                     ||	j                  <    t)        |      |fS c c}w c c}w Nr   )r1  r  r5  rE  r  r  r  r   r'   r  rs  r  keyword	iskeywordhas_default_valuer   r  r&  r>  rm  r   )r   r0  r  schema_argsr  argument_kindsactual_argsr  r\  r#  r  r  is_positionals                rg   r  z*GraphModuleDeserializer.deserialize_inputs_
  s   -f5??>M>T>TUU%**ejj0UU )//
 JJ..uyy99
 
 (3% 	KJ+-!*//2%joo6<222KK$\111':K:KOO; /2F:??+ 0022P:;P;P7P  K
89"":??3%0000v;?(]FKKV]]_ 56K
89??k1.9*//.JF:??+7	K8 T{F""G V
s   H0-H5r5  c                     g }i }|D ]d  }|j                   dk7  r)| j                  |j                        ||j                   <   ;|j                  | j                  |j                               f t	        |      |fS )zO
        For deserializing HOO inputs since HOOs do not have a schema.
        r%  )rE  r  r  rs  r   )r   r5  r  r\  r  s        rg   r  z.GraphModuleDeserializer.deserialize_hoo_inputs
  st      	@F{{b &*&<&<VZZ&Hv{{#D226::>?		@
 dV$$rf   inpc                 f    j                   }j                  }|dk(  ry |dk(  r# j                  j                  j                     S |dk(  rt
        j                     S |dk(  rt        j                     S |dk(  rt        j                     S |dk(  rt        |t              sJ  j                         5   j                  |j                         t!        j"                   j$                   j                        }d d d         j$                  j'                  |j                          j                  j)                  d|j                  |j                        S |d	k(  rt+        j,                        S |d
k(  rj.                  S |dk(  rj0                  S |dk(  rj2                  S |dk(  rj4                  S |dk(  r4t7        j8                  j:                  j8                  j<                        S |dk(  r j?                  j@                        S |dk(  r j?                  jB                        S |dk(  r j?                  jD                        S t        |tF              rF|dk(  r3|jI                         D ci c]  \  }}| jK                  |       c}}S tM        d|       t        |tN              rtQ        |      dk(  rg S |dk(  r(|D cg c]  } j                  |j                      }}|S |dv rtO        |      S |dk(  r|D 	cg c]  }	tS        |	       c}	S |dv r|D cg c]  } j?                  |       c}S |dk(  r fd}
tO        tU        |
|            S tM        d       |dk(  rhjV                  j                   j                  v r# j                  jV                  j                     S  jX                  jV                  j                     S |dk(  r j[                  j\                        S tM        d       # 1 sw Y   xY wc c}}w c c}w c c}	w c c}w )NrF  r  rq  rs  rt  r4  r3  rA  rr  r   r   r   r:  rD  r  r>  r@  rG  zUnknown dict type: r   r  )rI  rJ  rH  rK  rp  )rW  r]  rY  rd  c                     | j                   dk(  ry | j                   dk(  r#j                  | j                  j                     S t	        d       )NrF  r  Unhandled argument )r   r>  rl   rE  ra   )r'  r  r   s    rg    deserialize_optional_tensor_argszSGraphModuleDeserializer.deserialize_input.<locals>.deserialize_optional_tensor_args
  sJ    vv*#;.#;;AGGLLII,/B3%-HIIrf   r  r  rx  )/rl   r   r>  r  rE  r   rq  !_SERIALIZE_TO_TORCH_MEMORY_FORMATrs  _SERIALIZE_TO_TORCH_LAYOUTrt  rr   r1   rC  r  r  r  r  r  register_moduler  r   rr  r   r   r   r:  r  rD  rB  rC  deserialize_sym_argumentr  r>  r@  r  rk   r  ra   r>  r  r   r   r  r~   rM  rx  )r   r  rl   typ_	submodulerm   rn   r  resultdimsr  s   ``         rg   r  z)GraphModuleDeserializer.deserialize_input
  s   		xx9 [ //0B0BCC%%,S-?-?@@''4S5I5IJJ[ -cmm<<Ze]333'') X&&u{{3>>t{{DJJW	X KK''

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

ZZ *  
 [ %cmm44X::Z<<Y;;[ == \!3>>..0C0CDD\!00@@^#001A1ABB]"00AAt$..AFOA411!44OO$':4&%ABBt$5zQ	%LQRS$66sxx@RRKKE{"'056d66IIFKLs55c:LL..J C @%HII$':3%%@AA_$  %%)E)EE33C4E4E4J4JKK>>#"3"3"8"899]",,S__== #6se!<==IX X< P S 7Ls%   8AP=P P$P)-P.Pc                 `   |j                   dk(  rt        |j                        S |j                   dk(  rt        |j                        S |j                   dk(  rt        |j                        S |j                   dk(  rt        |j                        S |j                   dk(  ry t        d| d      )Nr   r   r:  r   rF  zUnhandled constant argument z to deserialize)
r   r   r   r   r   r%  r:  r   r   ra   )r   r  s     rg   r  z2GraphModuleDeserializer.deserialize_constant_input
  s    88xszz?"XX#&&XX$s}}%%XX"$$XX" #?uO!TUUrf   c                    t        |t              rC|j                  dk(  r|j                  S |j                  dk(  r| j                  |j
                     S t        |t              rC|j                  dk(  r|j                  S |j                  dk(  rl| j                  |j
                     S t        |t              rC|j                  dk(  r|j                  S |j                  dk(  r| j                  |j
                     S t        d|       )Nr   r<  r   r   z Unknown symbolic argument type: )rr   rR   r   r   r>  r<  rP   r   rL   r   ra   )r   sym_args     rg   r  z0GraphModuleDeserializer.deserialize_sym_argument
  s    g~.||x'~~%*33GOODD!12||z)'''*33GOODD1||y(&*33GOODD?yIJJrf   c                 j    | j                  |j                  d   j                  j                  |       y r  )r  r6  rl   r<  )r   r  r  s      rg   r  z2GraphModuleDeserializer.deserialize_sym_op_outputs
  s)    /11!4::BBGLrf   c                     t        |j                        dk(  ry t        |j                        dk(  rEd|j                  v r7t        |dd      s*|j                  d   j                  dk7  r fd} |||      S t        |j                        dk(  rP|j                  d   j                  dk(  r4 j                  |j                  d   j                  j                  |       y t        |j                        dk(  rft        |j                  d   j                  t        t        t        f      r4 j                  |j                  d   j                  j                  |       y t        |j                        dk(  rc|j                  d   j                  dk(  rGd |j                  d	<   |j                   j                   j#                  |j                         d
       y  j%                  ||       y )Nr   r$   ztorch.ops.higher_orderr  TrF  c                    g }d }| j                   d   j                  dk(  r| j                   d   j                  }nKt        | j                   d   j                  t
        t        t        f      r| j                   d   j                  }j                  | j                        }|J j                  |||d|       t        |      |j                  d<   |j                  |j                  <   y )Nr   r  r  )r6  r   r  rr   rl   rR   rL   rP   r  rt  generate_getitemr   r  r>  rE  )r  r  r  r  deserialized_metadatar   s        rg   #_deserialize_hop_with_single_returnzXGraphModuleDeserializer.deserialize_outputs.<locals>._deserialize_hop_with_single_return  s    &("**1-22kA)11!4>>C#++A.44#_6FG *11!4::C(,(A(A#,,)% &%%haAVW&+HoU#=D,,W\\:rf   r  r  _unused)r  r6  r0  rO  r   r  r  rE  rr   rl   rR   rL   rP   r<  r  _renamer  _target_to_strdeserialize_multiple_outputs)r   r  r  r  s   `   rg   r  z+GraphModuleDeserializer.deserialize_outputs  s   &&'1, ''(A-(O,B,BBO-JDQ''*//9<( 7PP ''(A-''*//;>o55a8BBGGQ(()Q.:##A&,,_.>?4
 o55a8>>FFP''(A-''*//9< #'GLLOOtzz88HIQR))/7Crf   r  r  r  c                    t        |t              r|j                  }nQt        |t              r|j                  }n4t        |t
              r|j                  }nt        dt        |             | j                  j                  dt        j                  ||f|      }| j                  ||       |j                  | j                  |          |j                  j!                  |       y )Nz+generate_getitem got unknown argument type r  rA  )rr   rS   rE  rR   r<  rP   rn  r   r  r  r  r  r  rs  r?  r  r   )r   r  r  r  r  r  rE  individual_outputs           rg   r  z(GraphModuleDeserializer.generate_getitemF  s     c>*88D^,;;D-.;;D =d3i[I  !JJ22cN	 3 
 	$ 1244T:; 	%%&;<rf   c                 V   t        |      D ]  \  }}t        |t        t        t        f      r| j                  |||||       8t        |t              sJ |j                  dv r | j                  |||j                  ||       x|j                  dv r| j                  j                  dt        j                  ||f      }|j                  g        | j                  |d   ||j                  |       |j                  j!                  |       |d   |j                  d<   |j                  dk(  rl| j                  j                  dt        j                  ||fd      }|j                  d        d |j                  d<   |j                  j!                  |       t#        d|        y )	N)r  r  r>  )r  rW  rY  rI  rJ  rK  rH  r]  r  r  r  rF  rA  z Unimplemented node output type: )r  rr   rS   rR   rP   r  r&   r   rl   r  r  r  r  rs  generate_getitemsr  r   NotImplementedError)	r   r  r  r  r  r  r  list_outputr  s	            rg   r  z)GraphModuleDeserializer.generate_getitemsd  s    "$ ,	THC#@PQR%%gsC1F c8,,,xxFF%%gsyy#7L  	 	 #jj44#$$cN
 #&&RL+syy:O   ''(=>*22,  'Y&$(JJ$:$:#$$cN"	 %; %! %04!&&u-!&&--.CD),LSE*RSSY,	Trf   c                    | j                  |j                        }g }t        |j                        dk(  rt	        |j                  d   j
                  t              sJ t	        |j                  d   j
                  d   t              sJ | j                  |||j                  d   j                  |       n| j                  |||j                  |       t        |      |j                  d<   || j                  |j                  <   y )Nr$   r   r  )r  rt  r  r6  rr   rl   r>  rS   r  r  r   r  r>  rE  )r   r  r  r  r  s        rg   r
  z4GraphModuleDeserializer.deserialize_multiple_outputs  s     !% 9 9/:R:R S !&&'1,o55a8>>EEEo55a8>>qA>RRR""''*55%	 ""'?#:#:<Q
 $HoU5<$$W\\2rf   rt  c                 d    i }|j                  d      x}r||d<   dt        f fd}|j                  d      x}r3d d t        fd|j                  t              D              }||d<   |j                  d      x}rNg }|j                  t              D ]/  }	|	j                  d	      \  }
}|j                  |
 ||      f       1 ||d<   |j                  d
      x}r!t        |j                  t                    |d
<   |j                  d      x}rt        j                  |      |d<   |S )Nr  rD  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"   rs   r$   )r  rs   r   rF  rM  rN  rO  )rD  r  rL  r0  rE  r   s        rg   deserialize_meta_funczKGraphModuleDeserializer.deserialize_metadata.<locals>.deserialize_meta_func  s    F ++J7*;*A*A#*Fqr*J'"--g6*;*A*A#*Fqr*J'001BCCF/ 3vt,,,$VT2F	3
 Mrf   r  c                     | ||ffS rj   re   )r  r  r   s      rg   import_nn_module_stackzLGraphModuleDeserializer.deserialize_metadata.<locals>.import_nn_module_stack  s    T2J&rf   c                     g }d\  }}d\  }}t        |       D ]>  \  }}||v r|dz  }||v r|dz  }|dk(  s |dk(  s&|j                  | ||        |dz   }@ |j                  | |d         t        |      dk(  sJ |S )N)r   r   )z[(z)]r$   r  r      )r  rs  r  )rt  r   startr4  r'  rH  endcs           rg   metadata_splitzDGraphModuleDeserializer.deserialize_metadata.<locals>.metadata_split  s    q!1'1 (FCAvQaQca1f

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

8EF+,3x1}$}
rf   c              3   4   K   | ]  }  |         y wrj   re   )rv   r  r  r  s     rg   rx   z?GraphModuleDeserializer.deserialize_metadata.<locals>.<genexpr>  s#      # 't(<=#s   r  r  r  r  )	rp  r%  r  rF  r  rs  r   r   r   )r   rt  r  r  r  nn_module_stack_strr  source_fn_st_strr	  source_fn_strrE  
target_strtorch_fn_str
custom_strr  r  s   `             @@rg   r  z,GraphModuleDeserializer.deserialize_metadata  sO    ",,}55;5!,C	S 	& #+,,/@"AAA'  # #/55lC# O &5C!"'||,=>>>L!1!7!7!E O#0#6#6s#; j##T+@+L$MNO &2C!"#<<
33<3#L$6$6|$DEC
O!h//:/ JJz2CM
rf   rn  c                 b   t         j                  d|       |j                  dk(  r*t        j                  |j
                  j                        S |j                  dk(  r*t        j                  |j                  j                        S |j                  dk(  r*t        j                  |j                  j                        S |j                  dk(  r:t        j                  |j                  j                  | j                  |            S t        j                  d| j                  |            S )	Nz[deserialize_argument_spec] %sr  rA  r  r>  r  r  r%  )r  r  r   r  rS   r  rE  rR   r  r<  rP   r>  r  r  r  r  s     rg   r  z1GraphModuleDeserializer.deserialize_argument_spec  s    		2A666[ $$!++*:*:;;VV|#$$!,,*>*>??VV~%&&ANN,B,BCCVV&&&__))1G1G1J  &&Bd6L6LQ6OPPrf   r  c           	      \   t        j                  |j                  D cg c]  }| j                  |       c}|j                  D cg c]  }| j                  |       c}t        |j                        t        |j                        |j                  x}r|      S d       S c c}w c c}w )Nr  )	r  r?   r5  r  r6  r   r  r  r  r  s       rg   !deserialize_module_call_signaturez9GraphModuleDeserializer.deserialize_module_call_signature
  s     %%;P;W;W67..q1 <Q;X;X67..q1 ##8#@#@A#$9$B$BC.@@@@ $
 	
 
 	
s   B$B)
r  c           	          t         j                  d       |D cg c]J  }t        j                  |j                  |j
                  r| j                  |j
                        nd       L c}S c c}w )Nz 
[deserialize_module_call_graph]r  )r  r  r  r>   r  r  r&  r  s      rg   r  z5GraphModuleDeserializer.deserialize_module_call_graph  sg     			56 +

  II  ::5??K

 
	
 

s   AA,)r   Nrj   )NN)Srb   rc   rd   dataclassesr
   r<  r   r	   r   rC  r%  rI  rM  r   r   r   r   r   r   re  rV  rQ   rs   rl  rO   ro  rK   rr  rT   r   r   r+   r  r{  r  rB   r}  r0   r  r   r  r4   r  rD   r  r3   r  r  r2   r  r  r   r   r   r   r   r  r  r  r  r>  r@   r  r&   r  r*   r  r  r  r  rS   rR   rP   r  r  r
  r  r  r  r?   r&  r>   r  re   rf   rg   r^   r^     si   R R R( 8D>  0- -c 4 HL/-/-#+E#tU2B,C#D/-	/-bV c5<<6G0H &x E%:O4P g %emm8K2L  
 
0
			
P(5PSAS;T2U P(u% uEHHNN unt1 t1h t14 t1l3<	 3<bll 3<j3= 3= 3=j
 
B<S<S 
 QUu)!,u)  %T#u||*;%<e%CDu) c3h./	u)
 !%ellC/0$sCx.@A5HI
u) 'tC1L1L,L'MNu) 
u)nA Auxx}} AL%#$ %#N%T--@ %U>X U># U>nVm V VK$M$ M M7D4 7D%((-- 7Dr= = >>3CCD	=
 =  $CH~=<3T 3T
  $CH~3Tj=#=.3hhmm=	=<BT#s(^ BS#X BHQ8 Q Q
%8
			
"
!%o!6
	b  	!
rf   c                   d   e Zd Zddeeeef      fdZdeeej                  f   deee
j                  f   dee
j                  e	f   fdZ	 ddd	d
edeeeej                   f   ef   deeeej                   f   ef   deeeeej                   df   eeef   f   ef      dej                  f
dZy)r_   Nexpected_opset_versionc                     i | _         |r| j                   j                  |       d| j                   vr,t        j                  j	                         | j                   d<   y y r  )r*  r   rs   r  r!  )r   r*  s     rg   r   z$ExportedProgramDeserializer.__init__.  sR    68#!''../EF44427((2T2T2VD''/ 5rf   r^  rW  r   c                     t         j                  d       i }|j                         D ]K  \  }}|j                  |      x}rt         j                  d||       |||<   6t         j	                  d|       M |S )Nz 
[deserialize_range_constraints]z([deserialize_range_constraints] %s -> %sz;Symbol %s did not appear in the graph that was deserialized)r  r  rk   rp  r  )r   r^  rW  r'  rm   rn   symbols          rg   deserialize_range_constraintsz9ExportedProgramDeserializer.deserialize_range_constraints5  s    
 			56(..0 	DAq.22155v5		DaK,-!&)QST	 ! rf   F_unsafe_skip_version_checkr|   r}   r~   r   .c                   t        |t              sJ |j                  }|j                  t        d   k7  r@|j                  dk(  r|j
                  dk(  s"|s t        d|j                   dt         d      |j                  j                         D ci c]M  \  }}|t        j                  t        |j                  t               t        |j                  t                    O }	}}t               j!                  |j"                  ||||	      }
| j%                  |	|
j&                        }t)        j                  |
j"                  |
j"                  j*                  |
j,                  |
j.                  ||
j0                  |
j2                  |
j4                  |j6                  D cg c]  }t9        |       c}	      }|j:                  |_        t>        jA                  d|       |S c c}}w c c}w )Nr   zSerialized schema version z+ does not match our current schema version r_  )	rootr  r  r}   r'  r  r   r~   r'  z
[deserialize]: %s)!rr   r-   r&  r#  rI   r$  ra   r'  rk   r   r   r!  min_valr   max_valr^   r  r  r.  r;  r  r  r  r}   r  r   r~   r'  r   r)  r/  r  r  )r   r|   r}   r~   r   r0  versionrm   rn   r^  resr'  r  s                rg   r  z'ExportedProgramDeserializer.deserializeF  s    *O<<<"11 ==N1--MMQ7==A#5-$01A1P1P0Q RAAO@PPQS  )::@@B 

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

 4 Bs   1E-&E2 E7r!  c                 j    t        j                  t        |       t        d      j	                  d      S )NF)r   	allow_nanr   )r   r   r   r   r   )r!  s    rg   _to_json_bytesrH    s+    ::(-;%PWW rf   r|   r  c                 J   t        | j                        5  t        ||      j                  |       }d d d        t	        j
                  t              sJ t        |j
                        }t        ||j                  |j                  |j                        }|S # 1 sw Y   hxY wrj   )r   r   r]   r[   rr   r|   r-   rH  r{   r}   r~   )r|   r  r   serialized_program
json_bytesr   s         rg   r[   r[     s    
 
00@0O0O	P &6?

)$
% 	& (99?KKK 2 C CDJ!%%$$))	H O& &s   BB"c                     t        | t              rt        t        | d       }||S t        | t        j
                        rt        | j                        S | S rj   )rr   r%  rO  r%   typing
ForwardRef_resolve_schema_cls__forward_arg__)r   resolveds     rg   rO  rO    sK    #s63-O#v(()"3#6#677Jrf   c           	         t        |       } t        | t              rJ d|  d       t        j                  |       t
        u rt        | j                  |      S t        j                  |       t        j                  k(  rWt        d       t        j                  |       v r7|y t        j                  |       }t        |      dk(  sJ t        |d   |      S t        | t              rt        | t              rt        |t              sJ t        |      dk(  sJ t        t!        |j#                                     }t        t!        |j%                                     }t        |t              sJ t        j&                  | t)        t*                    }||   } | j,                  di |t        ||      iS t/        j0                  |       rpi }t        j&                  | t)        t*                    }t/        j2                  |       D ]*  }|j4                  }	|	|vrt        ||	   ||	         }
|
||	<   ,  | di |S t        |t6              rBt        |      dk(  r|S t        j                  |       d   }|D cg c]  }t        ||       c}S t        |t              rFt        j                  |       d   }|j9                         D ci c]  \  }}|t        ||       c}}S | t:        u rt;        |      S |S c c}w c c}}w )NzUnresolved class type: 'z'.r"   r   r$   )globalnsre   )rO  rr   r%  rM  
get_originr   r   
__origin__r   r   get_argsr  
issubclassrZ   r  rk  rl  rj  rm  get_type_hintsvarsr%   r   r(  rC  r  rE  r>  rk   r   )r   dataty_argsr  _value
type_hints
field_typer  rE  rE  new_field_objd_typerh   v_typerm   rn   s                   rg   r   r     s   
c
"C#s#G'?uB%GG#*!#..$77-$t*PS@T2T<//#&7|q   !'!*d33	C	:c6#:$%%%4yA~~T$))+&'d4;;=)*%%%%**3fF
&
szzLU$6z6$JKLL		!	!#	&**3fF
 ##C( 	)A66D4.z$/?dLM(F4L	) }V}	D$	t9>K%a(7;<!"61-<<	D$	%a(=AZZ\JTQ%fa00JJ	T{K = Ks   5K6K;r   artifact_bytesc                 j    |j                  d      }t        j                  |      }t        | |      }|S r9  )r   r   r   r   )r   rb  artifact_strartifact_dictartifact_dataclasss        rg   _bytes_to_dataclassrg    s3    !((1LJJ|,M+C?rf   Fr/  r*  c                    t        | j                  t              sJ t        t        | j                        }t        |      j                  || j                  | j                  | j                  |      S )Nr/  )
rr   r|   r   rg  r-   r_   r  r}   r~   r   )r   r*  r0  serialized_exported_programs       rg   r  r    sr     h//777"522# ''=>JJ##= K  rf   c                 $    dt         fdfd fd} |j                        }t        |      t        j                        k(  sJ i fd}fd} D ]  } ||        |D ]  }	|	j                  D ]  }
 ||
         |D ]&  }	|	j                  D ]  } ||j
                          ( |D ]  }
 ||
        |D ]  }	|	j                  j                           t        t        j                  j                         t        j                  d                  }t        t        j                  j                         t        j                  d                  }t        t        j                  j                         t        j                  d                  }t        t        j                   j                         t        j                  d                  }t        t        j"                  j                         t        j                  d                  }d}|D ]  }|j                  D ]  }|j
                  }|j$                  d	k(  st'        |j(                  j*                  j                  |j(                  j*                  j                  |j(                  j*                        \  |j(                  _        }d
| |j(                  _        |dz  }  t/         ||||||j0                  |	      fS )Nr'  c                 z   | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   d	k(  ry | j                   d
k(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  r| j
                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  r| j                  S | j                   dk(  r| j                  S | j                   dk(  ry | j                   dk(  ry | j                   dk(  ry t        d|        )NrF  r  r  r   rI  r   rJ  r:  rK  rD  r  rW  r>  rY  rq  rs  rt  rr  r   rH  r@  r]  r4  rd  r  rx  rp  rG  z+Unknown input type to the ExportedProgram: )r   r  r  r  rW  r>  rY  r@  r]  rd  r  rn  rb  s    rg   _get_argumentz*_canonicalize_graph.<locals>._get_argument  s   66YVV{";;VV|#<<VVxVVy VVz!VV{"VV{"VV|#VV|#VV|#<<VV}$== VV~%>>!VV&??"VV''VV))VV{"VV{"VVy VVz!VV}$== VV~%>>!VVz!VV,,(((VV&??"VV}$VV~%VV.. #Nqc!RSSrf   c                 b    t        |t              sJ t        j                  |  |             y rj   )rr   r&   r  tree_map)rE  r'  rl  s     rg   for_argsz%_canonicalize_graph.<locals>.for_argsR  s&    !X&&&=+,rf   c                 0    t          G d d             }t               i i g i g }dt        t           fdD ]  }fd} ||        t	               D ]2  \  }fd}|j
                  D ]  } ||         |g d      <   4 t	               D ]3  \  }fd}	|j                  D ]  } |	|j                          5 fd	}
fd
D ]  } |
|        dt        f fd}j                         D ]  \  }|j                  dk(  s |        t              dkD  rt        j                        \  }}    }|j
                  D ]  } |
|        |j                  |       v sJ    j                  D ]E  }|   }|j                  dkD  sJ |xj                  dz  c_
        |j                  dk(  s> ||       G    j                  j!                          t              dkD  r|S )Nc                   (    e Zd ZU ee   ed<   eed<   y)6_canonicalize_graph.<locals>.sort_nodes.<locals>.EdgesoutsinsN)rb   rc   rd   r>  r   r   re   rf   rg   Edgesrr  W  s    s)OHrf   ru  r   c                    | y t        | t              r| j                  S t        | t        t        t
        f      r8| j                  dk(  r| j                  S | j                  dv ry t        d|        t        | t              rC| j                  dk(  r| j                  j                  S | j                  dk(  ry t        d|        t        | t              r| j                  S t        d|        )Nr<  )r   r   r   Unknown argument type: r  rF  zUnknown optional tensor type: )rr   rS   rE  rR   rL   rP   r   r<  rn  rC   r  r+   rb  s    rg   rj  z9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_namec  s    y!^,vvAAQRS66Y&99$VV@@(+B1#)FGGA5666[(;;+++VVy((+I!)MNNA01vv$'>qc%BCCrf   c                 >     |       x}rj                  |       y y rj   )r   )r'  r   rj  graph_inputss     rg   	add_inputz:_canonicalize_graph.<locals>.sort_nodes.<locals>.add_input}  s%     #1# $$Q' $rf   c                 2     |       x}r|vsJ |<   y y rj   re   )r'  r   	def_tablerj  r  s     rg   add_defz8_canonicalize_graph.<locals>.sort_nodes.<locals>.add_def  s.     #1#I---#&IaL $rf   r   c                      |       x}rL|v ry |vr|v sJ y |   }|   j                   j                            xj                  dz  c_        y y )Nr$   )rs  rs  rt  )	r'  r   srcr~   r|  edgesrj  ry  r  s	      rg   add_edgez9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_edge  sk     #1#I~	) L000#A,C#JOO**3/#JNNa'N $rf   c                 D     |       x}r|vsJ t              |<   y y rj   )r  )r'  r   rj  ranks     rg   add_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_rank  s0    QKq}$}d)Q  rf   c                 ,     |       }|r	|vr|   S y)Nr  re   )r'  r   r~   rj  r  s     rg   get_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_rank  s"    AQi'Awrf   r  c                     fd}|    }|j                   D cg c]   }|j                   ||j                        f" }}t        j                  |j
                  || f       y c c}w )Nc                 (    g  fd|        S )Nc                 2    j                   |             S rj   )rs  )rn  r  rankss    rg   r  zc_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks.<locals>.<lambda>  s    5<<#< rf   re   )r  r  ro  r  s    @rg   	get_rankszQ_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks  s    <a@rf   )r5  rE  r  heapqheappushr0  )	r  r  r   r'  	args_rank
candidatesro  r  r7  s	        rg   add_candidatez>_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate  s[    
 :D=A[[I!&&)AEE"23IIINN:Y'DE Js   %A&r$   )r
   r   r   r%  r  r6  r5  r  r   rk   rt  r  r  heappoprs  rs  clear)r7  ru  r  r  rz  r   r}  r  r  r  r  r  r  r  r  r|  r  rj  r  ry  r  r  r~   ro  sorted_inputss   `             @@@@@@@@rg   
sort_nodesz'_canonicalize_graph.<locals>.sort_nodesV  sI   		 	 
	 "%$&	"$IK
!	D8C= 	D0  	#A( Y"	# #5) 
	&IC'
 \\ %!$% r1E#J
	& #5) 	*IC	( 	( [[ *155)*	* 	$
	  	"AXq!	"	Fs 	F 	F kkm 	#FCuuzc"	# *o!j1IAq#:D\\ &1%&JJt%<<c
 ($Kuuqy y
55A:!$'( #JOO!!# *o! 
rf   c                    fd}| y t        | t              r# || j                  j                        | _        y t        | t              r3| j
                  dk(  r# || j                  j                        | _        y y t        | t              r3| j
                  dk(  r# || j                  j                        | _        y y t        | t              r3| j
                  dk(  r# || j                  j                        | _        y y t        | t              r# || j                  j                        | _        y t        d|        )Nc                 n    dt               }| vsJ || <   | |v sJ |j                  |       ||<   |S )Nr  )r  pop)r  rm  new_name
name_tables      rg   r  z8_canonicalize_graph.<locals>.rename_def.<locals>._rename  sR    3z?+,H:---#+Jx v%%%%zz(3F8Orf   r<  rw  )rr   rS   rE  r8  rR   r   r<  r9  rP   r;  rL   r:  r+   r=  rn  )r'  r  r  r  s     rg   
rename_defz'_canonicalize_graph.<locals>.rename_def  s   	 9a(QVVU%8%89AF>*vv"#AIIu/C/CD	 #+,vv"#AIIu/E/EF	 #?+vv"#AIIu/D/DE	 #,-QVVU%<%<=AF #:1#!>??rf   c                 &   | y t        | t              r,j                  | j                  | j                        | _        y t        | t        t
        f      r<| j                  dk(  r,j                  | j                  | j                        | _        y y t        | t              r<| j                  dk(  r,j                  | j                  | j                        | _        y y t        | t              rZ| j                  dk(  rJj                  | j                  j                  | j                  j                        | j                  _        y y t        | t              r,j                  | j                  | j                        | _        y t        d|        )Nr<  r  rw  )rr   rS   rp  rE  rR   rP   r   r<  rL   rC   r  r+   rn  )r'  r  s    rg   replace_usez(_canonicalize_graph.<locals>.replace_use  s   9a(^^AFFAFF3AFN,<=>vv"&NN199aii@	 #?+vv"&NN199aii@	 #12vv$#->>!++2B2BAKKDTDT#U  %,-^^AFFAFF3AF #:1#!>??rf   r   r  r4  _gr$   )	r5  r6  r7  r8  r9  r;  r:  r<  r=  )r&   r7  r  r6  r5  r  rt  r  r  sortedr8  rk   r  
itemgetterr9  r;  r:  r=  r   _canonicalize_graphr4  r  rE  r0   r<  )r  sorted_outputsr  r~   r  sorted_nodesr  r  r  r4  r  sorted_tensor_valuessorted_sym_int_valuessorted_sym_float_valuessorted_sym_bool_valuessorted_custom_obj_valuescounterr   r'  r  rl  ro  r  s   ` ``                @@@rg   r  r    s   :T :Tz-un ekk*L|EKK 0000 "$J@6@&   Q   $ 	$AZ#	$$  ) 	)A[!%%(	))  !a !  	

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

 ! %'wi.

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

    This function canonicalizes an ExportedProgram by:

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

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

    Returns:
        ExportedProgram: The canonicalized exported program.
    r   r  c                     | j                   S rj   )r  )rn  s    rg   r  zcanonicalize.<locals>.<lambda>e  s    PQPUPU rf   r   c                 2   | \  }\  }}t        |t              sJ |j                  dk(  rdd |fS |j                  dk(  rd|j                  j                  |fS |j                  dk(  rd|j
                  j                  |fS |j                  dk(  rd|j                  j                  |fS |j                  d	k(  rd
|j                  j                  |fS |j                  dk(  rdd |fS |j                  dk(  rd|j                  j                  |fS t        d|       )Nr     r  r$   r  r"   r  r  r     r  r   r     Unknown input type: )rr   r4   r   r  r  r  r  r  r  r  r  r  rE  rn  )r  r  _argr  s       rg   
rank_inputz canonicalize.<locals>.rank_inputl  s   \dD$	***99$dC<YY+%dnn33S88YY("dkk--s22YY++d**??DDYY,&doo55s::YY'!dC<YY**d))..33 #7v!>??rf   c                 
   | \  }\  }}t        |t              sJ |j                  dk(  rdd |fS |j                  dk(  rdd |fS |j                  dk(  rd|j                  j                  |fS |j                  dk(  rd|j
                  j                  |fS |j                  dk(  rd	|j                  j                  |fS |j                  d
k(  rdd |fS |j                  dk(  rdd |fS |j                  dk(  rdd |fS t        d|       )Nr  r  r  r  r$   r  r"   r  r  r  r  r  r  r  r   Unknown output type: )	rr   rD   r   r  r  r  r  r  rn  )r   r  r  r  s       rg   rank_outputz!canonicalize.<locals>.rank_output  s   \dD$
+++99%dC<YY-'dC<YY..d--<<cAAYY++d**66;;YY11d00??DDYY22dC<YY//dC<YY'!dC< #8!?@@rf   c              3   &   K   | ]	  \  }}|  y wrj   re   rv   r  r  s      rg   rx   zcanonicalize.<locals>.<genexpr>  s     *Fa1*F   re   c              3   &   K   | ]	  \  }}|  y wrj   re   r  s      rg   rx   zcanonicalize.<locals>.<genexpr>  s     (EvsA(Er  c                    t        | t              sJ | j                  dk(  r| j                  j                  }|j                  dk(  r!|j
                  }|j                     |_        y |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_        y |j                  dk(  ry t        d|       |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_        y |j                  dk(  ry t        d	|       |j                  d
v ry t        d|       | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  r+| j                  j                  }|j                     |_        y | j                  dk(  ry t        d|        )Nr  r  r  r<  r   Unknown sym_int type: r>  r   Unknown sym_float type: )rF  r   r   r   r:  r  r  r  r  r  r  r  r  )rr   r4   r   r  r  r  rE  r  r<  rn  r>  r  r  r  r  r  )r  r  r   r   rE  t_custom_objtokreplace_tables          rg   replace_inputz#canonicalize.<locals>.replace_input  s#   $	***99$//%%Cxx;&MM&qvv.\)NN66Y& -aii 8AIVVx'(+A!)EFF^+$$66Y& -aii 8AIVVz)(+CA3)GHH   $';C5%ABBYY+%""A"166*AFYY("A"166*AFYY++$$((A"166*AFYY,&??..L -l.?.? @LYY'!**..C$SXX.CHYY** #7v!>??rf   c                 B   t        	t              sJ 	j                  dk(  r	j                  j                  }|j                  dk(  r!|j
                  }|j                     |_        y |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_        y |j                  dk(  ry t        d|       |j                  dk(  rN|j                  }|j                  dk(  r|j                     |_        y |j                  dk(  ry t        d	|       |j                  d
v ry t        d|       	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  r+	j                  j                  }|j                     |_        y 	j                  dk(  rI	j                  }|j                  j                     |j                  _        |j                      |_        y 	j                  dk(  rI	j"                  }|j                  j                     |j                  _        |j                      |_        y 	j                  dk(  r+	j$                  j                  }|j                     |_        y t        d	       )Nr  r  r  r<  r   r  r>  r   r  )rF  r   r   r   r:  r  r  r  r  r  r  r  r  r  )rr   rD   r   r  r  r  rE  r  r<  rn  r>  r  r  r  r  r  r  r  r  )
r   r  r   r   rE  gur  r  r  s
           rg   replace_outputz$canonicalize.<locals>.replace_output  s   $
+++99%""&&Cxx;&MM&qvv.\)NN66Y& -aii 8AIVVx'(+A!)EFF^+$$66Y& -aii 8AIVVz)(+CA3)GHHVV$';C5%ABBYY-'  $$A"166*AFYY++$$((A"166*AFYY..''++A"166*AFYY11**..A"166*AFYY22++A&quuzz2AEEJ -a.?.? @AYY//((A&quuzz2AEEJ -a.?.? @AYY'!**..C$SXX.CH #8!?@@rf   r  )r  r  r  r%  )"r,  deepcopyr   r  r  r  rk   r  r  r'  r)  r  r  r  r  r  r5  r  r6  r  r   r   r   r%  r  r  r  r-   r2   r3   r>  r&  r'  r(  )r  r~   r  r'  r)  r  r  r  r  r  
sorted_insr  r  sorted_outsr  r  sorted_graphr  r  r  r  s                      @@rg   r0  r0  F  s   , 
r	B#,suI 0 0 6 6 8h>Q>QRS>TUVMr##))+1D1DQ1GH (Kr@@oV))IOO!!Eu||I$9$9 ::::u}}Y%;%;!<<<<@5hsmS!89 @(AE#x}c"9: A, #ellI$9$9:;J :%(*F:*F%G"{#emmY%;%;<=;K $'(E(E#F NL"5~ui#L-5@n3Aj  d  t  $ -!,/ 0
 $+((,,&& rf   c                   |    e Zd ZdZedefd       Zedefd       Zedefd       Zede	j                  fd       Zy)	ExtensionHandlerz6
    Base class for handling extension operators.
    r   c                 2    t        | j                   d      )Nz  namespace() must be implementedr  r=  r   s    rg   r  zExtensionHandler.namespace2      !S]]O3S"TUUrf   c                 2    t        | j                   d      Nz op_name() must be implementedr  r   rw   s     rg   r  zExtensionHandler.to_op_name6      !S]]O3Q"RSSrf   rE  c                 2    t        | j                   d      r  r  )r   rE  s     rg   rH  zExtensionHandler.from_op_name:  r  rf   c                 2    t        | j                   d      )Nz  op_schema() must be implementedr  r  s     rg   r/  zExtensionHandler.op_schema>  r  rf   N)rb   rc   rd   r   classmethodr%  r  r  rH  rs   FunctionSchemar/  re   rf   rg   r  r  -  s     V# V V Ts T T T T T Ve22 V Vrf   r  op_typeextension_handlerc                 b   t        |t              sJ d| d       | t        vs
J |  d       t        | t              sJ | j
                  j                  d      s| j
                  j                  d      rJ |j                         t        vsJ |t        | <   |t        |j                         <   y)zJRegister custom de/serialization method for a node with non-standard type.zExpected ExtensionHandler, got r_  z is already registered.rs   builtinsN)	rW  r  r.  rr   r   rc   r  r  rG  )r  r  s     rg   register_extensionr  C  s    
 ')9: 
)*;)<A>: 11VgY>U3VV1gt$$$%%g.((4  &&(0IIII'8G$?P/99;<rf   c                  <    t        t        j                               S rj   )r   r.  rj  re   rf   rg   r  r  V  s    (--/00rf   r.  rG  rj   (!  r:  r,  r   r(  r  r  r  r   r  loggingr  r  rq  r  rM  collectionsr   r   collections.abcr   r   r   r   
contextlibr	   r
   r   enumr   r   r   r   r   r   r   r   rs   torch.export.exported_programexportr|   r  torch._export.non_strict_utilsr   torch._export.verifierr   torch._subclasses.fake_tensorr   r   torch.fx._symbolic_tracer   torch.fx.experimentalr   torch.utilsr   r  torch.utils._pytreer   r   torch.utils._sympy.numbersr   torch.utils._sympy.symbolr   r   torch.utils._sympy.value_rangesr   torch.utils._tracebackr    torch.utils._tritonr!   r  r#   r%  r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   unionrZ   __all__	getLoggerrb   r  r  ra   r  ro   r   r   r   MetaTyper7  r  uint8BYTEint8CHARuint16UINT16int16SHORTint32INTint64LONGfloat16HALFfloat32FLOATfloat64DOUBLE	complex32COMPLEXHALF	complex64COMPLEXFLOAT
complex128COMPLEXDOUBLEBOOLbfloat16BFLOAT16float8_e4m3fnFLOAT8E4M3FNfloat8_e5m2
FLOAT8E5M2float8_e4m3fnuzFLOAT8E4M3FNUZfloat8_e5m2fnuzFLOAT8E5M2FNUZr   r   
sparse_coo	SparseCoo
sparse_csr	SparseCsr
sparse_csc	SparseCsc
sparse_bsr	SparseBsr
sparse_bsc	SparseBsc_mkldnnstridedStridedr   r  contiguous_formatContiguousFormatchannels_lastChannelsLastchannels_last_3dChannelsLast3dpreserve_formatPreserveFormatr  r  eqnelegeltgtnegposand_or_truncsym_notmulr   subfloordivmodpowsym_int	sym_floatsym_itesym_maxsym_minsym_sqrttruedivr  anyr{   r   r   r   r   r   r   r   r   r   r   re  r   r   r   r   r  r   r   r   r   r   r   r  r%  r  r  r!  r   r&  r+  r1  r3  r   r@  rT  r  r  r\   r]   r^   r_   JSONEncoderr   r   rH  r[   rO  r   rg  r  r  r   r0  r  r  r  r.  rG  re   rf   rg   <module>rE     s	         	      	   / B B % (  ? ?   * * Q 0 D ; 1 ) > - 6 7 4 * 0 5 5 5 5 5 5 5 5 5 5 5 5 5 5l  g!	\ 	.DdO . 	LL		NN	MM	  	KK	JJ
 
LL*## 
KK!!	
 
KK 
KK 
MM:?? 
MM:## 
MM:$$ 
OOZ++ 
OOZ,, 
j.. 
JJ
 
NNJ'' 
00  
z,,!" 
:44#$ 
:44% , ))BC  
f&&	f&&	f&&	f&&	f&&	MM6>>	MM6>>  **DE  
\::	22	L77	<66	% ! %11R$S ! KKKKKKKKKKKKLLLLMMLLJJ	MMLLLLLLLLLL	MM	OO	MM	MM	MM	NNMM5< HxHH HH      #d #24& 4U\\ 4@HV, @sCx @F 0 FU38_ F)
 )u{{ )v # 
(E%,,u~~uzzQR (
sELL01 
f 
*
5!67 
H 
*	
%emm 34 	
 	
U\\ j  >B x 9: AGZ G!15$ 5L/sm/.1/
/0d38neCHou<=2?5:: ?s ?x} ?6
8C= 
ejj 
6u|| 6t 6	ELL+56		#
	A 	R 	R 	RCD CsEHHMM sl T
e T
 T
n& @
% @
 @
F 
 
 
D$ QE Q Qh$$"" $6   /32((DcN+  	*+\S % C  8<  %	 $T#s(^4
 &q
5$sCx. !qj	 :>dd$,SX$6ddNV V,Q#YQ,-Q&1 DF d3i.>)??@ E?A 4T*:%; ;< Arf   