
    `iuR                    >   U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZmZ d dlmZmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZm Z m!Z! d dl"Z"d dl#Z#d dl$m%c m&Z' d dl(m)Z) d d	l*m+Z+ d d
l,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z5 d dl6m7Z7m8Z8 d dl9m:Z: d dl;m<Z<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZC ddlDmEZE ddlFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZz ddl{m|Z| g dZ} e	j~        e          Z G d de          Zdeeef         fdZe!e-ee#jr        ee#jp        ee#jl        e'jL        f         ZdZdZi e#j        eij        e#j        eij        e#j        eij        e#j        eij        e#j        eij        e#j        eij        e#j        eij        e#j        eij        e#j        eij        e#j        eij        e#j        eij        e#j        eij        e#j        eij        e#j        eij        e#j        eij        e#j        eij        e#j        eij        e#j        eij        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        iZ ee          Ze#j        e^j        e#j        e^j        e#j        e^j        e#j        e^j        iZ eeǦ          Zej        ej        ej        ej        ej        ej        ej        ej        ej        ej        e
j        e#j        ej        ej        ej        ej        ej        ej        e#j        e#j        e#j        e#j        e#j        e#j        ej        ej        hZ ed eD                       rJ e G d  d!                      Ze G d" d#                      Z G d$ d%e          ZdeMd&e#j        fd'Zd(eer         d&eed)f         fd*Zd+eer         d&eed)f         fd,Zd-eid&e#j        fd.Zd/erd&efd0Zd1e!e#jr        e#jl        e#jp        e"j        f         fd2Zd1e!ee#jr        f         d&erfd3Zd1e!ee#jp        f         d&epfd4Zd1e!ee#jl        f         d&elfd5Zd6e#j        d&eufd7Zdae d8         ed9<   d:e-fd;Zd<ed=ed&e-fd>Zefd?e e         d@ed&efdAZdBe!eeef         eed)f         ef         fdCZdDe"j        dEed&e e         fdFZdDe e         d&e"j        fdGZdHe"j         dIe=fdJZdKee"j         e?f         d&eeehf         fdLZdM Ze G dN dO                      Z G dP dQe          Ze G dR dSeT                      Ze G dU dVeT                      Ze G dW d8eT                      Z	e G dX dYeT                      Z
 G dZ d[ej                  Zd\ Zd]ed&efd^Zdefd_e'jN        d`e eeef                  d@ed&efdaZdb Zdcedded&efdeZ	 dvdfdgd?edhe eeef                  d&e'jN        fdiZd&eeQeeef         f         fdjZ	 dvdkeNdle ee                  d&eNfdmZ G dn do          Zdpee         dqee         fdrZds Zi Zeee         ee         f         edt<   i Zeeee         f         edu<   dS )w    N)
namedtupleOrderedDict)IterableIteratorSequence)contextmanager)	dataclassfield)Enum)	AnnotatedAnyCallablecastfinalOptionalUnion)&_enable_graph_inputs_of_type_nn_moduleload_verifier)
FakeTensorFakeTensorMode)_ConstantAttributeType)symbolic_shapes)_pytree)treespec_dumpstreespec_loads)int_oo)
prefix_strSymT)ValueRanges)CapturedTraceback)
has_triton   )remove_proxy_from_state_dict   )4ArgumentArgumentKindBufferMutationSpecComplexValueConstantValueCustomObjArgumentDeviceExportedProgramGradientToParameterSpecGradientToUserInputSpecGraphGraphArgumentGraphModuleGraphSignature	InputSpecInputToBufferSpecInputToConstantInputSpecInputToCustomObjSpecInputTokenSpecInputToParameterSpecInputToTensorConstantSpecLayoutLossOutputSpecMemoryFormatModuleCallEntryModuleCallSignatureNamedArgumentNamedTupleDefNodeOptionalTensorArgument
OutputSpecOutputTokenSpecParameterMutationSpecRangeConstraint
ScalarTypeSCHEMA_VERSIONSchemaVersionSymBoolSymBoolArgumentSymExprSymExprHintSymFloatSymFloatArgumentSymIntSymIntArgumentTensorArgument
TensorMetaTokenArgumentTREESPEC_VERSIONUserInputMutationSpecUserInputSpecUserOutputSpec)_Union)	serializeGraphModuleSerializerExportedProgramSerializerGraphModuleDeserializerExportedProgramDeserializerc                       e Zd ZdS )SerializeErrorN)__name__
__module____qualname__     q/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/_export/serde/serialize.pyra   ra   m   s        Drf   ra   dc                 >    d |                                  D             S )Nc                 $    i | ]\  }}|j         |S re   )value.0kvs      rg   
<dictcomp>z _reverse_map.<locals>.<dictcomp>r   s     ---41aAGQ---rf   itemsrh   s    rg   _reverse_maprt   q   s    --17799----rf   ;c              #   T   K   | ]#}t          |t          j        j                  V  $d S N)
isinstancetorch_ops
OpOverload)rm   ops     rg   	<genexpr>r}      s1      HHz"ej344HHHHHHrf   c                   8    e Zd ZU eed<   eed<   eed<   eed<   dS )SerializedArtifactexported_program
state_dict	constantsexample_inputsN)rb   rc   rd   bytes__annotations__re   rf   rg   r   r      sB         rf   r   c                   8    e Zd ZU eed<   eed<   eed<   eed<   dS )_SerializedProgramr   r   r   r   N)rb   rc   rd   r-   r   r   re   rf   rg   r   r      sB         %%%%rf   r   c                   *    e Zd ZdZd Zd Zd Zd ZdS )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                 :    i | _         t                      | _        d S rw   )mapset	evaluatedselfs    rg   __init__zLazyMap.__init__   s    rf   c                     || j         |<   d S rw   )r   )r   rn   ro   s      rg   __setitem__zLazyMap.__setitem__   s    rf   c                     | j         |         }|| j        v r|S | j                            |            |            | j         |<   | j         |         S rw   )r   r   add)r   rn   outs      rg   __getitem__zLazyMap.__getitem__   sR    hqkJ1ceex{rf   c                 4    | j                                         S rw   )r   __repr__r   s    rg   r   zLazyMap.__repr__   s    x  """rf   N)rb   rc   rd   __doc__r   r   r   r   re   rf   rg   r   r      sZ         
      # # # # #rf   r   returnc                     | j         t          j        | j                  S t          j        | j        | j                   S )Ntyper   index)r   ry   devicer   rs   s    rg   deserialize_devicer      s7    w|((((<QV173333rf   sizes.c                 x    | D ]}|j         dk    sJ d|j                       t          d | D                       S )Nas_intOnly as_int is supported, got c              3   $   K   | ]}|j         V  d S rw   r   )rm   sym_int_sizes     rg   r}   z#deserialize_size.<locals>.<genexpr>
  s%      ??$??????rf   r   tuple)r   r   s     rg   deserialize_sizer     s]     
 
 H,,,@\->@@ -,,, ????????rf   stridesc                 x    | D ]}|j         dk    sJ d|j                       t          d | D                       S )Nr   r   c              3   $   K   | ]}|j         V  d S rw   r   )rm   sym_int_strides     rg   r}   z%deserialize_stride.<locals>.<genexpr>  s%      EE>&EEEEEErf   r   )r   r   s     rg   deserialize_strider     s]    ! 
 
"h...B^-@BB /... EEWEEEEEErf   stc                     t           |          S rw   )_SERIALIZE_TO_TORCH_DTYPE)r   s    rg   deserialize_scalar_typer     s    $R((rf   offsetc                 J    | j         dk    sJ d| j                      | j        S )Nr   r   )r   r   )r   s    rg   deserialize_storage_offsetr     s0    ;("""$RV[$R$R"""=rf   sc                     t          | t          j        t          j        t          j        f          r| j        j        } t          j        j	        
                    |           S rw   )rx   ry   rQ   rK   rO   nodeexprsympyprintingreprsreprr   s    rg   _print_sympyr     sC    !elEM5>BCC FK>$$Q'''rf   c                 n   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 ``)rx   ry   rQ   r   Symbolintr   is_concrete_intcreater   r   rM   r   rN   ra   r   r   s    rg   serialize_sym_intr   $  s   !elEL#677 
*1-- 	=A////a%,!=>>>>>v{"}W\!__-E-EFFFF}#$Q(/qv{CCC      S1SSaSSS
 
 	
rf   c                 n   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   )rx   ry   rO   r   r   floatr   is_concrete_floatr   r   r   rM   r   rN   ra   r   r   s    rg   serialize_sym_floatr   9  s   !enelE:;; 
,Q// 	?E!HH5555a%.%,!?@@@@@v{"w|A/G/GHHHH#$Q(/EEE      WqWWTRSWWWWW
 
 	
rf   c                 V   t          | t          j        t          f          rft	          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   )rx   ry   rK   boolr   is_concrete_boolr   rM   r   ra   r   r   s    rg   serialize_sym_boolr   N  s    !emT*++ 
+A.. 	M>$q''2222>'<??*K*K*KLLLLUQUU4PQ77UUU
 
 	
rf   tc                 R   t          t          | j                 d | j        D             | j        t          | j        j        | j        j                  d | 	                                D             t          |                                           t          | j                           S )z.
    Extract a TensorMeta describing `t`.
    c                 ,    g | ]}t          |          S re   r   rm   r   s     rg   
<listcomp>z)serialize_tensor_meta.<locals>.<listcomp>`  s!    555 ##555rf   r   c                 ,    g | ]}t          |          S re   r   r   s     rg   r   z)serialize_tensor_meta.<locals>.<listcomp>c  s!    :::!"1%%:::rf   )dtyper   requires_gradr   r   storage_offsetlayout)rT   _TORCH_TO_SERIALIZE_DTYPEr   shaper   r,   r   r   r   strider   r   _TORCH_TO_SERIALIZE_LAYOUTr   )r   s    rg   serialize_tensor_metar   Z  s     '055QW555o18=???::qxxzz:::()9)9););<<)!(3   rf   r^   _CURRENT_DESERIALIZERfake_tensorc                     t          | t          j        j                  }t	          |           }t          j        t          |          t                    	                    d          }t          ||ffS )Nclsutf-8)rx   ry   nn	Parameterr   jsondumps_dataclass_to_dictEnumEncoderencode_reconstruct_fake_tensor)r   is_parametertensor_metatensor_meta_bytess       rg   _reduce_fake_tensorr   l  sg    k58+=>>L'44K
;''[  fWoo  $&7%FFFrf   serialized_tensor_metar   c                    t          j        |                     d                    }t          t          |          }t
          
J d            t
                              |          }|rt          j        	                    |          }|S )Nr   z)Need access to current deserializer state)
r   loadsdecode_dict_to_dataclassrT   r   deserialize_tensor_metary   r   r   )r   r   json_tensor_metar   r   s        rg   r   r   u  s     z"8"?"?"H"HII$Z1ABBK ,,3 -,, (??LLK 6h((55rf   artifactpickle_protocolc                 R   | dS t           t          j        vs
J d            	 t          j        t           t                     t          j                    }t          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BytesIOry   savegetvalue)r  r  buffers      rg   serialize_torch_artifactr    s     sW3333: 433/z#6777 	
8V_EEEE  ":..G":.....s   AB B&
serializedc                 &   t          | t          t          f          r| S t          |           dk    ri S t	          j        |           }|                    d           t          j        |d          }t          |t          t          f          sJ |S )Nr   F)weights_only)	rx   dictr   lenr
  r  seekry   load)r  r  r  s      rg   deserialize_torch_artifactr    s     *tUm,, 
:!	Z
##F
KKNNNz&u555Hh.....Orf   valadjustc                    | t           j        t          fv rd S | t           j         t           fv rd S t          | t           j                  rt          |           S t                              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   rx   Integerr   logwarningr   mathr  r  RuntimeError)r  r  s     rg   _sympy_int_to_intr#    s    
ux   t
y6'"""t#u}%% 3xx KK	 	S		   z#	6		y~~=V==>>>rf   c                     | |S | t            t           fv r| S | t          j        k    rt           S | t          j         k    rt            S t          j        |           S rw   )r   r!  infr   r  )r  defaults     rg   _int_to_sympy_intr'    sY    
{
w

dh
txiw=rf   symsym_typec                 z    t          t          |           t          t          |                   d                    S rw   )r   strr  r   )r(  r)  s     rg   _symbol_indexr,    s.    s3xxJx011334555rf   range_constraintsc                 >    d |                                  D             S )Nc           
          i | ]I\  }}t          |          t          t          |j        d           t          |j        d                    JS )r  r  )r+  rG   r#  lowerupperrl   s      rg   rp   z/serialize_range_constraints.<locals>.<dictcomp>  s^       
 Aq	 	Aagv..agw//
 
  rf   rq   )r-  s    rg   serialize_range_constraintsr2    s1     
 &++--   rf   c                    t          | t          j        j                  r| j        S t          |           t          v r-t          t          |                                        |           S t          dt          |                      )NzCannot find schema for )	rx   ry   rz   r{   _schemar   _serialization_registry	op_schemar"  )targets    rg   _get_schema_from_targetr8    sp    &%*/00 G~	f0	0	0&tF||4>>vFFF
?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<   dS )
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
   listr<  r&   r   r=  r>  rB   r  r?  r+  rT   r@  rQ   rA  rK   rB  rO   rC  r   rD  r+   re   rf   rg   r:  r:    sH        "U4888FDN888#eD999GT(^999d333E4:333+05+F+F+FM4Z(FFF(-d(C(C(CNDf%CCC*/%*E*E*EOT#w,'EEE,1E$,G,G,Gd3=)GGG$)T)))6;eD6Q6Q6QtC!223QQQQQrf   r:  c                       e Zd Zd ZdS )Finalc                     |D ]/}t          |t                    rt          d|j         d          0t                              | ||t          |                    S )Nztype 'z ' is not an acceptable base type)rx   rG  	TypeErrorrb   r   __new__r  )metaclsnamebases	classdictbs        rg   rJ  zFinal.__new__  sf     	W 	WA!U## W U U U UVVVW||GT5$y//BBBrf   N)rb   rc   rd   rJ  re   rf   rg   rG  rG    s(        C C C C Crf   rG  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j        defdZdee         fdZ	 d6dedee         fdZdee         fdZdefdZ defdZ!defdZ"defdZ#d6dee         de$fdZ%de&fdZ'de(fdZ)de*fdZ+de(fdZ,d ej-        de-fd!Z.d ej/        de/fd"Z0d#ej        de1fd$Z2d%ej3        de$fd&Z4d' Z5d(ej6        de6fd)Z7deej                 dee         fd*Z8de
j        j        dee$         fd+Z9de
j        j        dee$         fd,Z:d-ed.ede$fd/Z;de
j        j        dee&         fd0Z<d1e
j        j=        de>fd2Z?d3eeef         fd4Z@d1e
j        j=        de=fd5ZAdS )7r\   graph_signaturemodule_call_graphc                 r    t                      | _        || _        || _        i | _        i | _        i | _        d S rw   )r:  graph_staterQ  rR  custom_objsduplicate_getitem_nodestreespec_namedtuple_fields)r   rQ  rR  s      rg   r   zGraphModuleSerializer.__init__  s>    
 &<<.!2=?79$DF'''rf   c              #   n   K   | j         }t                      | _         	 d V  || _         d S # || _         w xY wrw   )rT  r:  r   saveds     rg   save_graph_statez&GraphModuleSerializer.save_graph_state  sJ       %<<	%EEE$DuD$$$$s   + 	4r   c           
         |j         dk    sJ |j        d         }t                              d|j        |           t          |t          j                  r0t          j	        | 
                    |j        |                    }nNt          |t          j                  r0t          j	        |                     |j        |                    }nt          |t          j                  rt          d          t          |t          t           t"          t$          t'          d           f          r|                     |          }nt          |t*          j                  rX|j        }t          j	        t-          |j        |                    }|                     |          | j        j        |j        <   nt          d	|j        d                    | j        j                            |           d S )
Nplaceholderr  z[handle_placeholder] %s: %s	as_tensor
as_sym_intz,SymFloat graph input is not implemented yet.rL  	class_fqnas_custom_objz Unimplemented graph input type: )r|   metar  debugrL  rx   ry   Tensorr&   r   serialize_tensor_outputrQ   serialize_sym_int_outputrO   AssertionErrorr   r   r+  r   r   serialize_inputepr+   rc  serialize_script_obj_metarT  rD  r<  append)r   r   r  graph_inputrc  s        rg   handle_placeholderz(GraphModuleSerializer.handle_placeholder  s   w-''''i		/C@@@c5<(( 	X"/66ty#FF  KK U\** 	X"/88CHH  KK U^,, 	X !OPPPc4eT$ZZ@AA 	X..s33KKR122 		XI"//TY)TTT  K ..s33 .ty99 !!VDIeDT!V!VWWW&&{33333rf   c                     |j         dk    sJ t          |j                  dk    s
J d            |j        d         }t                              d|j        |           t          |t          j        j	                  r.d j
        _                             |          g j
        _        d S t          |t          t          f          sJ  fd|D              j
        _        d S )Noutputr%   z"FX.Node's args should have one argr   z[handle_output] %s: %sTc                 :    g | ]}                     |          S re   )rl  rm   argr   s     rg   r   z7GraphModuleSerializer.handle_output.<locals>.<listcomp>?  s'    'W'W'Wc(<(<S(A(A'W'W'Wrf   )r|   r  argsr  rg  rL  rx   ry   fxrB   rT  rC  rl  r=  r   rE  )r   r   	node_argss   `  rg   handle_outputz#GraphModuleSerializer.handle_output4  s    w(""""49~~"""$H"""IaL			*DIyAAAi// 	X7;D4(,(<(<Y(G(G'HD$$$i%77777'W'W'W'WY'W'W'WD$$$rf   r   c                     t          |t                    r|S |j                            d          r'|j                            dd          }| d|j         S |j         d|j         S )Nz
torch._opsz	torch.ops.)rx   r+  rc   
startswithreplacerb   )r   r7  modules      rg   serialize_operatorz(GraphModuleSerializer.serialize_operatorA  s{    fc"" 	<M)),77 	< &..|[IIF00v000';;&/;;;rf   c           	      Z    |j         dk    sJ |j                            d          }t                              d|j        |j        |j        |j        |           |j        t          j
        u rd S |j        t          v s3|t          |t          j        t          j        t          j        f          rt#          |j                  dk    sJ t%                               |j                                       |j        |j                                       |j        |          g                     |                    }nt          |j        t          j        j                  rwt%                               |j                                       |j        |j        |j                                       |                               |                    }n-t          |j        t          j        j                  rdt8          fd}|j        t          j        j        u rpt?          |j                  }|j        d         j        }tA          |j!        j"        |          sJ tG          |j!        j"        |          }|j$        |d<   d |d<   g }|d	         t          |d	         tJ                    rx|d	         D ]j}	t          |	t          j&        j                  r4t          |	j                            dd           tN          j(                  rU|)                    |	           k||d	<    fd
}
t%                               |j                   *                    ||j                   |
|                               |          d          }nt|j        t          j        j+        j,        u rt[                      s
J d            ddl.m/} |j        d         }t          |t`                    sJ |1                                }g }t          |j        d         td                    sJ t          j        j+        j3        4                    |j        d                   }t          ||          rTt#          |j5                  dk    sJ |j5        d         j6        }|j5        d         j7        dk    s
J d            |j8        }nd}ts                      }|j:        D ]#}|j;        r|<                    |j                   $d}d}d}t          |j        d         t`                    sJ |j        d         =                                D ]<\  }}||v rd}|r
J d            ||v r|)                    |           ||fz  }|dz  }=t          |j        d         t>                    sJ |j8        j>        |j        d         d         ||d}t%                               |j                   *                    ||           ?                    |                               |           ||                    }nt%                               |j                   *                    |j        |j                   ?                    |                               |           ||                    }nUt          |j                  t          v r!t          |j                  t          v sJ t          |j                   d            t          t          |j                           }|B                                }|C                    |j                  }t          |t                    rt          |t                    sJ d|vrd|vsJ t%          d| d|                      |j        |j        |j                                       |                               |                    }nt          d|j         d           jF        jG        )                    |           d S )Ncall_functionr  z-[handle_call_function] %s: %s(%s, {%s}) -> %sr   )r7  r<  r=  metadatar   c                     t          | j        t          j        j                  sJ | j                            dd           }|d uot          |t          j                  S )Nr  )rx   r7  ry   rz   HigherOrderOperatorrf  getrh  )r   meta_vals     rg   _is_hop_single_tensor_returnzPGraphModuleSerializer.handle_call_function.<locals>._is_hop_single_tensor_returnq  sP    !$+uz/MNNNNN9==55t+R
8U\0R0RRrf   r%   r#   c                    | j                             dd           }g }t          |          D ]D\  }}                    | |          }|                                        ||                     Et          j        |          gS )Nr  
as_tensors)rf  r  	enumerate_output_node_name_at_indexro  ri  r&   r   )r   r  tensor_argsidxrf  rL  r   s         rg   serialize_tensor_list_outputzPGraphModuleSerializer.handle_call_function.<locals>.serialize_tensor_list_output  s    #y}}UD99H"$K%.x%8%8 U U	T#>>tSII#**4+G+Gd+S+STTTT$O{CCCDDrf   F)r7  r<  r=  r  is_hop_single_tensor_returnz+triton required to serialize triton kernels)	Autotuner
kernel_idxz)serialization only supports num_ctas == 1   re   kwargsTz/non-constexpr args found after constexpr arg(s)grid)rL  r  output_indices	num_warpsz* is not supported in export serialization.:#zSerializing z is not supported)Hr|   rf  r  r  rg  rL  r7  rw  r  operatorgetitem_SYM_OPSrx   ry   rQ   rK   rO   r  rB   r  serialize_sym_op_inputsserialize_outputserialize_metadatarz   r{   serialize_inputsserialize_outputsr  r   _higher_order_opsaoti_call_delegaterE  hasattrgraphowning_modulegetattr	aoti_pathr   rx  rm  r+   ro  serialize_hoo_inputstriton_kernel_wrap triton_kernel_wrapper_functionalr"   triton.runtime.autotunerr  r  keysr   kernel_side_table
get_kernelconfigsr  num_ctasfnr   paramsis_constexprr   rr   rb   serialize_hoo_outputsr   r5  	namespace
to_op_namer+  ra   rT  r>  )r   r   r  ex_noder  serializable_argslowered_module_namelowered_moduleserializable_weight_nodesweight_noder  r  output_keysr  kernelr  constexpr_keyspfound_constexprargs_newirn   ro   
kwargs_newhandlerr  op_names   `                          rg   handle_call_functionz*GraphModuleSerializer.handle_call_functionL  s`   w/))))9==''		;IKIK	
 	
 	
 ;(***F;("" 8elEM5>%RSS ! t{##q((((..t{;;33DKKK..ty(CCD0066	  GG UZ%:;; \	P..t{;;,,T[$)T[QQ..t440066  GG UZ%CDD T	PSd S S S S {e5HHH$(OO! ,09Q<+<#tz79LMMMMM!()ACV!W!W'5'?!!$ (,!!$,.)$Q'3
%a((9 93 (9'; F F &k58=AA %j',00==r?SG G % %188EEEE+D%a(E E E E E 224;??445FTT88>>!44T::05   *=^_ _ "||RR%RRR|>>>>>>9U+!(D11111&mmoo!#!$+l";SAAAAA0CU``K-  fi00 "v~..!3333 &q 1 ;I!>!,5:::C ;:: $YFF !I!$ 3 3A~ 3&**16222"'!$+h"7>>>>> K17799  DAq N***. .  I . K''&--a000$HFAA!$+f"5t<<<<<"I. K/2&4!*	 
 224;??44XzJJ 66t<<!44T::0L0LT0R0R   224;??44TYLL 66t<<!44T::0L0LT0R0R   $+"999$$(????$$PPP @?? .d4;.?.?@G))++I((55Gi--J*Wc2J2JJJJi''Cw,>,>,>>0900w00,,T[$)T[QQ..t440066	  GG !!N!N!N!NOOO%%g.....rf   c                 F    t                               d|j                   d S )Nz[handle_get_attr] %s)r  rg  rL  )r   r   s     rg   handle_get_attrz%GraphModuleSerializer.handle_get_attr  s    		($)44444rf   c                     d }|j         D ]L}|j        t          j        u sJ | d            ||j        d         k    r||}8|j        | j        |j        <   M|S )Nz is not a getitem noder%   )usersr7  r  r  rw  rL  rV  )r   r   r   	user_nodeusers        rg   _output_node_at_indexz+GraphModuleSerializer._output_node_at_index
  sz    	J 	M 	MD;("2222t4S4S4S222	!$$$ $II ?HnD0;rf   c                 X    |                      ||          }||j         d| S |j        S )N_unused_)r  rL  )r   r   r   r  s       rg   r  z0GraphModuleSerializer._output_node_name_at_index  s;    ..tU;;	i00000>!rf   c                     i }|j                             d          x}r||d<   |j                             d          x}r@d fd|                                D             }t                              |          |d<   |j                             d          x}r+ fd|D             }t                              |          |d<   |j                             d          x}r*t                              t          |                    |d<   |j                             d          x}	rF	 t          j        |	          |d<   n-# t          $ r }
t          d	|j
         d
|
           |
d }
~
ww xY w|S )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#   ,)rx   r   r  r+  )r  pathtys      rg   export_nn_module_stackzHGraphModuleSerializer.serialize_metadata.<locals>.export_nn_module_stack&  sh    !#u--?#c((a---?b!$,,,,,!"c*****czB&rf   c                 6    g | ]\  }}| d  |           S )r  re   )rm   rn   ro   r  s      rg   r   z<GraphModuleSerializer.serialize_metadata.<locals>.<listcomp>0  sD       7;q!122--a0022  rf   source_fn_stackc                 \    g | ](}|d           d                     |d                    )S )r   r  r%   )r  )rm   	source_fnr   s     rg   r   z<GraphModuleSerializer.serialize_metadata.<locals>.<listcomp>6  sM        Q<II$"9"9)A,"G"GII  rf   torch_fncustomz-Failed to serialize custom metadata for node z with error )rf  r  rr   ST_DELIMITERjoinrE  r   r   	Exceptionra   rL  )r   r   retr  r  nn_module_listsource_fn_stsource_fn_listr  r  er  s   `          @rg   r  z(GraphModuleSerializer.serialize_metadata  s   )--666; 	-!,C"imm,=>>>? 	G' ' '   ?N?T?T?V?V  N &2%6%6~%F%FC!"9==):;;;< 	G   !-  N &2%6%6~%F%FC!"y}}Z0008 	@*//X??C
OY]]8,,,6 	 $
6 2 2H   $^DI^^[\^^ 
 
s   ,E 
E.E))E.script_obj_metac                 n    t                               d|           t          |j        |j                  S )Nz[serialize_script_obj_meta] %srb  )r  rg  r+   rL  rc  r   r  s     rg   rn  z/GraphModuleSerializer.serialize_script_obj_metaI  s<     			2ODDD  %%/
 
 
 	
rf   c           	         t          |t          j        j                  rd |j        j        D             }nC|t          v sJ t          t          j	        |          j
                                                  }g }t          ||          D ]G\  }}|                    t          ||                     |          t           j                             H|S )Nc                     g | ]	}|j         
S re   rL  rm   rv  s     rg   r   zAGraphModuleSerializer.serialize_sym_op_inputs.<locals>.<listcomp>T  s    CCCs#(CCCrf   rL  rv  kind)rx   ry   rz   r{   r4  	argumentsr  rE  inspect	signature
parametersr  zipro  r@   rl  r'   
POSITIONAL)r   r|   rw  
args_namesserialized_args	args_namerv  s          rg   r  z-GraphModuleSerializer.serialize_sym_op_inputsR  s    b%*/00 	GCCbj.BCCCJJ>>>>g/33>CCEEFFJ!*d33 	 	NIs""",,S11%0      rf   Nr7  c           
         d }g }t          |t          j        j        j                  r'|d         }|d         }|                    ||          }n@t          |t          j        j        gt                      R           sJ t          |          }|J |pi }t          |j                  D ]\  }}	|	j        |v rY|                    t          |	j        |                     ||	j                 |	j                  t"          j                             g|	j        sg|t)          |          k     rT|                    t          |	j        |                     ||         |	j                  t"          j                             Ռ|S )Nr   r%   r  )rx   ry   r  	torchbindCallTorchBindschemarz   r{   _registered_extension_typesr8  r  r  rL  ro  r@   rl  r   r'   KEYWORD
kwarg_onlyr  r  )
r   r7  rw  r  r  r  objmethodr  
schema_args
             rg   r  z&GraphModuleSerializer.serialize_inputsc  s    fe5?MNN 	5q'C!WF]]3//FF.O1L1N1NOO     -V44F!!!2&v'788 	 	MAz&((&&!'_ 00":?3Z_  *1       * q3t99}}&&!'_ 00a*/JJ)4      rf   c                       fd|D             }|                      fd|                                D                        |S )zM
        For serializing HOO inputs since HOOs do not have a schema.
        c                 n    g | ]1}t          d                     |          t          j                  2S ) r  )r@   rl  r'   r  rm   ar   s     rg   r   z>GraphModuleSerializer.serialize_hoo_inputs.<locals>.<listcomp>  sR     
 
 
  T11!44<;R  
 
 
rf   c                 t    g | ]4\  }}t          |                    |          t          j                   5S )r  )r@   rl  r'   r   )rm   rL  r	  r   s      rg   r   z>GraphModuleSerializer.serialize_hoo_inputs.<locals>.<listcomp>  sX        D! ,,Q//%-    rf   )extendrr   )r   rw  r  r<  s   `   rg   r  z*GraphModuleSerializer.serialize_hoo_inputs  s|    
 
 
 
 	
 
 
 	     &||~~  		
 		
 		
 rf   c                 b    t          |          t          u pt          |t          j                  S rw   )r   r   rx   ry   rQ   r   rv  s     rg   is_inductor_sym_int_argz-GraphModuleSerializer.is_inductor_sym_int_arg  s&    
 CyyC@:c5<#@#@@rf   c                     t          |          t          u p1t          |t          j        j                  o|j        | j        j        v S rw   )	r   r   rx   ry   rx  rB   rL  rT  r@  r  s     rg   is_sym_int_argz$GraphModuleSerializer.is_sym_int_arg  s@    CyyC 
sEHM** <D,;;	
rf   c                     t          |t                    p1t          |t          j        j                  o|j        | j        j        v S rw   )rx   r   ry   rx  rB   rL  rT  rB  r  s     rg   is_sym_float_argz&GraphModuleSerializer.is_sym_float_arg  s?    #u%% 
sEHM** >D,==	
rf   c                     t          |t                    p1t          |t          j        j                  o|j        | j        j        v S rw   )rx   r   ry   rx  rB   rL  rT  rA  r  s     rg   is_sym_bool_argz%GraphModuleSerializer.is_sym_bool_arg  s?    #t$$ 
sEHM** =D,<<	
rf   arg_typec                 D    dd l mc m} |j        |j        ft          |t          j        j                  r|j	        dk    rt          |j
        t                    sJ t          |j        j        |j
                  }t          |t          j                  rt!          d          t          |t          j        j                  rj                                 5                       |          }d d d            n# 1 swxY w Y   t)          j        t-          |j
        |                    S t/          |          j        dk    rTt          |dd           }t          |dd           }|
J d	            |
J d
            t)          j        | d|           S t!          d|j
         dt/          |                                          |          r-t)          j        t5          j        |j                            S                      |          r-t)          j        t;          j        |j                            S                      |          r-t)          j        t?          j        |j                            S t          |j         d         tB          j"                  r9t)          j        tE          |j        |j         d         j#                            S |j         j$        v r5 j$        |j                 }t)          j        tK          |                    S t)          j        tK          |j                            S t          |          rC|&                                }	|	
J d            t)          j        tK          |	                    S t          ||j'                  r|&                                }	|	
J d            |(                                }
|
)                                *                                }|
 j+        |	<   t)          j        tE          |	|                    S t          |t          j,                  r5t)          j        t5          j        t          |                              S t          |t          j-                  r5t)          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 r.t)          j        te          |j3        |j4                            S |t)          j        d          S t          |tj          tl          f          rfto          |          dk    r|t          |t          j8                  r|9                                }t          |t          j:                  sJ |9                                }t          |t          j8                  r|9                                }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          A                    d'           t)          j        g $          S t          d( |D                       r"t)          j        tk          |                     S t          d) |D                       r"t)          j        tk          |          !          S t          d* |D                       r"t)          j        tk          |          "          S t          d+ |D                       r"t)          j        tk          |          #          S t           fd,|D                       rg }|D ]}t          |t          j,                  r6|C                    t5          j        t          |                               Rt/          |          t^          u r(|C                    t5          j        |                     t)          j        |-          S t          d. |D                       rt)          j        d/ |D             0          S t           fd1|D                       rg }|D ]}t          |t          j        j                  r.|C                    t5          j        |j                             Ot/          |          t^          u r(|C                    t5          j        |                     t)          j        |-          S t           fd2|D                       rg }|D ]}t          |t          j        j                  r.|C                    t;          j        |j                             Ot          |t`                    r(|C                    t;          j        |                     t)          j        |0          S t           fd3|D                       rg }|D ]}t          |t          j        j                  r.|C                    t?          j        |j                             Ot          |t\                    r(|C                    t?          j        |                     t)          j        |4          S t          d5 |D                       r^g }|D ]D}|j	        dk    rt!          d          |C                    tK          |j                             Et)          j        |$          S t          d6 |D                       r3d7 }t)          j        tk          t          ||                    8          S t          fd9|D                       rt)          j        d: |D             $          S t          fd;|D                       r5fd<}t)          j        tk          t          ||                    8          S t!          d=d> |D                        t          |t          jE                  r t)          j        t          |         ?          S t          |t          jG                  r.t)          j        t          |j        |jI        @          A          S t          |t          jJ                  r t)          j        t          |         B          S t          |t          jL                  r t)          j        t          |         C          S t          |t          jN        jO                  r|P                    dD          r|P                    dE          st!          dF| dG          dHto           j+                   }| j+        |<   |)                                *                                }t)          j        tE          ||                    S t          |t          jQ        jR        t          jQ        jS        f          r(t)          j         T                    |          I          S t!          dJt/          |           dK|           )LNr   get_attrz?getattr nodes containing tensors should not appear in the graph)rL  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  rb  rd  r  r^  zBuffer must have valid namer   r   r   )realimag)
as_complexTas_none)as_bools)as_ints)	as_floats)
as_stringsr  zEmpty list with type z nyi.zUnsure how to serialize the given empty list, as we don't know what is the type of this argument. Serializing it as a tensor list by default.c              3   B   K   | ]}t          |          t          u V  d S rw   )r   r   rm   r	  s     rg   r}   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>M  s,      00q477d?000000rf   c              3   B   K   | ]}t          |          t          u V  d S rw   )r   r   r/  s     rg   r}   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>O  ,      11T!WW^111111rf   c              3   B   K   | ]}t          |          t          u V  d S rw   )r   r   r/  s     rg   r}   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>Q  s-      33!T!WW%333333rf   c              3   B   K   | ]}t          |          t          u V  d S rw   )r   r+  r/  s     rg   r}   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>S  r1  rf   c              3   B   K   | ]}                     |          V  d S rw   )r  r  s     rg   r}   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>U  s1      BBT11!44BBBBBBrf   )as_sym_intsc              3   J   K   | ]}t          |t          j                  V  d S rw   )rx   ry   rO   r/  s     rg   r}   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>`  s.      @@qZ5>22@@@@@@rf   c                 R    g | ]$}t          j        t          |                     %S )r  )rP   r   r+  r/  s     rg   r   z9GraphModuleSerializer.serialize_input.<locals>.<listcomp>b  s-    "X"X"Xq#3#:3q66#J#J#J"X"X"Xrf   )as_sym_floatsc              3   B   K   | ]}                     |          V  d S rw   )r  r  s     rg   r}   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>d  s1      99T((++999999rf   c              3   B   K   | ]}                     |          V  d S rw   )r  r  s     rg   r}   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>m  s1      ;;!T**1--;;;;;;rf   c              3   B   K   | ]}                     |          V  d S rw   )r  r  s     rg   r}   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>v  s1      ::T))!,,::::::rf   )as_sym_boolsc              3   T   K   | ]#}t          |t          j        j                  V  $d S rw   )rx   ry   rx  rB   r/  s     rg   r}   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s0      ??aZ58=11??????rf   c              3   r   K   | ]2}t          |t          j        j        t	          d           f          V  3d S rw   )rx   ry   rx  rB   r   r/  s     rg   r}   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s;      MMAZEHM4::#>??MMMMMMrf   c                     | t          j        d          S t          | t          j        j                  r(t          j        t          | j                            S t          d|            NTr(  r  r^  z!Unsupported list/tuple argument: )	rC   r   rx   ry   rx  rB   rS   rL  ra   r	  s    rg   serialize_optional_tensor_argszMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_args  sv    y5<TJJJJ#Aux}55 V5<&4!&&A&A&A       --TQR-T-TUUUrf   )as_optional_tensorsc              3   8   K   | ]}t          |          V  d S rw   )rx   rm   r	  inductor_tensor_bufferss     rg   r}   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  s.      IIZ#:;;IIIIIIrf   c                 R    g | ]$}t          |                                           %S )r  )rS   get_namer/  s     rg   r   z9GraphModuleSerializer.serialize_input.<locals>.<listcomp>  s+    OOOaAJJLL A A AOOOrf   c              3   \   K   | ]&}t          |g t          d           R           V  'd S rw   )rx   r   rE  s     rg   r}   z8GraphModuleSerializer.serialize_input.<locals>.<genexpr>  sS        JK
1D 7DdDDEE     rf   c                     | t          j        d          S t          |           r5t          j        t          |                                                     S t          d|            r@  )rC   r   rx   rS   rH  ra   )r	  rF  s    rg   rB  zMGraphModuleSerializer.serialize_input.<locals>.serialize_optional_tensor_args  sz    y5<TJJJJ#A'>?? V5<&4!**,,&G&G&G       --TQR-T-TUUUrf   z&Unsupported list/tuple argument type: c                 ,    g | ]}t          |          S re   r   r/  s     rg   r   z9GraphModuleSerializer.serialize_input.<locals>.<listcomp>  s    =S=S=S!d1gg=S=S=Srf   )as_scalar_typer   )	as_device)as_memory_format)	as_layout__getstate____setstate__z!Unable to serialize custom class z7. Please define serialization methods via def_pickle()._custom_obj_)as_operatorzUnsupported argument type: z with schema arg_type )Utorch._inductor.ir	_inductorirBufferReinterpretViewrx   ry   rx  rB   r|   r7  r+  r  r  r  rh  ra   r2   r[  serialize_graphr&   r   r1   r   rb   r  rR   rL  r  rP   r  rL   rf  rm  r+   rc  rV  rS   rH  TorchBindObjectget_real_obj_typequalified_namerU  rQ   rO   r   r   r   complexr)   r%  r&  rE  r   r  OptionalTypegetElementTypeListTypeBoolTypeIntType	FloatType
StringType
TensorTyper  r   allro  r   r   r   r   r,   r   memory_format!_TORCH_TO_SERIALIZE_MEMORY_FORMATr   r   _CScriptObject_has_methodrz   r{   r  r  )r   rv  r  inductor_irattrr  r  r  
dedup_namearg_namearg_valrc  	elem_typevaluesr	  r  rB  custom_obj_namerF  s   `                 @rg   rl  z%GraphModuleSerializer.serialize_input  s   000000000 '#

 c58=)) J	v##!#*c22222sy6
CCdEL11 (Y    eh&:;; ..00 ; ; $ 4 4T : :; ; ; ; ; ; ; ; ; ; ; ; ; ; ;#?!.CJe!L!L!L    $ZZ(,BBB #*$t"D"DK!(|T!B!BJ&224T222%113R111#?5R5Rj5R5RSSSS(]]]QUVZQ[Q[]]   $$S)) P-4SXFFF    &&s++ P!1!8!J!J!J    %%c** P / 6sx H H H    CHUOR-ABB 
P"3 X%1J# # #   
 T999!9#(C
Z1P1P1PQQQQSX1N1N1NOOOO455 W	
 ||~~H'')F'''?^-J-J-JKKKK[899 O	 ||~~H'')F'''&&((G6688I)0DX&?1B8Y1W1WXXXXU\** E	
 ?n.CCPSHH.U.U.UVVVVU^,, 	
 ?-4SXXFFF    #YY$?3////#YY#?S1111#YY#?#....#YY%?C0000#YY'!!?'SXCHEEE    [?40000dE]++ i	3xx1}}'!(E,>?? =#+#:#:#<#<%h????? ( 7 7 9 9I!)U-?@@ ?$-$<$<$>$>	!)U^<< W';;;;#Iu}== W'r::::#Iu?? 	W'<<<<#Iu/?@@ W'"====#Iu/?@@ W'"==== --UY-U-U-UVVV KKF  
 $?b999900C00000 dS		::::11S11111 btCyy999933s33333 `c;;;;11S11111 ^$s))<<<<BBBBcBBBBB \  G GA!!U\22 Gn&;CFF&K&K&KLLLLaCn&;1&E&E&EFFF6::::@@C@@@@@ Q"X"XTW"X"X"X    9999S99999 M G GA!!UX]33 Gn&;AF&K&K&KLLLLaCn&;1&E&E&EFFF6::::;;;;s;;;;; D K KA!!UX]33 K&6&=af&M&M&MNNNN#Au-- K&6&=q&I&I&IJJJV<<<<::::c::::: ; I IA!!UX]33 Io&<QV&L&L&LMMMM#At,, Io&<Q&G&G&GHHHF;;;;??3????? 2	 B BAtz)),]   $$^%@%@%@AAAA)<<<<MMMMMMM (V V V  (,S1OQT-U-U(V(V    IIIISIIIII OO3OOO        OR     V V V V V  (,S1OQT-U-U(V(V    %U=S=Ss=S=S=SUU   U[)) "	?2KC2PQQQQU\**  	?V-S-S-STTTTU011 	?!B3!G    U\** 	?-G-LMMMMUX233 	//OON33 %> > > >   ES1A-B-BDDO03D_-		2244I?/KK    ej3UZ5STUU 	?t/F/Fs/K/KLLLL Yd3iiYYxYY  s   C??DDc                 z    || j         j        vsJ t          |          | j         j        |<   t          |          S )Nr  )rT  r?  r   rS   r   rL  r  s      rg   ri  z-GraphModuleSerializer.serialize_tensor_output  sB    4+99999/DX/N/N&t,4((((rf   c                     || j         j        vsJ t          |          | j         j        |<   t          j        |          S Nr  )rT  r@  r   rR   r   rv  s      rg   rj  z.GraphModuleSerializer.serialize_sym_int_output  sE    4+:::::0A(0K0K'-$T2222rf   c                     || j         j        vsJ t          |          | j         j        |<   t          j        |          S rx  )rT  rB  r   rP   r   rv  s      rg   serialize_sym_float_outputz0GraphModuleSerializer.serialize_sym_float_output  sE    4+<<<<<2Eh2O2O)$/&t4444rf   c                     || j         j        vsJ t          |          | j         j        |<   t          j        |          S rx  )rT  rA  r   rL   r   rv  s      rg   serialize_sym_bool_outputz/GraphModuleSerializer.serialize_sym_bool_output  sE    4+;;;;;1CH1M1M(.%d3333rf   specc                 j	   t                               d|           |j        t          j        j        k    rt          |j        t          j                  rmt          |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
                  }nt          |j        j
                  t           u r t          j        |j        j
                  }n?|j        j
        t          j        d          }nt#          d|j        j
         d	          t%          j        t'          |j        j        |
                    S t%          j        t+          |                     |j                                      S |j        t          j        j        k    rk|j        J t          |j        t          j                  sJ t%          j        t5          t3          |j        j                  |j                            S |j        t          j        j        k    rz|j        J t          |j        t          j                  sJ |j        J t%          j        t;          t3          |j        j                  |j        |j                            S |j        t          j        j        k    rk|j        J t          |j        t          j                  sJ t%          j        t?          t3          |j        j                  |j                            S |j        t          j        j         k    rv|j        J t          |j        t          j!                  sJ t%          j        tE          tC          |j        j        |j        j#                  |j                            S |j        t          j        j$        k    r\t          |j        t          j%                  sJ t%          j        tM          tK          |j        j                                      S tO          d|           )Nz[serialize_input_spec] %sr   r   r  r   Tr(  zUnhandled constant input z to serializerL  rk   )constant_inputrv  )
user_inputr  rv  parameter_name)	parameter)rv  buffer_name
persistent)r  )rv  tensor_constant_name)tensor_constantrb  )rv  rt  )
custom_objtokenUnknown argument kind: )(r  rg  r  rm  	InputKind
USER_INPUTrx   rv  ConstantArgumentr   rk   r   r*   r   r   r+  r   ra   r4   r6   rL  rX   serialize_argument_spec	PARAMETERr7  rS   r9   BUFFERr  r5   CONSTANT_TENSORr:   
CUSTOM_OBJr+   r7   rc  TOKENrU   r8   rk  )r   r}  constant_specs      rg   serialize_input_specz*GraphModuleSerializer.serialize_input_spec  s]   		-t4449///$(B$788 ''3..$1$8$O$O$OMM$(.))T11$1$8$P$P$PMM$(.))S00$1$848>$R$R$RMM$(.))U22$1$8$(.$Q$Q$QMMX^+$1$8$F$F$FMM(QDHNQQQ   !'#;!X]-$ $ $    !',1M1Mdh1W1WXXX    Y",000;***dh(9:::::#.&DHM:::#';      Y",---;***dh(9:::::?...#(&DHM::: $#      Y",666;***dh(9:::::# 9&DHM:::)-! ! !    Y",111;***dh(<=====#/)!X]dh6H   %)K	      Y",,,,dh(899999#$%48=999      !!A4!A!ABBBrf   c                    t                               d|           |j        t          j        j        k    r;t          j        t          | 	                    |j
                                      S |j        t          j        j        k    r\t          |j
        t          j                  sJ t          j        t          t          |j
        j                                      S |j        t          j        j        k    rk|j        J t          |j
        t          j                  sJ t          j        t%          t          |j
        j                  |j                            S |j        t          j        j        k    rk|j        J t          |j
        t          j                  sJ t          j        t)          t          |j
        j                  |j                  	          S |j        t          j        j        k    rk|j        J t          |j
        t          j                  sJ t          j        t-          t          |j
        j                  |j                  
          S |j        t          j        j        k    rk|j        J t          |j
        t          j                  sJ t          j        t1          t          |j
        j                  |j                            S |j        t          j        j        k    rk|j        J t          |j
        t          j                  sJ t          j        t5          t          |j
        j                  |j                            S |j        t          j        j        k    r\t          |j
        t          j                  sJ t          j        t;          t9          |j
        j                                      S t=          d|           )Nz[serialize_output_spec] %sr  )user_outputr  )loss_output)rv  r  )buffer_mutationr  )parameter_mutation)gradient_to_parameter)rv  user_input_name)gradient_to_user_input)user_input_mutationr  r  )r  rg  r  rm  
OutputKindUSER_OUTPUTrD   r   rY   r  rv  LOSS_OUTPUTrx   rS   r<   rL  BUFFER_MUTATIONr7  r(   PARAMETER_MUTATIONrF   GRADIENT_TO_PARAMETERr.   GRADIENT_TO_USER_INPUTr/   USER_INPUT_MUTATIONrW   r  rU   rE   rk  )r   r}  s     rg   serialize_output_specz+GraphModuleSerializer.serialize_output_spec7  s   		.5559111$*t/K/KDH/U/UVVV    Y"-333dh(9:::::$*~48=/Q/Q/QRRR    Y"-777;***dh(9:::::$ 2&DHM::: $! ! !    Y"-:::;***dh(9:::::$#8&DHM:::#';$ $ $    Y"-===;***dh(9:::::$&=&DHM:::#';' ' '    Y"->>>;***dh(9:::::$'>&DHM:::$(K( ( (    Y"-;;;;***dh(9:::::$$9&DHM:::$(K% % %    Y"----dh(899999$%%48=999      !!A4!A!ABBBrf   sigc                      t                               d           t           fd|j        D              fd|j        D                       S )Nz
[serialize_signature]c                 :    g | ]}                     |          S re   )r  rm   r   r   s     rg   r   z=GraphModuleSerializer.serialize_signature.<locals>.<listcomp>|  s'    OOO!22155OOOrf   c                 :    g | ]}                     |          S re   )r  r  s     rg   r   z=GraphModuleSerializer.serialize_signature.<locals>.<listcomp>}  s'    RRRA$44Q77RRRrf   input_specsoutput_specs)r  rg  r3   r  r  r   r  s   ` rg   serialize_signaturez)GraphModuleSerializer.serialize_signaturey  s`    		+,,,OOOOsOOORRRRAQRRR
 
 
 	
rf   xc                    t          |t          j                  r(t          j        t          |j                            S t          |t          j                  r-t          j        t          j        |j                            S t          |t          j                  r-t          j        t          j        |j                            S t          |t          j                  r| 	                    |j
                  S t          |t          j                  r.t          j        t          |j        |j                            S t          d          )	Nr  r^  r  r`  r!  rb  rd  TODO)rx   rm  rS   r&   r   rL  rR   rP   r  rl  rk   r+   rc  rk  r   r  s     rg   r  z-GraphModuleSerializer.serialize_argument_spec  s'   a*++ 	)?^-H-H-HIIII2,-- 	)?n.CAF.S.S.STTTT2.// 		)?0@0GPQPV0W0W0WXXXX2.// 	)''0002/00 	)?/QVq{SSS    !(((rf   c                 V      fdt          |t                    } |           |S )Nc           	         | j         d S | j         t          u st          j        | j                   rt          j        | j                 j        }|j        v rKj        |         j        }|| j        j	        k    r(t          d| j         d| j        j	         d| d          n"t          | j        j	                  j        |<   | j        D ]} |           d S )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_namerW  r  _fieldsra   rA   children_specs)tsr  r  childr   store_namedtuple_fieldss       rg   r  zIGraphModuleSerializer.serialize_treespec.<locals>.store_namedtuple_fields  s)   ww*$$(B27(K(K$'-'HJ(& % (4+JJJ"&"A,#!   #bj&888,cBJ c c=?Z=Oc cT_c c c   9 &"*2DEEE 34HI * / /''..../ /rf   )r   rV   )r   treespecserialized_treespecr  s   `  @rg   serialize_treespecz(GraphModuleSerializer.serialize_treespec  sL    	/ 	/ 	/ 	/ 	/ 	/2 -X7GHH)))""rf   module_call_signaturec                     t                               d|           t           fd|j        D              fd|j        D                                  |j                                       |j                  |j        x}r|nd           S )Nz$[serialize_module_call_signature] %sc                 :    g | ]}                     |          S re   r  rm   r  r   s     rg   r   zIGraphModuleSerializer.serialize_module_call_signature.<locals>.<listcomp>  s4       45,,Q//  rf   c                 :    g | ]}                     |          S re   r  r  s     rg   r   zIGraphModuleSerializer.serialize_module_call_signature.<locals>.<listcomp>  s4       45,,Q//  rf   r<  r=  in_specout_specforward_arg_names)	r  rg  r?   r<  r=  r  r  r  r  r   r  namess   `  rg   serialize_module_call_signaturez5GraphModuleSerializer.serialize_module_call_signature  s     			8:OPPP"   9N9U     9N9V   ++,A,IJJ,,-B-KLL.@@ee
 
 
 	
rf   c                 T     t                               d            fd|D             S )Nz
[serialize_module_call_graph]c                 ~    g | ]9}t          |j        |j        r                    |j                  nd           :S N)fqnr  )r>   r  r  r  rm   entryr   s     rg   r   zEGraphModuleSerializer.serialize_module_call_graph.<locals>.<listcomp>  sc     

 

 

  I D88III  

 

 

rf   r  rg  r   rR  s   ` rg   serialize_module_call_graphz1GraphModuleSerializer.serialize_module_call_graph  sE     			3444

 

 

 

 +

 

 

 
	
rf   c                    dt           dt          fd}|j        dk    r4t          |j        t
          j        j        gt                      R           sJ t          |j                  }|j
        }t          |          dk    rg S |j        d         } ||j                  rlg }t          |          D ]D\  }}|                     ||          }	|                    |                     |	|                     Et#          j        |          gS t          |          dk    r|                     |j        |          gS g }
t          t+          ||                    D ]\  }\  }}|Vt          |j        t
          j        t
          j        f          sJ |
                    t#          j        d
                     at          |t2                    rmt          |j        t
          j        t
          j        f          sJ |                     ||          }	|
                    |                     |	|                     t          |t4                    rt          |j        t
          j                  r1t          |j                                        t
          j                  sJ |                     ||          }|J g }t          |          D ]G\  }}||                     ||          }|                    |                     ||                     H|
                    t#          j        |                     t          |t<          t>          t@          tB          f          rA|                     ||          }|
                    |                     ||                     PtE          dtG          |           d|$                                           |
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.
        r7  r   c                     t          |           }|j        }t          |          dk    rdS |d         j        }t	          |t
          j                  o+t	          |                                t
          j                  S )Nr%   Fr   )	r8  returnsr  	real_typerx   ry   ra  r`  rf  )r7  r  r  return_types       rg   _is_single_tensor_list_returnzNGraphModuleSerializer.serialize_outputs.<locals>._is_single_tensor_list_return  ss    ,V44FnG7||q  u!!*.Kk5>:: z**,,e.>@ @ rf   r  r   r  r  r%   NTr(  zUnhandled output type z from node )%r   r   r|   rx   r7  ry   rz   r{   r  r8  r  r  rf  r  r  ro  ri  r&   r   r  rL  r  r  r_  rf  r   rE  ra  r`  r  r   rQ   r   rO   
ValueErrorr   format_node)r   r   r  r  r  r  r  r  rf  rL  output_argumentsreturn_schemar  rw  r  msub_user_node_nameuser_node_names                     rg   r  z'GraphModuleSerializer.serialize_outputs  s
   (		# 		$ 		 		 		 		 w/))jK%*/P2M2O2OPP/
 /
)) 
 )55.w<<1I9U# )(55 	@K&x00 M M	T66tSAA""4#?#?d#K#KLLLLO{;;;<<\\Q))$)X>>?? *3C'4J4J*K*K %	 %	&C&$|!!+e.@%BR-S    
 !''(E(E(EFFFFD*-- !!+e.@%BR-S     66tSAA ''(=(=dD(I(IJJJJD$'' !!+U^   !+::<<e>N   
 !66tSAA	 ,,,%dOO U UDAqy )-)H)HTU)V)V&KK < <=OQR S STTTT ''4(H(H(HIIIID3x"@AA !%!@!@s!K!K ''(=(=nd(S(STTTT XT$ZZXXDDTDTDVDVXX    rf   c                    |j         d         }t          |t                    rAg }t          |          D ],\  }}|                     ||          }t          |t
                    r|J g }t          |          D ]~\  }}	t          |	t          j                  s t          dt          |	           d          | 
                    ||          }
|                    |                     |
|	                     |                    t          j        |                     ||j        n|j         d| }
|                    |                     |
|                     .|S t          |t"                    rg }|                                D ]~\  }}t          |t          j                  s t          dt          |           d          | 
                    ||          }
|                    |                     |
|                     t          j        |          gS |                     |j        |          gS )zN
        For serializing HOO outputs since HOOs do not have a schema.
        r  Nz Serialize list output with type z nyir  r  )rf  rx   r   r  r  rE  ry   rh  ra   r   r  ro  ri  r&   r   rL  r  r  rr   )r   r   r  r=  r  element_meta_valr  tensorsjr  rL  r  r  rf  s                 rg   r  z+GraphModuleSerializer.serialize_hoo_outputs:  sm    9U#h&& )	@G'0':': R R## 66tQ??	.55 R$000 G )*: ; ; N N1)!U\:: "0 P477 P P P# #   $>>y!LLt'C'CD!'L'LMMMMNN8?g#F#F#FGGGG
 %0 " $	66166  NN4#8#8?O#P#PQQQQN$'' 	@K%^^-- M M	T!$55 (K4::KKK   66tSAA""4#?#?d#K#KLLLLO{;;;<<))$)X>>??rf   rL  r  c                    |t          j        d          S t          |t          j                  r)t          j        |                     ||                    S t          |t          t          j        f          r)t          j        |                     ||                    S t          |t          t          j
        f          r@t          |t                    rJ t          j        |                     ||                    S t          |t          t          j        f          r)t          j        |                     ||                    S t          d|           )NTr(  r^  r#  r`  r!  zUnable to serialize output )r&   r   rx   ry   rh  ri  r   rK   r|  r   rQ   rj  r   rO   rz  ra   rv  s      rg   r  z&GraphModuleSerializer.serialize_outputk  s_   ?40000h-- 	?66tXFF    4"788 	? ::4JJ    3"566 
	!(D11111?88xHH    5%."9:: 	?!<<T8LL   
 E8EEFFFrf   c                    |j         d         }i }|j        D ];}|j        t          j        u sJ d| d| d            |j        ||j        d         <   <t          |          D ]\  }}||vr|j         d| ||<   g }t          |          D ]4\  }}	|                    | 	                    ||         |	                     5|S )Nr  z
User node z of z is incorrectr%   r  )
rf  r  r7  r  r  rL  rw  r  ro  ri  )
r   r   r  idx_to_namer  r  _arg_listr  r  s
             rg   _handle_getitem_usersz+GraphModuleSerializer._handle_getitem_users  s   9U#J 	2 	2D;("2222:T::t::: 322 )-	K	!%%)) 	? 	?FC +%%&*i#>#>#>#>C #,X#6#6 	 	AOO,,[^=MNN    rf   graph_modulec                    t          |t          j        j                  sJ t                              d|                    d                     |j        j        D ]r}	  t          | d|j
                   |           %# t          $ rA}t          d| d|                                 dt          j                               |d }~ww xY wt!          | j        j        | j        j        | j        j        | j        j        | j        j        | j        j        | j        j        | j        j        | j        j        	  	        S )	Nz[serialize_graph]

%sF)print_outputhandle_zFailed serializing node z in graph: 
 Original exception )	r<  r>  r?  r@  rB  rA  rD  r=  rC  )rx   ry   rx  r2   r  rg  print_readabler  r>  r  r|   r  ra   r  	traceback
format_excr0   rT  r<  r?  r@  rB  rA  rD  r=  rC  )r   r  r   r  s       rg   rY  z%GraphModuleSerializer.serialize_graph  sz   ,(<=====		%|'B'BPU'B'V'V	
 	
 	
 !&, 	 	D21112248888   $ Ct  C  C@P@P@R@R  C  Cjsj~  kA  kA  C  C 
 #*"(*8+:!-> ,<".@$,$($4$L

 

 

 
	
s    !B
C<CCrf  c                     i }|                     d          x}rYt                              d|           	 t          j        |          |d<   n%# t
          $ r}t          d|           |d }~ww xY w|S )Nr  z%
[serialize_graph_module_metadata] %sz9Failed to serialize custom metadata for graph with error )r  r  rg  r   r   r  ra   )r   rf  r  r  r  s        rg   serialize_graph_module_metadataz5GraphModuleSerializer.serialize_graph_module_metadata  s    XXh'''6 	II>GGG $
6 2 2H   $SPQSS 
 
s   A 
A0A++A0c                 "   t                               d           |                     |          }t          ||                     | j                  |                     | j                  |                     |j	                  | j
                  S )Nz
[serialize])r  r  rR  r  rW  )r  rg  rY  r2   r  rQ  r  rR  r  rf  rW  )r   r  r  s      rg   r[   zGraphModuleSerializer.serialize  s    		/"""$$\22..t/CDD">>t?UVV99,:KLL'+'F
 
 
 	
rf   rw   )Brb   rc   rd   rm  ExportGraphSignaturerE  r>   r   r   r[  ry   rx  rB   rq  rz  r+  r  r  r  r   r  r  r  r  r+   rn  r@   r  r   r  r  r   r  r  r  r  r&   rl  rS   ri  rR   rj  rP   rz  r|  r4   r  rD   r  r3   r  ArgumentSpecr  r  r?   r  r  r  r  r  r  r2   r0   rY  r  r[   re   rf   rg   r\   r\     sU       
G0
G   23
G 
G 
G 
G % % ^%4ux} 4 4 4 48X%(- X X X X	<C 	< 	< 	< 	<y/ y/ y/ y/ y/v5 5 5HUX]4K    " " " " ")ux} )c3h ) ) ) )V
!3
	
 
 
 
43F    * 	- --
 
m	- - - -^D4G    ,Ad A A A A
T 
 
 
 

t 
 
 
 

d 
 
 
 
R RXc] Rh R R R Rh) ) ) ) )
3. 3 3 3 3
5<L 5 5 5 5
4> 4 4 4 4
KC KC) KC KC KC KCZ@C"- @CJ @C @C @C @CD
r'> 
> 
 
 
 
) )X ) ) ) ) # # #@
%'%;
	
 
 
 
$
!%b&8!9
	o	
 
 
 
 f ehm f X f  f  f  f P/@%(- /@DN /@ /@ /@ /@bGS GC GH G G G G:%(- D<P    2
EH,@ 
U 
 
 
 
4DcN    

eh&: 

{ 

 

 

 

 

 

rf   r\   )	metaclassc                   Z    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dS )r]   Nopset_versionr  c                     i | _         |r| j                             |           d| j         vr&t          j                                        | j         d<   || _        d S Naten)r  updatery   rj  _get_max_operator_versionr  )r   r  r  s      rg   r   z"ExportedProgramSerializer.__init__  sb    
 .0 	5%%m444+++).)K)K)M)MDv&.rf   r   r   c           
      &   |                                  t          |j        |j                  }|                    |j                  }t          |j                  }|j        	                                }|j
                                        D ]\  }}||vsJ |||<   t          || j        |t          t          d         t          d                   d |j        D             t"          j        |j                  }t)          |t+          |                                                     t/          |j        d          }	t3          |t5          |	| j                  t5          || j                  t5          |j        | j                            S )zS
        Args:
            exported_program: Exported Program to serialize
        r   r%   )majorminorc                     g | ]	}|j         
S re   )dialectrm   ro   s     rg   r   z7ExportedProgramSerializer.serialize.<locals>.<listcomp>  s    EEEQqyEEErf   r  r  r-  schema_version	verifierstorch_versionguards_codeF)in_place)validater\   rQ  rR  r[   r  r2  r-  rU  copyr   rr   r-   r  rJ   rI   r  ry   __version___guards_codecanonicalizer   r  r$   r   r   r  r  r   )
r   r   gm_serializerserialized_graph_moduleserialized_range_constraintsr   nr   serialized_epnew_state_dicts
             rg   r[   z#ExportedProgramSerializer.serialize  s   
 	!!###-,.>.P
 
 #0"9"9:J:W"X"X'B.(
 (
$ %2$=$B$B$D$D	$.4466 	 	DAqI%%%%IaLL'0,:($Q'$Q'   FE*:*DEEE+(5
 
 
 	]C	(8(8$9$9::: 6'%
 
 
 "$^T5IJJ$Y0DEE$ /1E 	
 
 	
rf   )rb   rc   rd   DEFAULT_PICKLE_PROTOCOLr   r  r+  r   r   rm  r-   r   r[   re   rf   rg   r]   r]     sz         376/ /S#X// / / / /2
"*< 2
AS 2
 2
 2
 2
 2
 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j        f         fdZdedeeej        f         fdZdedefdZdede j        fdZ!deeej"        j#        ef                  fdZ$de%dej"        j%        fdZ&de#de'ddfdZ(de)de j)        fdZ*de+de j+        fdZ,de-de j.        fd Z/	 	 dEd!e0d"ee1e
ej2        f         e3f         d#ee1e
e4f         e3f         d$eee5e5ej2        d%f         e1e
e4f         f         e3f                  d&ee1e
e6j7        f                  defd'Z8d(e
d)ej"        j#        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j"        j#        fd3ZDde#d)ej"        j#        fd4ZEd)ej"        j#        d5eeFeGeHf         d6ed7e1e
e4f         fd8ZId)ej"        j#        d7e1e
e4f         fd9ZJde#d)ej"        j#        ddfd:ZKd;e1e
e
f         de1e
e4f         fd<ZLd=e?de jM        fd>ZNd?eOde jO        fd@ZPdAe<eQ         de<e jQ                 fdBZRdS )Fr^   c                   8   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<   d	S )
GraphModuleDeserializer.Resultr  r  rR  names_to_symbolsr   r   .r   N)rb   rc   rd   ry   rx  r2   r   rm  r  rE  r>   r  r+  r   r   r   rh  r   r   r   r   r   r   re   rf   rg   Resultr%    s         h******** 23333sEL01111eEL%(2D$DEEFFFF334444 uU\3->'?c3h'O!PQQQQQQrf   r'  r   Nc                     i | _         t                      | _        t          j                                        | _        t          j                                        | _	        d S rw   )
serialized_name_to_noder   serialized_name_to_metary   rx  r0   r  r   Moduler  r   s    rg   r   z GraphModuleDeserializer.__init__%  s@    AC$07		$X^^%%
hoo''rf   c              #     K   | j         | j        | j        | j        | j        f}t
          j                                        | _         t
          j        	                                | _        i | _        t                      | _        t                      | _        	 d V  |\  | _         | _        | _        | _        | _        d S # |\  | _         | _        | _        | _        | _        w xY wrw   )r  r  r)  r*  unbacked_symbolsry   rx  r0   r   r+  r   r   rY  s     rg   save_graph_modulez)GraphModuleDeserializer.save_graph_module+  s       JK((!
 X^^%%
hoo''')$'.yy$3655		EEE 
,,%%%
,,%   s   B> >#C!serialized_targetc                     |                     d          \  }}|dd          }t          |         }|                    |          S )Nr  r%   )split_deserialization_registryfrom_op_name)r   r/  r  r  r  s        rg   deserialize_extension_operatorz6GraphModuleDeserializer.deserialize_extension_operatorD  sE    .44S99	7abbM	+I6##G,,,rf   c                    |                     d          r%t          }|                    d          dd          }n|                     d          r%t          }|                    d          dd          }nf|                     d          r%t          }|                    d          dd          }n,|                     d          r|                     |          S |S |}|D ]&}t          ||          s|c S t          ||          }'|S )N	_operatorr|  r%   ry   r!  r  )r}  r  r1  ry   r!  r4  r  r  )r   r/  r  serialized_target_namesr7  rL  s         rg   deserialize_operatorz,GraphModuleDeserializer.deserialize_operatorJ  s3   ''
 
 	% F&7&=&=c&B&B122&F##))'22 		%F&7&=&=c&B&B122&F##))&11 	%F&7&=&=c&B&B122&F##))#.. 	%667HI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.
        Nr(  r   r   c                    | j         s| j        s| j        r| S t          |           }| j        D ]}                    |           |j        v rj        |         } ni| j        |<   t          | t          j	                  rEt          j        | t          j        t          j        f          rj                            |            |)| j        j        vrj                            | |           j                            |          x}r'j                            | |j        |j                   t          | t          j	                  r"t3          j        d          j        j        | <   | S )N)compiler_mincompiler_maxr%   )skip)
is_Integeris_Float
is_Booleanr+  rw  _parse_sym_exprsymbol_name_to_symbolrx   r   r   r   symbol_is_typer   UNBACKED_INTUNBACKED_FLOATr-  r   	shape_env
var_to_valadd_var_to_valsymbol_name_to_ranger  constrain_symbol_ranger0  r1  r!   extractvar_to_stack)r(  r   r   rv  vrr   s        rg   _process_sym_exprzBGraphModuleDeserializer._parse_sym_expr.<locals>._process_sym_exprk  s    ~ Y Y Y
 s888 . .C((----t9994X>CC;>D.x8!#u|44 79Wd/1DE: : 7 -11#666#4>3L(L(LN11#t<<<266x@@@2 N99%'X%'X :    c5<00 Y7H7PVW7X7X7XDN/4Jrf   )localsrw   )
r   Exprr   r   r   r   r   sympifysympy_functionsrB  )r   r   r   rN  r   s   `    rg   rA  z'GraphModuleDeserializer._parse_sym_exprc  s     HL!	 !	!	#+E#tU2B,C#D!	Z!	 !	 !	 !	 !	 !	F }Id*Id.HI
 
 
 ! t,,,rf   r   c                 l   |j         }|j        dk    r_|j        d }n|j        j        dk    sJ |j        j         }|                     |j        |          }| j                            ||          S |j        dk    rt          |          t          u sJ |S t          d|j         d|j                    )Nr   r   r   zSymInt has invalid field type  with value )	rk   r   r   rA  r   rF  create_symintnoder   ra   r   r   r  r   r(  s        rg   deserialize_sym_intz+GraphModuleDeserializer.deserialize_sym_int  s    g6Yxx}0000x~&&s|T::C>33Cd3CCCVx99####J NNNQWNN  rf   c                 D   |j         }|j        dk    rL|j        r|j        j        nd }|                     |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 rT  )rk   r   r   r   rA  r   rF  create_symfloatnoderx   r   ra   rV  s        rg   deserialize_sym_floatz-GraphModuleDeserializer.deserialize_sym_float  s    g6Y(+:38$$dD&&s|T::C>55c5EEEVz!!c5)))))J P16PPqwPP  rf   c                    |j         }|j        dk    r4|                     |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 rT  )	rk   r   rA  r   rF  create_symboolnoderx   r   ra   )r   r   r  r   s       rg   deserialize_sym_boolz,GraphModuleDeserializer.deserialize_sym_bool  s    g6Y''55D>44T:::Vy  c4(((((J O!&OOagO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xY w Y   d S )Nc              3   B   K   | ]}                     |          V  d S rw   rW  rm   r  r   s     rg   r}   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>  s1      UUC$22377UUUUUUrf   c              3   B   K   | ]}                     |          V  d S rw   r`  ra  s     rg   r}   zBGraphModuleDeserializer.deserialize_tensor_meta.<locals>.<genexpr>  s1      WWC$22377WWWWWWrf   )r   r   r   )fake_tensor_moder   r   ry   empty_stridedr   r   r   r   r   r   r   r   )r   r   s   ` rg   r  z/GraphModuleDeserializer.deserialize_tensor_meta  s     " 
	 
	#UUUU;CTUUUUUWWWW;CVWWWWW-k.@AA3K4EF"-";  	 	
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	s   BB%%B),B)r  c                 B    t          j        |j        |j                  S )Nrb  )rm  r+   rL  rc  r  s     rg   deserialize_script_obj_metaz3GraphModuleDeserializer.deserialize_script_obj_meta  s*     # %%/
 
 
 	
rf   c                    |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d S t          d	|           )
Nr_  ra  r$  r"  r   r   r   r)  z"Unable to deserialize output node )r   r)  r_  rL  ra  r   r$  r"  r   r   r   ra   )r   rs  s     rg   deserialize_graph_outputz0GraphModuleDeserializer.deserialize_graph_output  s    ;+%%/0@0EFF[L((/0A0IJJ[M))/0B0JKK[N**/0C0KLL[H$$= [J&&?"[I%%>![I%%4 !Nf!N!NOOOrf   serialized_graphc           	      	    t                               d           |j                                        D ]0\  }}t                               d||           |f fd	 j        |<   1|j                                        D ]0\  }}t                               d||           |f fd	 j        |<   1|j                                        D ]0\  }}t                               d||           |f fd	 j        |<   1|j                                        D ]0\  }}t                               d||           |f fd		 j        |<   1|j                                        D ]/\  }}t                               d
|           |f fd	 j        |<   0t                               d           t          |j
                  D ]X\  }}	t                               d|	           |	j        dv rD|	j        j        }
 j                            |
          }|
|_                             |
|           n|	j        dk    rl|	j        j        dk    rD|	j        j        }
 j                            |
          }|
|_                             |
|           t%          d|	j         d          |	j        dv rZ j        j        |         j        j        pd| }
 j                            |
          }                     |	          |j        d<   Ht%          d|	           |j        D ]l}	                      |j                  }                     ||           4# t8          $ r,}t%          d| dt;          j                               |d }~ww xY wg }|j        D ]E}t                               d|           |                      !                    |                     F|j"        rtG          |          dk    sJ |d         }ntI          |          } j        %                    |          }|j"        r!|j&        d         j        d         |j        d<   n,tI          d |j&        d         D                       |j        d<    j        j        D ]M}|j        '                    d          x}/tQ          j)        |d j*         j+        d          x}r
||j        d <   NtG           j+                  dk    sJ  j        S )!Nz
[deserialize_graph]z([deserialize_tensor_meta] %s (input): %sc                 .                         |           S rw   )r  ro   r   s    rg   <lambda>z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>  s    t'C'CA'F'F rf   z$[deserialize_sym_int] %s (input): %sc                 .                         |           S rw   r`  rl  s    rg   rm  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>  s    (@(@(C(C rf   z&[deserialize_sym_float] %s (input): %sc                 .                         |           S rw   )rZ  rl  s    rg   rm  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>  s    $*D*DQ*G*G rf   z%[deserialize_sym_bool] %s (input): %sc                 .                         |           S rw   )r]  rl  s    rg   rm  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>  s    )B)B1)E)E rf   z [deserialize_script_obj_meta] %sc                 .                         |           S rw   )rf  rl  s    rg   rm  z;GraphModuleDeserializer.deserialize_graph.<locals>.<lambda>  s    $*J*J1*M*M rf   z
[deserialize graph nodes]z[deserialize input] %s)r_  re  ra  r   z Deserializing a constant symint z as an input)r   r   r   r)  r  rv  r  zInvalid input type zFailed deserializing node r  z[deserialize output] %sr%   r   c              3   r   K   | ]2}t          |t          j        j                  r|j        d          n|V  3dS )r  N)rx   ry   rx  rB   rf  r  s     rg   r}   z<GraphModuleDeserializer.deserialize_graph.<locals>.<genexpr>P  sS       , , $.c58=#A#AJs, , , , , ,rf   re   T)rF  pendingsimplifyunbacked_bindings),r  rg  r?  rr   r*  r@  rB  rA  rD  r  r<  r   rk   rL  r  r]  sync_fx_noder   ra   r  r  rv  deserialize_inputrf  r>  r8  r7  deserialize_noder  r  r  r=  ro  rh  rC  r  r   rs  rw  r  r    _free_unbacked_symbols_with_pathrF  r-  )r   ri  rL  tensor_valuesym_int_valuesym_float_valuesym_bool_valuer  r  input_	node_nameplaceholder_nodeserialized_noder7  r  r=  rs  output_noder   r  ru  s   `                    rg   deserialize_graphz)GraphModuleDeserializer.deserialize_graph  s   		)*** #3"@"F"F"H"H 	 	D,II@$UUU%FFFFF (.. $4#B#H#H#J#J 	 	D-II<dMRRR&CCCCC (.. &6%F%L%L%N%N 	 	!D/II>oVVV(GGGGG (.. %5$D$J$J$L$L 	 	 D.II=t^TTT'EEEEE (.. &6%G%M%M%O%O 	 	!D/II8/JJJ(MMMMM (.. 			/000"#3#:;;  	E  	EIAvII.777{<<<"L-	#':#9#9)#D#D  )2 %!!)-=>>>>,,<$	11 & 4I'+z'='=i'H'H$ -6$)%%i1ABBBB(U6<UUU    !   !N6q9=BOiAii	#':#9#9)#D#D /3/E/Ef/M/M %e,,$%C6%C%CDDD  05 	 	O22?3IJJ%%ov>>>>   $pppXaXlXnXnpp  &. 	B 	BFII/888NN488@@AAAA3 	%w<<1$$$$ajGGGnnGj''003 	&1&6q&9&>u&EKU##&+ , ,&+A., , , ' 'KU# J$ 
	C 
	CDy}}U+++8%4%U"n 1!& & & ! 9 2C	-.4())Q....zs   0M
N'NNr  r7  c           
      j	   dt           fd}|t          v s|t          j        j        j        j        k    rg|j        d         j        j	        }| 
                    |j                  }| j                            d||i |          }|                     ||           nw|t          j        j        j        u rt%          d          t'          |t          j        j                  rC|                     |j                  \  }}|                     |j                  }g ||                                R D ]F}	t'          |	t          j        j                  r%|	j        dk    r|	j                            |           Gt?          |j                  dk    rCtA          |j        d         d          r(tC          |d	d
          r|j        d         j"        j#        nd }| j                            d||||          }| $                    ||           |j                            |           nt'          |t          j        j%        gtM                      R           rr ||          r|j        d         j"        j#        nd }| '                    ||          \  }}| j                            d||||          }| $                    ||           nLt'          |tP                    rd| ddz   dz   dz   nd}
t%          |
d| dtS          |           dz             |j                            |                     |j                             tT          +                    d|j#        |j,        |j-        |j.        |j        /                    d                     |t          j        j        j0        j        k    rpt'          |j-        d         x}t                     sM|j        d         }t'          |t          j1                  r&| j2        3                    |j4        j5        d|           nu|t          j        j        j6        j        k    rV|j-        d         j        d         }t'          |t          j7                  r$| j2        8                    |j4        j5                   |j        dvrd|j        vri |j        d<   d S d S d S )Nr   c                     t          |           }|j        }t          |          dk    o$t          |d         j        t
          j                  S )Nr%   r   )r8  r  r  rx   r  ry   rf  )r7  r  r  s      rg   _is_single_tensor_returnzJGraphModuleDeserializer.deserialize_node.<locals>._is_single_tensor_returnf  sI    ,V44FnGw<<1$ 
$e&6* * rf   r   r  z_deserialize nyi for torch._higher_order_ops.triton_kernel_wrap.triton_kernel_wrapper_functionalr  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]  rs  r  )9r   r  ry   opsr  itemr&  r=  rk   r   deserialize_sym_op_inputsr<  r  create_nodedeserialize_sym_op_outputsr  r  r  ra   rx   rz   r  deserialize_hoo_inputsdeserialize_metadatar  rs  rx  rB   r|   rf  r	  r  r  r  r_  rL  deserialize_outputsr{   r  deserialize_inputsr+  r   r  rg  r7  rw  r  r  _assert_scalarrK   rF  guard_or_defer_runtime_assertr   r   sym_constrain_range_for_sizerQ   _constrain_range_for_size)r   r  r7  r  rL  rw  fx_noder  r  r  _additional_msgrv  r   r(  s                 rg   rx  z(GraphModuleDeserializer.deserialize_nodee  s   	 	 	 	 	 hy~"*+ + #*1-3;D11/2HIIDj,,_fdBPTUUG++OWEEEE&9Z[ [ !q   
 >?? =	667MNNLD&001IJJH.t.fmmoo.. , ,a// ,ADJ4F4F FMM(+++ .//144O3A6DD 5O-JDQQ 5  '*499   j,,vt G $$_g>>>L))))UZ*K-H-J-JKK
 
 	 ,+F33'*499 
  226?KKLD&j,,vt G $$_g>>>> fc**EFEEEuvmn DD D   !YYY$v,,YYYZ  
 	D55o6NOOPPP		7LNLNLU##	
 	
 	
 UY^2:::gl1o5s== xdEM22 N@@	G   uy~BJJJ,q/&u-C#u|,, H88GGG J777!55.0GL*+++ 8755rf   r  c           	         t                               d|           |j        dk    rCt          j        t          j        j        |                     |j        j	                  d           S |j        dk    rRt          j        t          j        j
        t          j        |j        j	        j                  |j        j                  S |j        dk    r]t          j        t          j        j        t          j        |j        j	        j                  |j        j        |j        j                  S |j        dk    rRt          j        t          j        j        t          j        |j        j	        j                  |j        j                  S |j        d	k    rbt          j        t          j        j        t          j        |j        j	        j        |j        j	        j        
          |j        j                  S |j        dk    rHt          j        t          j        j        t          j        |j        j	        j                  d           S |j        dk    rat          j        t          j        j        t          j        |j        j        |                      |j        j!                            d           S tE          d|           )Nz[deserialize_input_spec] %sr  r  rv  r7  r  r  r  )r  rv  r7  r  r  r  rb  r  r  r  zUnknown input spec )#r  rg  r   rm  r4   r  r  deserialize_argument_specr  rv  r  rS   r  rL  r  r  r  r  r  r  r  r  r  r+   r  rc  rt  r  rU   r  r  r  deserialize_constant_inputrk   rk  )r   r  s     rg   deserialize_input_specz.GraphModuleDeserializer.deserialize_input_spec  s   		/3336\!!<\,221<3CDD   
 V{""<\+%1;?+?@@@{1   
 Vx<\(%18<+<===x+8.	    V(((<\1%1+<+@+EFFF(=   
 V|##<\,().!,:J:T   |3    Vw<\'$!'+*:;;;   
 V'''<\,').99!:J:PQQ       !!:q!:!:;;;rf   oc                    t                               d|           |j        dk    rCt          j        t          j        j        |                     |j        j	                  d           S |j        dk    rHt          j        t          j        j
        t          j        |j        j	        j                  d           S |j        dk    rRt          j        t          j        j        t          j        |j        j	        j                  |j        j                  S |j        dk    rRt          j        t          j        j        t          j        |j        j	        j                  |j        j                  S |j        dk    rRt          j        t          j        j        t          j        |j        j	        j                  |j        j                  S |j        d	k    rRt          j        t          j        j        t          j        |j        j	        j                  |j        j                  S |j        d
k    rRt          j        t          j        j        t          j        |j        j	        j                  |j        j                  S |j        dk    rHt          j        t          j        j        t          j        |j        j	        j                  d           S t=          d|           )Nz[deserialize_output_spec] %sr  r  r  r  r  r  r  r  r  r  zUnknown output spec )r  rg  r   rm  rD   r  r  r  r  rv  r  rS   r  rL  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rU   r  rk  )r   r  s     rg   deserialize_output_specz/GraphModuleDeserializer.deserialize_output_spec	  s   		0!4446]""=].221=3DEE   
 V}$$=].%1=+<+ABBB   
 V(((=]2%1+<+@+EFFF(4   
 V+++=]5%1+?+C+HIII+:   
 V...=]8%1+B+F+KLLL.=   
 V///=]9%1+C+G+LMMM/?   
 V,,,=]6%1+@+D+IJJJ,<   
 Vw=]($!'+*:;;;    !!;!;!;<<<rf   r  c                      t                               d           t          j         fd|j        D              fd|j        D                       S )Nz
[deserialize_signature]c                 :    g | ]}                     |          S re   )r  )rm   r  r   s     rg   r   zAGraphModuleDeserializer.deserialize_signature.<locals>.<listcomp>H	  s'    QQQA44Q77QQQrf   c                 :    g | ]}                     |          S re   )r  )rm   r  r   s     rg   r   zAGraphModuleDeserializer.deserialize_signature.<locals>.<listcomp>I	  s'    TTTa$66q99TTTrf   r  )r  rg  rm  r  r  r  r  s   ` rg   deserialize_signaturez-GraphModuleDeserializer.deserialize_signatureE	  sc    		-...&QQQQQQQTTTT3CSTTT
 
 
 	
rf   r  serialized_state_dictr   r   .rI  c           	         t           J | a 	 t                              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        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        t          j	        j
        j        j        t          j	        j
        j        j        t          j	        j
        j        j        t          j	        j
        j        j         t          j	        j
        j        j!        d| _"        i | _#        tI          |          | _%        | &                    |j'                  | _'        i | _(        tS                      | _*        d\  }}d tV          j,        tV          j-        fD             \  }}	|r|.                                D ]\  }
}|j/        }t          j0        tc          |td                     |j3                  | j(        |
<   |
4                    |          r5tk          |
tm          |          d                    }to          ||          }|
4                    |	          r4tk          |
tm          |	          d                    }to          ||          }tq          |dz             D ]}ts          | j        j:                   tq          |dz             D ]}ts          | j        j;                   |(tm          |          dk    rtI          |          | _<        nd | _<        | =                    |j>                   t          | j<                  5  | @                    |jA                  }d d d            n# 1 swxY w Y   t          jC        | jD        | j>                  }i }|jE        F                    d          x}rt          jH        |          |d<   t          |d          r4i |d<   |jJ        .                                D ]\  }}|jK        |d         |<   ||_L        t          N                    || j'        || j#        tI          |          | j%        | j<                  d a S # d a w xY w)Nz
[deserialize]T)assume_static_by_defaultF)allow_fallback_kernelsallow_non_fake_inputsrF  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   0   K   | ]}t           |         V  d S rw   )r   )rm   r   s     rg   r}   z6GraphModuleDeserializer.deserialize.<locals>.<genexpr>	  s?       @ @"#
1@ @ @ @ @ @rf   r%   r   r  rW  )r  r  rR  r&  r   r   r   )Or   r  rg  r   ShapeEnvrF  r   rc  ry   utils_sympy	functionsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rR  rB  r  r   r  r  rI  r   r-  r   rE  rD  rr   r0  r    r'  r   r1  r}  r   r  maxrangenextunbacked_symfloat_counterunbacked_symint_counterr   r  r  r   deserialize_module_call_graphrR  rm  _create_graph_module_for_exportr  r  r  r   r   r  rW  r  rf  r^   r'  )r   r  r  r   r   rI  count_unbacked_symfloatcount_unbacked_symintunbacked_symfloat_prefixunbacked_symint_prefixrn   rM  r0  r  r  rR  r  rf  r  type_fieldss                        rg   deserializez#GraphModuleDeserializer.deserializeL	  s    %,,, $h	)II'(((,5tTTTDN$2',&*.% % %D!
$
 EK.8A$ "5;#5#?#O$ +5;$ U[/9C$ u{)37$ EK.8A$ U[/9C$ ek0:E$ 5;-7?$ %+,6=$ %+,6=$   2 < I!$" EK.8A#$$  2 < I%$& ek0:E'$( 4U[5G5Q5s)$*  2 < I+$, $k0:E#k0:E % 2 < I ;-7?!K.8A5$ $ $D 8 CED&7	BBDN!77'1 DN )+D% %(EED!=C:#%:@ @(,(;T=N'O@ @ @<$&< $ N17799 
N 
NEArHE3B3N)%&99284 4D-a0 ||$<== N#&>"?"?"A"A BCC256Mq2Q2Q//&<== N#&<"="="?"? @AA034I10M0M- 2Q677 ? ?T^=>>>>01455 = =T^;<<<<)c..A.AA.E.E&@&P&P##&*#""#:#@AAA78KLL  $($F$F+=% %!               =dk4:VVLD09==hGGGv 4!%F!3!3X.0LMM S5712 -GMMOOS S @F@RD56u== $L*11)."3!%!;56KLL.#2 2   %)!!D!((((s1   SW? *TW? TW? TC#W? ?XrL  r  c                     || j         v rt          d| d          ||_        || j         |<   d|j        vsJ | j        |         |j        d<   d S )NzNode z& has already been deserialized before.r  )r)  ra   rL  rf  r*  )r   rL  r  s      rg   rv  z$GraphModuleDeserializer.sync_fx_node	  sk    4/// !U!U!U!UVVV-4$T*GL((((":4@Urf   c                 :     t           fd|D                       S )Nc              3   L   K   | ]}                     |j                  V  d S rw   )rw  rv  rm   inputr   s     rg   r}   zDGraphModuleDeserializer.deserialize_sym_op_inputs.<locals>.<genexpr>	  s3      KK5T++EI66KKKKKKrf   )r   )r   r<  s   ` rg   r  z1GraphModuleDeserializer.deserialize_sym_op_inputs	  s&    KKKKFKKKKKKrf   c                     t          |          j        }d |j        D             } fd|j        D             }g }t                      }|D ]w}|j        |v rt||j                 }	||j                 }
|
t
          j        k    r|                    |	           L|
t
          j        k    r$t          j
        |j                  s|	||j        <   |                                 o|j         }|r!|                    ||j                            t          j
        |j                  r|j        rJ t          |          dk    rBt                      }|                    t          |                                                     |                    ||j                            Y|j        |v r||j                 ||j        <   yt#          |          |fS )Nc                 (    i | ]}|j         |j        S re   )rL  r  )rm   r  s     rg   rp   z>GraphModuleDeserializer.deserialize_inputs.<locals>.<dictcomp>	  s    UUUU%*ejUUUrf   c                 P    i | ]"}|j                             |j                  #S re   )rL  rw  rv  r  s     rg   rp   z>GraphModuleDeserializer.deserialize_inputs.<locals>.<dictcomp>	  s=     
 
 
 J..uy99
 
 
rf   r   )r8  r  r<  r   rL  r'   r  ro  r   keyword	iskeywordhas_default_valuer  r  r  rE  rs  r   )r   r7  r  schema_argsargument_kindsactual_argsrw  r  r  rv  r  is_positionals   `           rg   r  z*GraphModuleDeserializer.deserialize_inputs	  s   -f55?UUo>TUUU
 
 
 
(/
 
 
 (3% 	K 	KJ+--!*/2%jo6<222KK$$$\111':KO; ;1 /2F:?+ 00222P:;P7P   
KK
89999":?33 K%0000v;;??(]]FKKV]]__ 5 5666K
89999?k11.9*/.JF:?+T{{F""rf   r<  c                     g }i }|D ]]}|j         dk    r#|                     |j                  ||j         <   0|                    |                     |j                             ^t	          |          |fS )zO
        For deserializing HOO inputs since HOOs do not have a schema.
        r  )rL  rw  rv  ro  r   )r   r<  rw  r  r~  s        rg   r  z.GraphModuleDeserializer.deserialize_hoo_inputs	  s      	@ 	@F{b  &*&<&<VZ&H&Hv{##D226:>>????dV$$rf   inpc                 p    j         }j        }|dk    rd S |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                                  5                       |j                   t!          j         j         j                  }d d d            n# 1 swxY w Y    j                            |j        |            j                            d|j        |j                  S |d	k    rt+          j                  S |d
k    rj        S |dk    rj        S |dk    rj        S |dk    rj        S |dk    r$t7          j        j        j        j                  S |dk    r                     j                   S |dk    r                     j!                  S |dk    r                     j"                  S t          |tF                    rtI          |          dk    rg S |dk    r fd|D             }|S |dv rtG          |          S |dv r fd|D             S |dk    r# fd}tG          tK          ||                    S tM          d           |dk    rAj'        j         j        v r j        j'        j                 S  j(        j'        j                 S |dk    r )                    j*                  S tM          d           )Nr)  r_  rL  rN  rO  r  r  r  rM  r   r   r   r  r'  ra  r"  r$  r   r  c                 4    g | ]}j         |j                 S re   )r)  rL  ru  s     rg   r   z=GraphModuleDeserializer.deserialize_input.<locals>.<listcomp>3
  s#    RRRS$6sx@RRRrf   )r+  r,  r*  r-  )r5  r<  r8  c                 :    g | ]}                     |          S re   )deserialize_sym_argumentru  s     rg   r   z=GraphModuleDeserializer.deserialize_input.<locals>.<listcomp>9
  s'    LLLs55c::LLLrf   rC  c                     | j         dk    rd S | j         dk    rj        | j        j                 S t	          d           )Nr)  r_  Unhandled argument )r   r)  rk   rL  ra   )r	  r  r   s    rg    deserialize_optional_tensor_argszSGraphModuleDeserializer.deserialize_input.<locals>.deserialize_optional_tensor_args<
  sK    v**#t;..#;AGLII,-H3-H-HIIIrf   r  re  rS  )+rk   r   r)  r_  rL  r   rL  !_SERIALIZE_TO_TORCH_MEMORY_FORMATrN  _SERIALIZE_TO_TORCH_LAYOUTrO  rx   r1   r.  r  r  rm  r  r  register_moduler  r   rM  r   r   r   r  r^  r'  r%  r&  r  ra  r"  r$  rE  r  r   ra   re  r   r8  rS  )r   r  rk   typ_	submoduleresultr  s   ``     rg   rw  z)GraphModuleDeserializer.deserialize_input
  s   	x9 4[  /0BCC%%%,S-?@@'''4S5IJJ[  -cm<<Ze]33333'')) X X&&u{333>t{DJWW	X X X X X X X X X X X X X X X K''
I>>>:))
Z *   
 [  %cm444X:Z<Y;[  = \!!3>.0CDDD\!!00@@@^##001ABBB]""00AAAt$$  	>5zzQ	%%RRRRERRRKKKE{{"IIILLLLeLLLL...J J J J J J C @%HHIII$%@3%@%@AAA_$$ %)EEE3C4E4JKK>#"3"899]"",,S_=== !<s!<!<===s   /:C55C9<C9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d S t          d| d          )Nr   r   r  r   r)  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_inputQ
  s    8xsz??"X##&&&X$$s}%%%X""$$$X""4 !T!T!T!TUUUrf   c                    t          |t                    r0|j        dk    r|j        S |j        dk    r| j        |j                 S nt          |t                    r0|j        dk    r|j        S |j        dk    r| j        |j                 S nDt          |t                    r/|j        dk    r|j	        S |j        dk    r| j        |j                 S t          d|           )Nr   r   r   r   z Unknown symbolic argument type: )rx   rR   r   r   r)  r   rP   r   rL   r   ra   )r   sym_args     rg   r  z0GraphModuleDeserializer.deserialize_sym_argument_
  s    g~.. 	E|x''~%**3GODD +!122 		E|z))''**3GODD +11 	E|y((&**3GODDIIIJJJrf   c                 \    |                      |j        d         j        j        |           d S )Nr   )rv  r=  rk   r   )r   r  r  s      rg   r  z2GraphModuleDeserializer.deserialize_sym_op_outputsq
  s,    /1!4:BGLLLLLrf   c                     t          |j                  dk    rd S t          |j                  dk    rAd|j        v r8t          |dd          s'|j        d         j        dk    r fd} |||          S t          |j                  dk    rC|j        d         j        dk    r-                     |j        d         j        j        |           d S t          |j                  dk    r_t          |j        d         j	        t          t          t          f          r-                     |j        d         j	        j        |           d S t          |j                  dk    rW|j        d         j        dk    rAd |j        d	<   |                     j                            |j                   d
           d S                      ||           d S )Nr   r%   ztorch.ops.higher_orderr  Tr)  c                    g }d }| j         d         j        dk    r| j         d         j        }nDt          | j         d         j        t
          t          t          f          r| j         d         j        }                    | j	                  }|J 
                    |||d|           t          |          |j        d<   |j        |j        <   d S )Nr   r_  r  )r=  r   r_  rx   rk   rR   rL   rP   r  r  generate_getitemr   rf  r)  rL  )r  r  r  rv  deserialized_metadatar   s        rg   #_deserialize_hop_with_single_returnzXGraphModuleDeserializer.deserialize_outputs.<locals>._deserialize_hop_with_single_return
  s    &("*1-2kAA)1!4>CC#+A.4#_6FG  ; *1!4:C(,(A(A#,) )% %%haAVWWW&+HooU#=D,W\:rf   r_  r  _unused)r  r=  r7  r  r   rv  r_  rL  rx   rk   rR   rL   rP   r   rf  _renamer  _target_to_strdeserialize_multiple_outputs)r   r  r  r  s   `   rg   r  z+GraphModuleDeserializer.deserialize_outputst
  s   &''1,,F '((A--(O,BBBO-JDQQ C'*/9<<    & 76PPP '((A--'*/;>>o5a8BGQQQF())Q..:#A&,_.>?4
 4
. o5a8>FPPPF'((A--'*/9<< #'GLOOtz88HHQQQRRRF))/7CCCCCrf   rv  r  r  c                    t          |t                    r|j        }nYt          |t                    r|j        }n<t          |t
                    r|j        }nt          dt          |                     | j        	                    dt          j        ||f|          }|                     ||           |                    | j        |                    |j                            |           d S )Nz+generate_getitem got unknown argument type r  r  )rx   rS   rL  rR   r   rP   rk  r   r  r  r  r  rv  ro  r*  rf  r	  )r   r  r  rv  r  r  rL  individual_outputs           rg   r  z(GraphModuleDeserializer.generate_getitem
  s     c>** 		8DD^,, 	;DD-.. 	;DD Id3iiII   !J22cN	 3 
 
 	$ 12224T:;;; 	%%&;<<<<<rf   c                 T   t          |          D ]\  }}t          |t          t          t          f          r|                     |||||           Bt          |t                    sJ |j        dv r|                     |||j        ||           |j        dv r| j	        
                    dt          j        ||f          }|                    g            |                     |d         ||j        |           |j                            |           |d         |j        d<   |j        dk    re| j	        
                    dt          j        ||fd          }|                    d            d |j        d<   |j                            |           t#          d|           d S )	N)r_  ra  r"  )r  r5  r8  r+  r,  r-  r*  r<  r  r  r  r)  r  z Unimplemented node output type: )r  rx   rS   rR   rP   r  r&   r   rk   r  r  r  r  ro  generate_getitemsrf  r	  NotImplementedError)	r   r  r  rw  r  r  rv  list_outputr  s	            rg   r  z)GraphModuleDeserializer.generate_getitems
  s    "$ ,	T ,	THC#@PQRR %%gsC1F   c8,,,,,xFFF%%gsy#7L     	 	 	 #j44#$cN 
 ###&&RL+sy:O    ''(=>>>*22, ''Y&&$(J$:$:#$cN"	 %; % %! %%%04!&u-!&--.CDDDD)*RS*R*RSSSY,	T ,	Trf   c                    |                      |j                  }g }t          |j                  dk    r}t	          |j        d         j        t                    sJ t	          |j        d         j        d         t                    sJ |                     |||j        d         j	        |           n|                     |||j        |           t          |          |j        d<   || j        |j        <   d S )Nr%   r   r  )r  r  r  r=  rx   rk   rE  rS   r  r  r   rf  r)  rL  )r   r  r  r  r  s        rg   r  z4GraphModuleDeserializer.deserialize_multiple_outputs
  s    !% 9 9/:R S S !&''1,,o5a8>EEEEEo5a8>qA>RRRRR""'*5%	    ""'?#:<Q  
 $HooU5<$W\222rf   r  c                     i }|                     d          x}r||d<   dt          f fd}|                     d          x}r?d d t          fd|                    t                    D                       }||d<   |                     d          x}r\g }|                    t                    D ]:}	|	                    d	          \  }
}|                    |
 ||          f           ;||d<   |                     d
          x}r*t          |                    t                              |d
<   |                     d          x}rt          j        |          |d<   |S )Nr  r/  c                 ~   d }|                      d          r*t          j        }|                     d          dd          }nO|                      d          r%t          }|                     d          dd          }n                    |           S |}|D ]&}t          ||          s| c S t          ||          }'|S )Nztorch.nnr|  r#   ry   r%   )r}  ry   r   r1  r8  r  r  )r/  r  r7  r7  rL  r   s        rg   deserialize_meta_funczKGraphModuleDeserializer.deserialize_metadata.<locals>.deserialize_meta_func"  s    F ++J77 D*;*A*A#*F*Fqrr*J''"--g66 D*;*A*A#*F*Fqrr*J''001BCCCF/ 3 3vt,, 3,,,,$VT22FFMrf   r  c                     | ||ffS rw   re   )keyr  r  s      rg   import_nn_module_stackzLGraphModuleDeserializer.deserialize_metadata.<locals>.import_nn_module_stack7  s    T2J&rf   c                 0   g }d\  }}d\  }}t          |           D ]G\  }}||v r|dz  }||v r|dz  }|dk    r(|dk    r"|                    | ||                    |dz   }H|                    | |d                     t          |          dk    sJ |S )N)r   r   )z[(z)]r%   r  r      )r  ro  r  )r  r   startr  r	  rO  endcs           rg   metadata_splitzDGraphModuleDeserializer.deserialize_metadata.<locals>.metadata_split;  s    q!1'11 ( (FCAvvQaQca1ff

8E#I#6777 #a

8EFF+,,,3xx1}}}}
rf   c              3   4   K   | ]}  |           V  d S rw   re   )rm   r  r  r  s     rg   r}   z?GraphModuleDeserializer.deserialize_metadata.<locals>.<genexpr>K  sI       # # '&t(<(<=# # # # # #rf   r  r  r  r  )	r  r+  r  r1  r  ro  r   r   r   )r   r  r  r  r  nn_module_stack_strr  source_fn_st_strr  source_fn_strrL  
target_strtorch_fn_str
custom_strr  r  s   `             @@rg   r  z,GraphModuleDeserializer.deserialize_metadata  s    ",,}555; 	-!,C	S 	 	 	 	 	 	& #+,,/@"A"AA 	5' ' '    # # # # # #/55lCC# # #  O &5C!"'||,=>>> 	2L!1!7!7!E!E O O#0#6#6s#;#; j##T+@+@+L+L$MNNNN%1C!"#<<
333< 	F#L$6$6|$D$DEEC
O!h///: 	3 Jz22CM
rf   r  c                    t                               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    r3t          j        |j        j        |                     |                    S t          j        d|                     |                    S )	Nz[deserialize_argument_spec] %sr_  r  ra  r"  re  r  r  )r  rg  r   rm  rS   r_  rL  rR   ra  r   rP   r"  r  re  rw  r  s     rg   r  z1GraphModuleDeserializer.deserialize_argument_speca  s    		2A6666[  $!+*:;;;;V|##$!,*>????V~%%&AN,BCCCCV&&&_)1G1G1J1J    &Bd6L6LQ6O6OPPPPrf   r  c                      t          j         fd|j        D              fd|j        D             t	          |j                  t	          |j                  |j        x}r|nd           S )Nc                 :    g | ]}                     |          S re   r  r  s     rg   r   zMGraphModuleDeserializer.deserialize_module_call_signature.<locals>.<listcomp>t  s4       67..q11  rf   c                 :    g | ]}                     |          S re   r  r  s     rg   r   zMGraphModuleDeserializer.deserialize_module_call_signature.<locals>.<listcomp>w  s4       67..q11  rf   r  )rm  r?   r<  r=  r   r  r  r  r  s   `  rg   !deserialize_module_call_signaturez9GraphModuleDeserializer.deserialize_module_call_signaturep  s     %   ;P;W     ;P;X   ##8#@AA#$9$BCC.@@ee
 
 
 	
rf   rR  c                 T     t                               d            fd|D             S )Nz 
[deserialize_module_call_graph]c                     g | ]>}t          j        |j        |j        r                    |j                  nd           ?S r  )rm  r>   r  r  r  r  s     rg   r   zIGraphModuleDeserializer.deserialize_module_call_graph.<locals>.<listcomp>  sf     

 

 

  I D::5?KKK  

 

 

rf   r  r  s   ` rg   r  z5GraphModuleDeserializer.deserialize_module_call_graph  sE     			5666

 

 

 

 +

 

 

 
	
rf   )r   Nrw   )NN)Srb   rc   rd   dataclassesr	   r'  r   r   r   r.  r+  r4  r8  r   r   r   r   r   r   rP  rA  rQ   ry   rW  rO   rZ  rK   r]  rT   r   r  r+   rm  rf  rx  rB   rh  r0   r  r   rx  r4   r  rD   r  r3   r  r  r2   r  rh  r   r   r   r   r    r  rv  r  r  rE  r@   r  r&   rw  r*   r  r  r  r  rS   rR   rP   r  r  r  r  r  r  r?   r  r>   r  re   rf   rg   r^   r^     sm       R R R R R R R R( ( ( ( 8D>    ^0- - - - -c    4 HL/- /-/-#+E#tU2B,C#D/-	/- /- /- /-bV c5<6G0H    &x E%:O4P    g %em8K2L     
    
0
		
 
 
 
P(5PSAS;T2U P P P P(u% uEHN u u u unt1 t1h t14 t1 t1 t1 t1l3<	 3<bl 3< 3< 3< 3<j3= 3= 3= 3= 3= 3=j
 
B<S 
 
 
 
 QUu) u)!,u)  %T#u|*;%<e%CDu) c3h./	u)
 !%elC/0$sCx.@A5HI
u) 'tC1L,L'MNu) 
u) u) u) u)nA Aux} A A A AL L L%#$ %# %# %# %#N%T--@ % % % %L>X L># L> L> L> L>\Vm V V V V VK K K$M$ M M M M M6D4 6D%(- 6D 6D 6D 6Dp= = >>3CCD	=
 =  $CH~= = = =<3T 3T
  $CH~3T 3T 3T 3Tj=#=.3hm=	= = = =<BT#s(^ BS#X B B B BHQ8 Q Q Q Q Q
%8
		
 
 
 
"
!%o!6
	b 	!
 
 
 
 
 
rf   c                   t   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dS )r_   Nexpected_opset_versionc                     i | _         |r| j                             |           d| j         vr(t          j                                        | j         d<   d S d S r  )r   r	  ry   rj  r
  )r   r   s     rg   r   z$ExportedProgramDeserializer.__init__  sb    68#! 	G'../EFFF44427(2T2T2V2VD'/// 54rf   rI  rB  r   c                    t                               d           i }|                                D ]Y\  }}|                    |          x}r"t                               d||           |||<   >t                               d|           Z|S )Nz 
[deserialize_range_constraints]z([deserialize_range_constraints] %s -> %sz;Symbol %s did not appear in the graph that was deserialized)r  rg  rr   r  r   )r   rI  rB  r-  rn   ro   symbols          rg   deserialize_range_constraintsz9ExportedProgramDeserializer.deserialize_range_constraints  s    
 			5666(..00 	 	DAq.221555v 		DaKKK,-!&))QST    ! rf   F_unsafe_skip_version_checkr   r   r   r   .c                   t          |t                    sJ |j        }|j        t          d         k    r8|j        dk    r|j        dk    s"|s t          d|j         dt           d          d |j                                        D             }t                      
                    |j        ||||          }|                     ||j                  }	t          j        |j        |j        j        |j        |j        |	|j        |j        |j        d |j        D             	  	        }
|j        |
_        t0                              d|
           |
S )	Nr   zSerialized schema version z+ does not match our current schema version r|  c           
          i | ]L\  }}|t          j        t          |j        t                     t          |j        t                              MS re   )r   r    r'  min_valr   max_valrl   s      rg   rp   z;ExportedProgramDeserializer.deserialize.<locals>.<dictcomp>  s]      
  
  

 1	 *!!)fW55!!)V44  
  
  
rf   c                 ,    g | ]}t          |          S re   r   r  s     rg   r   z;ExportedProgramDeserializer.deserialize.<locals>.<listcomp>  s     LLLA}Q''LLLrf   )	rootr  rQ  r   r-  rR  r   r   r  z
[deserialize]: %s)rx   r-   r  r  rI   r  ra   r-  rr   r^   r  r  r$  r&  rm  r  r  r   rR  r   r   r  r  r  r  rg  )r   r   r   r   r   r&  versionrI  resr-  r  s              rg   r  z'ExportedProgramDeserializer.deserialize  s    *O<<<<<"1 =N1---MQ7=A#5#5- $S1A1P S SAOS S S  
 
  

 ):@@BB 
  
  
 &''33) 
 
 !>>  
 

 #!"(M~/!3-mLL1A1KLLL

 

 

 /:		'000rf   rw   )rb   rc   rd   r   r  r+  r   r   r   r    r   r   r$  r-   r   ry   rh  r   r   r   rm  r  re   rf   rg   r_   r_     sX       W WxS#X/G W W W W!"3(C#CD!  $C$56! 
elK'	(	! ! ! !0 8 $)8 8 8)8 $sEL015898 c5</0%78	8
 !%elC/0$sCx.@A5HI
8 
	8 8 8 8 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        |                              d          S t                                          |          S Nr   )	rx   r   rk   r   base64	b64encoder   superr&  )r   r  	__class__s     rg   r&  zEnumEncoder.default  sd    c4   	9c5!! 	9#C((//888wws###rf   )rb   rc   rd   r&  __classcell__)r5  s   @rg   r   r     s8        $ $ $ $ $ $ $ $ $rf   r   c                 x    t           t                    r j        t           j                  iS t          j                   r  fdt          j                   D             S t           t                    rd  D             S t           t                    rt          d  D                       S t           t                    rd                                  D             S t           t                    r= t          j        k    rdS  t          j         k    rdS t          j                   rdS  S  S )Nc           	      `    i | ]*}|j         t          t          |j                             +S re   )rL  r   r  )rm   fr  s     rg   rp   z&_dataclass_to_dict.<locals>.<dictcomp>  sB     
 
 
 F&wsAF';';<<
 
 
rf   c                 ,    g | ]}t          |          S re   r   rm   r  s     rg   r   z&_dataclass_to_dict.<locals>.<listcomp>  s!    333!"1%%333rf   c              3   4   K   | ]}t          |          V  d S rw   r;  r<  s     rg   r}   z%_dataclass_to_dict.<locals>.<genexpr>  s+      88q'**888888rf   c                 4    i | ]\  }}|t          |          S re   r;  rl   s      rg   rp   z&_dataclass_to_dict.<locals>.<dictcomp>  s'    AAATQ%a((AAArf   Infinityz	-InfinityNaN)rx   rZ   r   r   rk   r  is_dataclassr  rE  r   r  rr   r   r!  r%  isnanr  s   `rg   r   r     sP   #v ,SY7788		!#	&	& 
 
 
 
 ',,
 
 
 	
 
C		 33s3333	C		 88C888888	C		 AASYY[[AAAA	C		 
$(??:TXI;Z__ 	5J
rf   r  c                 z    t          j        t          |           t          d                              d          S )NF)r   	allow_nanr   )r   r   r   r   r   rC  s    rg   _to_json_bytesrF    s7    :(--;%PPPWW  rf   r   r  c                 F   t          | j                  5  t          ||                              |           }d d d            n# 1 swxY w Y   t	          |j        t                    sJ t          |j                  }t          ||j	        |j
        |j                  }|S rw   )r   r   r]   r[   rx   r   r-   rF  r   r   r   )r   r  r  serialized_program
json_bytesr  s         rg   r[   r[     s    
 
00@0O	P	P & &6?
 

)$
%
% 	& & & & & & & & & & & & & & & (9?KKKKK 2 CDDJ!%$)	 H Os   $AA	A	c           	         t          | t                    rJ d|  d            t          j        |           t          k    rt          | j        |          S t          j        |           t          j        k    rft          d           t          j	        |           v rC|d S 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          |                                                    }t          t          |                                                    }t          |t                    sJ | j        |         } | j        di |t          ||          iS t)          j        |           rbi }t          j        |           }t)          j        |           D ]/}|j        }	|	|vrt          ||	         ||	                   }
|
||	<   0 | di |S t          |t2                    r=t          |          dk    r|S t          j	        |           d         fd|D             S t          |t                    r:t          j	        |           d         fd|                                D             S | t6          k    rt7          |          S |S )	NzUnresolved class type: 'z'.r#   r   r%   c                 0    g | ]}t          |          S re   r  )rm   rh   d_types     rg   r   z&_dict_to_dataclass.<locals>.<listcomp>H  s$    <<<!"61--<<<rf   c                 8    i | ]\  }}|t          |          S re   rL  )rm   rn   ro   v_types      rg   rp   z&_dict_to_dataclass.<locals>.<dictcomp>K  s*    JJJTQ%fa00JJJrf   re   )rx   r+  typing
get_originr   r  
__origin__r   r   get_argsr  
issubclassrZ   r  r  iterr  rs  r   r   r  rA  get_type_hintsr  rL  rE  rr   r   )r   dataty_argsr\  _value
field_typer  
type_hintsr9  rL  new_field_objrM  rO  s              @@rg   r  r  &  s   #s##GG%G%G%G%GGG#**!#.$777--$t**PS@T@T2T2T<4/#&&7||q    !'!*d333	C		 :c6#:#: $%%%%%4yyA~~~~T$))++&&''d4;;==))**%%%%%%(/
szLLU$6z6$J$JKLLL		!#	&	& *3//
 #C(( 	) 	)A6D4.z$/?dLLM(F4LLs}}V}}	D$		 	t99>>K%%a(<<<<t<<<<	D$		 %%a(JJJJTZZ\\JJJJ	T{{Krf   r   artifact_bytesc                 x    |                     d          }t          j        |          }t          | |          }|S r1  )r   r   r   r  )r   r]  artifact_strartifact_dictartifact_dataclasss        rg   _bytes_to_dataclassrb  Q  s:    !((11LJ|,,M+C??rf   Fr%  r   c                    t          | j        t                    sJ t          t          | j                  }t          |                              || j        | j        | j	        |          S )Nr%  )
rx   r   r   rb  r-   r_   r  r   r   r   )r  r   r&  serialized_exported_programs       rg   r  r  X  sv     h/77777"5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                                         t          t          j
                                        t          j        d                              }t          t          j                                        t          j        d                              }t          t          j                                        t          j        d                              }t          t          j                                        t          j        d                              }t          t          j                                        t          j        d                              }d}|D ]y}|j        D ]o}|j        }|j        d	k    r[t'          |j        j        j        |j        j        j        |j        j                  \  |j        _        }d
| |j        _        |dz  }pzt/           ||||||j        |	  	        fS )Nr	  c                 .   | j         dk    rd S | j         dk    r| j        S | j         dk    r| j        S | j         dk    rd S | j         dk    rd S | j         dk    rd S | j         dk    rd S | j         dk    rd S | j         d	k    rd S | j         d
k    rd S | 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d S | j         dk    rd S | j         dk    rd S | j         dk    rd S | j         dk    rd S | j         dk    rd S | j         dk    r| j        S | j         dk    r| j        S | j         dk    rd S | j         dk    r| j	        S | j         dk    r| j
        S | j         dk    rd S t          d|            )Nr)  r_  r  r   r+  r   r,  r  r-  r'  ra  r5  r"  r8  rL  rN  rO  rM  r   r*  r$  r<  r  rC  re  rS  z+Unknown input type to the ExportedProgram: )r   r_  r  ra  r5  r"  r8  r$  r<  rC  re  rk  rA  s    rg   _get_argumentz*_canonicalize_graph.<locals>._get_argumentn  s   6Y4V{"";V|##<Vx4Vy  4Vz!!4V{""4V{""4V|##4V|##4V|##<V}$$= V~%%>!V&&?"V'''4V)))4V{""4V{""4Vy  4Vz!!4V}$$= V~%%>!Vz!!4V,,,((V&&?"V}$$4 !Rq!R!RSSSrf   c                 r    t          |t                    sJ t          j        |  |                     d S rw   )rx   r&   r  tree_map)r9  r	  rg  s     rg   for_argsz%_canonicalize_graph.<locals>.for_args  s;    !X&&&&&==++,,,,,rf   c                 L    t            G d d                      }t                      i i g i g }dt          t                   fdD ]}fd} ||           t	                     D ]1\  }fd}|j        D ]} ||            |g d          <   2t	                     D ]*\  }fd}	|j        D ]} |	|j                   +fd	}
fd
D ]} |
|           dt          f fd}	                                D ]\  }|j
        dk    r |           t                    dk    rt          j                  \  }}          }|j        D ]} |
|           |                    |           v sJ          j        D ]=}|         }|j
        dk    sJ |xj
        dz  c_
        |j
        dk    r ||           >         j                                         t                    dk    |S )Nc                   0    e Zd ZU ee         ed<   eed<   dS )6_canonicalize_graph.<locals>.sort_nodes.<locals>.EdgesoutsinsN)rb   rc   rd   rE  r   r   re   rf   rg   Edgesrm    s&         s)OOOHHHHHrf   rp  r   c                    | d S t          | t                    r| j        S t          | t          t          t
          f          r/| j        dk    r| j        S | j        dv rd S t          d|            t          | t                    r6| j        dk    r| j
        j        S | j        dk    rd S t          d|            t          | t                    r| j        S t          d|            )Nr   )r   r   r   Unknown argument type: r_  r)  zUnknown optional tensor type: )rx   rS   rL  rR   rL   rP   r   r   rk  rC   r_  r+   rA  s    rg   rH  z9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_name  s   yt!^,, DvAAQRSS D6Y&&9$V@@@4()F1)F)FGGGA566 
D6[((;++Vy((4()M!)M)MNNNA011 Dv$%Bq%B%BCCCrf   c                 P     |           x}r                     |           d S d S rw   )r   )r	  r   rH  graph_inputss     rg   	add_inputz:_canonicalize_graph.<locals>.sort_nodes.<locals>.add_input  s<     #1 ( $$Q'''''( (rf   c                 <     |           x}r|vsJ |<   d S d S rw   re   )r	  r   	def_tablerH  r  s     rg   add_defz8_canonicalize_graph.<locals>.sort_nodes.<locals>.add_def  s@     #1 'I----#&IaLLL' 'rf   r   c                      |           x}rR|v rd S |vr|v sJ d S |         }|         j                                                 xj        dz  c_        d S d S )Nr%   )rn  ro  ro  )	r	  r   srcr   rw  edgesrH  rt  r  s	      rg   add_edgez9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_edge  s     #1 (I~~	)) L0000#A,C#JO**3///#JNNa'NNNN( (rf   c                 V     |           x}r|vsJ t                    |<   d S d S rw   )r  )r	  r   rH  ranks     rg   add_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.add_rank  sB    HQKKq $}}}}d))Q$ $rf   c                 :     |           }|r|vr|         S dS )Nr  re   )r	  r   r   rH  r~  s     rg   get_rankz9_canonicalize_graph.<locals>.sort_nodes.<locals>.get_rank  s0    A Qi''Awrrf   r  c                     fd|          }fd|j         D             }t          j        |j        || f           d S )Nc                 .    g  fd|            S )Nc                 @                          |                     S rw   )ro  )r  r  rankss    rg   rm  zc_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks.<locals>.<lambda>  s    5<<#<#< rf   re   )r  r  rj  r  s    @rg   	get_rankszQ_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.get_ranks  s-    <<<<<a@@@rf   c                 >    g | ]}|j          |j                  fS re   )rL  rv  )rm   r	  r  s     rg   r   zR_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate.<locals>.<listcomp>
  s,    III!&))AE"2"23IIIrf   )r<  heapqheappushr7  )r  r   	args_rankr  
candidatesrj  r  r>  s      @rg   add_candidatez>_canonicalize_graph.<locals>.sort_nodes.<locals>.add_candidate  si         
 :DIIIIT[IIIIN:Y'DEEEEErf   r%   )r	   r   r   r+  r  r=  r<  rv  r   rr   ro  r  r  heappopro  rn  clear)r>  rp  r  r  ru  r   rx  r  r  r|  r  r  r  r  r  rw  r{  rH  r  rt  r  r~  r   rj  sorted_inputss   `             @@@@@@@@rg   
sort_nodesz'_canonicalize_graph.<locals>.sort_nodes  s   		 	 	 	 	 	 	 
	 "%$&	"$IK
!	D8C= 	D 	D 	D 	D0  	# 	#A( ( ( ( ( ( HY"""""5)) 
	& 
	&IC' ' ' ' ' ' '
 \ % %!$$$$r1E#JJ"5)) 	* 	*IC	( 	( 	( 	( 	( 	( 	( 	( 	( 	( [ * *15))))*	$ 	$ 	$ 	$ 	$ 	$
	 	 	 	 	 	 	  	" 	"AHXq!!!!	Fs 	F 	F 	F 	F 	F 	F 	F 	F 	F kkmm 	# 	#FCuzzc"""*oo!!j11IAq#:D\ & &1%%%%JJt%<<<<c
 ( ($Kuqyyyy
5A::!M$'''#JO!!### *oo!! 
rf   c                 |   fd}| d S t          | t                    r || j        j                  | _        d S t          | t                    r*| j        dk    r || j        j                  | _        d S d S t          | t                    r*| j        dk    r || j        j	                  | _        d S d S t          | t                    r*| j        dk    r || j        j                  | _        d S d S t          | t                    r || j        j                  | _        d S t          d|            )Nc                 ~    dt                     }| vsJ || <   | |v sJ |                    |           ||<   |S )Nr  )r  pop)rp  rs  new_name
name_tables      rg   r  z8_canonicalize_graph.<locals>.rename_def.<locals>._rename)  s]    ,3z??,,H:----#+Jx v%%%%%zz(33F8Orf   r   rr  )rx   rS   rL  r?  rR   r   r   r@  rP   rB  rL   rA  r+   rD  rk  )r	  r  r  r  s     rg   
rename_defz'_canonicalize_graph.<locals>.rename_def(  sk   	 	 	 	 	 9Fa(( 	@WQVU%899AFFF>** 	@v""#GAIu/CDD			 #"+,, 		@v""#GAIu/EFF			 #"?++ 	@v""#GAIu/DEE			 #",-- 	@WQVU%<==AFFF !>1!>!>???rf   c                    | d S t          | t                    r'                    | j        | j                  | _        d S t          | t          t
          f          r4| j        dk    r'                    | j        | j                  | _        d S d S t          | t                    r4| j        dk    r'                    | j        | j                  | _        d S d S t          | t                    rC| j        dk    r6                    | j
        j        | j
        j                  | j
        _        d S d S t          | t                    r'                    | j        | j                  | _        d S t          d|            )Nr   r_  rr  )rx   rS   r  rL  rR   rP   r   r   rL   rC   r_  r+   rk  )r	  r  s    rg   replace_usez(_canonicalize_graph.<locals>.replace_useC  sf   9Fa(( 	@^^AFAF33AFFFN,<=>> 	@v""&NN19ai@@			 #"?++ 		@v""&NN19ai@@			 #"122 	@v$$#->>!+2BAKDT#U#U    %$,-- 	@^^AFAF33AFFF !>1!>!>???rf   r   r  r  _gr%   )	r<  r=  r>  r?  r@  rB  rA  rC  rD  )r&   r>  r  r=  r<  rv  r  r  r  sortedr?  rr   r  
itemgetterr@  rB  rA  rD  r   _canonicalize_graphr  r  rL  r0   rC  )r  sorted_outputsr  r   r  sorted_nodesr  r  r  r  r  sorted_tensor_valuessorted_sym_int_valuessorted_sym_float_valuessorted_sym_bool_valuessorted_custom_obj_valuescounterr   r	  r  rg  rj  r  s   ` ``                @@@rg   r  r  k  s   6T 6T 6T 6T 6Tr- - - - -u u u u u u un :ek**L|EK 0 00000 "$J@ @ @ @ @ @6@ @ @ @ @&     Q $ $ 	$ 	$AHZ####	$  ) ) 	) 	)AH[!%((((	)  ! !a       	
  u"((**0CA0F0FGGG  !u#))++1DQ1G1GHHH  #u%++--83Fq3I3IJJJ  "u$**,,(2Ea2H2HIII   $u&,,..H4G4J4JKKK   
 G   
	 
	AAv##&9J$+J$,J$	' '#
 ! #1w..
1
	 *,0. % =2
 
 
E *rf   rm  r   c                    t          j        |           } |pt                      }t          t	          | j                                        t          j        d                              }t          t	          | 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k    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         | j!        |          S )ak  
    Normalize a serialized ExportedProgram, so that different eager program which
    shares the same semantics can get a single representation on disk.

    This function canonicalizes an ExportedProgram by:

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

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

    Returns:
        ExportedProgram: The canonicalized exported program.
    r   r  c                     | j         S rw   )r  )r  s    rg   rm  zcanonicalize.<locals>.<lambda>  s
    PQPU rf   r   c                    | \  }\  }}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   r     Unknown input type: )rx   r4   r   r  r  r  r  r  r  r  rt  r  rL  rk  )r  r  _argr}  s       rg   
rank_inputz canonicalize.<locals>.rank_input  s   \dD$	*****9$$dC<Y+%%dn3S88Y(""dk-s22Y+++d*?DDY,&&do5s::Y'!!dC<Y***d).33 !>!>!>???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: )	rx   rD   r   r  r  r  r  r  rk  )r   r  r  r}  s       rg   rank_outputz!canonicalize.<locals>.rank_output  s   \dD$
+++++9%%dC<Y-''dC<Y...d-<cAAY+++d*6;;Y111d0?DDY222dC<Y///dC<Y'!!dC< !?!?!?@@@rf   c              3       K   | ]	\  }}|V  
d S rw   re   rm   r  r  s      rg   r}   zcanonicalize.<locals>.<genexpr>  s&      *F*Fa1*F*F*F*F*F*Frf   re   c              3       K   | ]	\  }}|V  
d S rw   re   r  s      rg   r}   zcanonicalize.<locals>.<genexpr>  s&      (E(EvsA(E(E(E(E(E(Erf   c                    t          | t                    sJ | j        dk    r| j        j        }|j        dk    r|j        }|j                 |_        d S |j        dk    rE|j        }|j        dk    r|j                 |_        d S |j        dk    rd S t          d|           |j        dk    rE|j
        }|j        dk    r|j                 |_        d S |j        dk    rd S t          d	|           |j        d
v rd S t          d|           | j        dk    r | j        j        }|j                 |_        d S | j        dk    r | j        j        }|j                 |_        d S | j        dk    r | j        j        }|j                 |_        d S | j        dk    r | j        j        }|j                 |_        d S | j        dk    r | j        j        }|j                 |_        d S | j        dk    rd S t          d|            )Nr  r_  ra  r   r   Unknown sym_int type: r"  r   Unknown sym_float type: )r)  r   r   r   r  re  r  r  r  r  r  r  r  )rx   r4   r   r  rv  r_  rL  ra  r   rk  r"  r  r  r  r  r  )r}  rv  r   r   r9  t_custom_objtokreplace_tables          rg   replace_inputz#canonicalize.<locals>.replace_input  s;   $	*****9$$/%Cx;&&M&qv.\))N6Y&& -ai 8AIIIVx''D()E!)E)EFFF^++$6Y&& -ai 8AIIIVz))D()GA)G)GHHH    $%AC%A%ABBBY+%%"A"16*AFFFY(""A"16*AFFFY+++$(A"16*AFFFY,&&?.L -l.? @LFY'!!*.C$SX.CHHHY***F !>!>!>???rf   c                     t          	t                    sJ 	j        dk    r	j        j        }|j        dk    r|j        }|j                 |_        d S |j        dk    rE|j        }|j        dk    r|j                 |_        d S |j        dk    rd S t          d|           |j        dk    rE|j
        }|j        dk    r|j                 |_        d S |j        dk    rd S t          d	|           |j        d
v rd S t          d|           	j        dk    r 	j        j        }|j                 |_        d S 	j        dk    r 	j        j        }|j                 |_        d S 	j        dk    r 	j        j        }|j                 |_        d S 	j        dk    r 	j        j        }|j                 |_        d S 	j        dk    r7	j        }|j        j                 |j        _        |j                 |_        d S 	j        dk    r7	j        }|j        j                 |j        _        |j                 |_        d S 	j        dk    r 	j        j        }|j                 |_        d S t          d	           )Nr  r_  ra  r   r   r  r"  r   r  )r)  r   r   r   r  r  r  r  r  r  r  r  r  r  )rx   rD   r   r  rv  r_  rL  ra  r   rk  r"  r  r  r  r  r  r  r  r  )
r   rv  r   r   r9  gur  r  r}  s
           rg   replace_outputz$canonicalize.<locals>.replace_output/  s   $
+++++9%%"&Cx;&&M&qv.\))N6Y&& -ai 8AIIIVx''D()E!)E)EFFF^++$6Y&& -ai 8AIIIVz))D()GA)G)GHHHVVV$%AC%A%ABBBY-'' $A"16*AFFFY+++$(A"16*AFFFY...'+A"16*AFFFY111*.A"16*AFFFY222+A&quz2AEJ -a.? @AY///(A&quz2AEJ -a.? @AY'!!*.C$SX.CHHH !?!?!?@@@rf   r  )r  r  rR  r  )"r  deepcopyr   r  r  r  rr   r  r  r-  r  r  rR  r  r  r  r<  r  r=  r  r   r   r   r+  r  r  r  r-   r2   r3   rE  r  r  r  )rm  r   r  r-  r  rR  r  r  r  r  
sorted_insr  r  sorted_outsr  r  sorted_graphr  r  r  r}  s                      @@rg   r  r    sX   , 
r		B#,suuI 0 6 6 8 8h>QRS>T>TUUUVVMr#))++1DQ1G1GHHH  ((Kr@ooVVV)IO!Eu|I$9 : :::::u}Y%;!<!<<<<<@5hsmS!89 @ @ @ @(AE#x}c"9: A A A A, #elI$9::;;  J :%(*F*F:*F*F*F%G"{{#emY%;<<==;  K $'(E(E(E(E(E#F NL"5~ui# #L-5@ 5@ 5@ 5@ 5@n3A 3A 3A 3A 3A 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dS )	ExtensionHandlerz6
    Base class for handling extension operators.
    r   c                 0    t          | j         d          )Nz  namespace() must be implementedr   r5  r   s    rg   r  zExtensionHandler.namespace      !S]"T"T"TUUUrf   c                 0    t          | j         d          Nz op_name() must be implementedr  r   r|   s     rg   r  zExtensionHandler.to_op_name      !S]"R"R"RSSSrf   rL  c                 0    t          | j         d          r  r  )r   rL  s     rg   r3  zExtensionHandler.from_op_name  r  rf   c                 0    t          | j         d          )Nz  op_schema() must be implementedr  r  s     rg   r6  zExtensionHandler.op_schema  r  rf   N)rb   rc   rd   r   classmethodr+  r  r  r3  ry   FunctionSchemar6  re   rf   rg   r  r  |  s          V# V V V [V Ts T T T [T T T T T [T Ve2 V V V [V V Vrf   r  op_typeextension_handlerc                    t          |t                    sJ d| d            | t          vsJ |  d            t          | t                    sJ | j                            d          s| j                            d          rJ |                                t          vsJ |t          | <   |t          |                                <   dS )zJRegister custom de/serialization method for a node with non-standard type.zExpected ExtensionHandler, got r|  z is already registered.ry   builtinsN)	rT  r  r5  rx   r   rc   r}  r  r2  )r  r  s     rg   register_extensionr    s    
 ')9::  >*;>>> : 1111g3V3V3V111gt$$$$$%%g..((44   &&((0IIIII'8G$?P/99;;<<<rf   c                  N    t          t                                                    S rw   )r   r5  r  re   rf   rg   r  r    s    (--//000rf   r5  r2  rw   (  r2  r  r  r  r  r  r
  r   r  loggingr!  r  r  rP  collectionsr   r   collections.abcr   r   r   
contextlibr   r	   r
   enumr   r   r   r   r   r   r   r   r   ry   torch.export.exported_programexportr   rm  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/   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  rt   r   r   r   MetaTyper"  r  uint8BYTEint8CHARuint16UINT16int16SHORTint32INTint64LONGfloat16HALFfloat32FLOATfloat64DOUBLE	complex32COMPLEXHALF	complex64COMPLEXFLOAT
complex128COMPLEXDOUBLEBOOLbfloat16BFLOAT16float8_e4m3fnFLOAT8E4M3FNfloat8_e5m2
FLOAT8E5M2float8_e4m3fnuzFLOAT8E4M3FNUZfloat8_e5m2fnuzFLOAT8E5M2FNUZr   r   
sparse_coo	SparseCoo
sparse_csr	SparseCsr
sparse_csc	SparseCsc
sparse_bsr	SparseBsr
sparse_bsc	SparseBsc_mkldnnstridedStridedr   r  contiguous_formatContiguousFormatchannels_lastChannelsLastchannels_last_3dChannelsLast3dpreserve_formatPreserveFormatri  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   rP  r   r   r   r   rh  r   r   r   r   r   r   r  r+  r  r#  r'  r   r,  r2  r8  r:  r   rG  r\   r]   r^   r_   JSONEncoderr   r   rF  r[   r  rb  r  r  r   r  r  r  r  r5  r2  re   rf   rg   <module>r?     s            				           / / / / / / / / 8 8 8 8 8 8 8 8 8 8 % % % % % % ( ( ( ( ( ( ( (       I I I I I I I I I I I I I I I I I I   * * * * * * * * * Q Q Q Q Q Q 0 0 0 0 0 0 D D D D D D D D ; ; ; ; ; ; 1 1 1 1 1 1 ) ) ) ) ) ) > > > > > > > > - - - - - - 6 6 6 6 6 6 6 6 7 7 7 7 7 7 4 4 4 4 4 4 * * * * * * 0 0 0 0 0 05 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5l         g!!	 	 	 	 	\ 	 	 	.DdO . . . . 	L		N	M	  	K	J
 
L*# 
K!	
 
K 
K 
M:? 
M:# 
M:$ 
OZ+ 
OZ, 
j. 
J
 
NJ' 
0  
z,!" 
:4#$ 
:4%  , )L)BCC  
f&	f&	f&	f&	f&	M6>	M6>  *\*DEE  
\:	2	L7	<6	% ! %1L1R$S$S ! KKKKKKLLMLJ	MLLLLL	M	O	M	M	M	NM5< 3HHxHHHHH H HH                # # # # #d # # #24& 4U\ 4 4 4 4@HV, @sCx @ @ @ @F 0 FU38_ F F F F)
 )u{ ) ) ) )v #    
(E%,u~uzQR ( ( ( (
sEL01 
f 
 
 
 
*
5!67 
H 
 
 
 
*	
%em 34 	
 	
 	
 	
 	
U\ j     >B x 9: A A AGZ G G G G!15   " 5L/ /sm/.1/
/ / / /0d38neCHou<=   ?5: ?s ?x} ? ? ? ?6
8C= 
ej 
 
 
 
6u| 6t 6 6 6 6	EL+56		#
	 	 	 	A A A 	R 	R 	R 	R 	R 	R 	R 	RC C C C CD C C C P
 P
 P
 P
 P
e P
 P
 P
 P
f& @
 @
 @
 @
 @
% @
 @
 @
 @
F u
 u
 u
 u
 u
 u
 u
 u
 u
p# Q Q Q Q QE Q Q Q Qh$ $ $ $ $$" $ $ $  6      /32 (DcN+  	   *( ( (VS % C     8<  %	   $T#s(^4
    &h
5$sCx. !h h h hX	 :>c cc$,SX$6cc c c cLV V V V V V V V,Q#YQ,-Q Q Q Q&1 1 1 DF d3i.>)??@ E E E?A 4T*:%; ;< A A A A Arf   