
    rh                    r   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	 d dl
mZ d dl mZ d dlmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZmZmZ d d
lm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z&m'Z' d dl(m)Z)m*Z* d dl+m,Z, er
d dl-Z-d dl.m/Z/ d dl0Z0d dl1m2c m3Z4 d dl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD d dlEmFZF d dlmGZG d dlmHZH d dlImJZJmKZK d dlLmMZM d dlNmOZO d dlPmQZQ d dlRmSZS ddlTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZa g dZbee0j                  j                  geeQ   f   Zeej                   G d d             Zgej                   G d d              Zhd! Zid"eej   d#e4j                  d$eej   d%e4j                  d&elf
d'Zme0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j                  gZ|e0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j                   e0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j                  e0j                  j                  j
                  g	Zed(        Zd)ee0j                  j                  ef   d&eee0j                  j                  ef   d*f   fd+ZdDd,Zd-ee0j                  j                  ef   d.ee0j                  j                  ef   d/ee   fd0Zd1e0j                  j                  d2eXd&ee0j                  j                  eXf   fd3Zd1e0j                  j                  fd4Zd5e0j                  j                  d6eXd1e0j                  j                  d7eXd8eeh   f
d9Zd-ee0j                  j                  ef   d.ee0j                  j                  ef   d/ee   d:elfd;Z G d< d=      Zd> Z	 dEd1e0j                  j                  d?d@d&dAfdBZdC Zy)F    N)defaultdict
namedtuple)Iterator)contextmanager)AnyCallablefinalOptionalTYPE_CHECKINGUnion)tracingTracingContext)autograd_not_implemented)FakeScriptObject)_deregister_op_impl_is_op_registered_to_fake_ruleregister_op_impl)FakeTensorMode)_ConstantAttributeType)#first_call_function_nn_module_stack)_PyTreeCodeGen_PyTreeInfo)immutable_dictimmutable_list)insert_deferred_runtime_asserts)ValueRanges)_collect_all_valid_cia_ops_collect_and_set_constant_attrs_collect_param_buffer_metadata_detect_fake_mode_from_gm_fakify_params_buffers_get_decomp_for_cia_is_preservable_cia_op_name_hoo_subgraph_placeholders7_override_graph_signature_for_temp_registered_constants/_overwrite_signature_for_non_persistent_buffers)_populate_param_buffer_metadata_to_new_gm_register_constants_as_buffers_rename_without_collisions_special_op_to_preserve_ciaplaceholder_naming_pass)Verifierdetect_fake_modeunset_fake_temporarily)is_equivalentreorder_kwargsCustomDecompTable)compatibility)
PassResult)PassManager   )ArgumentSpecConstantArgumentCustomObjArgumentExportGraphSignature	InputKind	InputSpec
OutputKind
OutputSpecSymBoolArgumentSymFloatArgumentSymIntArgumentTensorArgumentTokenArgument)ExportedProgramModuleCallEntryModuleCallSignaturedefault_decompositionsc                       e Zd ZU ee   ed<   ee   ed<   ej                  ed<   ej                  ed<   dZe	ee
      ed<   d Zy)rH   inputsoutputsin_specout_specNforward_arg_namesc                     | j                   D ]-  }|j                  |j                  k(  s|j                  |_        / | j                  D ]-  }|j                  |j                  k(  s|j                  |_        / y N)rK   namerL   )selforiginal_nodenew_nodeios        p/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/export/exported_program.pyreplace_all_uses_withz)ModuleCallSignature.replace_all_uses_withh   sd     	'Avv+++!	'  	'Avv+++!	'    )__name__
__module____qualname__listr9   __annotations__pytreeTreeSpecrO   r
   strrY    rZ   rX   rH   rH   `   sE    ,__oo-1xS	*1'rZ   rH   c                   ,    e Zd ZU eed<   dZee   ed<   y)rG   fqnN	signature)r[   r\   r]   rb   r_   rf   r
   rH   rc   rZ   rX   rG   rG   q   s    	H/3Ix+,3rZ   rG   c                 B     t        j                          fd       }|S )Nc                  T    t               5   | i |cd d d        S # 1 sw Y   y xY wrQ   r/   )argskwargsfns     rX   wrapperz/_disable_prexisiting_fake_mode.<locals>.wrapperx   s+    #% 	't&v&	' 	' 	's   ')	functoolswraps)rk   rl   s   ` rX   _disable_prexisiting_fake_modero   w   s%    __R' ' NrZ   
spec1_typespec1_context
spec2_typespec2_contextreturnc                     | || |u xr ||k(  S t        | t        t        f      rt        |t        t        f      r||k(  S t        | t        t        f      rt        |t        t        f      r||k(  S | |u xr ||k(  S )zeTreat containers and their immutable variants as the same type. Otherwise
    compare as normal.
    )
issubclassdictr   r^   r   )rp   rq   rr   rs   s       rX   _fx_collection_equivalence_fnrx      s     Z/Z'JM],JJ*t^45*T>*; --*t^45*T>*; --#F(FFrZ   c              #     K   i }t               }| j                         D ]x  \  }}|j                  j                         ||<   |j	                  |       t
        D ]3  }||j                  vs |j                  |      t        |d             5 t        |      }t        j                  j                  j                  |j                  v r/|j                  t        j                  j                  j                  =  |j                  t        j                  j                  j                        |       d }t        |      s& t        |      t        j                   ||             t"        D ](  }||j                  vs |j                  |      |       * { 	 d  |D ]_  }	|	j                  j%                          |	j                  j'                  ||	          |	j(                  j%                          t+        |	       a y # |D ]_  }	|	j                  j%                          |	j                  j'                  ||	          |	j(                  j%                          t+        |	       a w xY ww)NT)deferred_errorc                 R    |d   }|d= | 5   ||i |cd d d        S # 1 sw Y   y xY w)Noriginal_callablerc   )fake_tensor_modeopri   rj   orig_cia_callables        rX   $_force_dispatch_to_orig_cia_callablezQ_override_composite_implicit_decomp.<locals>._force_dispatch_to_orig_cia_callable   s<     &': ;*+! :($9&9: : :s   &)r|   )setitems
py_kernelscopyadd(_AUTOGRAD_ALIAS_BACKEND_KEYS_TO_OVERRIDEpy_implr   r"   torch_CDispatchKeyCompositeImplicitAutogradr   r   rm   partial_BACKEND_KEYS_TO_OVERRIDEclearupdate_dispatch_cacher   )
cia_ops_to_callablesaved_tablespatched_opsop_overloaddecomp_callableoverride_dispatch_keyr   r   keyr~   s
             rX   #_override_composite_implicit_decompr      s     L%K(;(A(A(C =<$_$/$:$:$?$?$A[!$%M 	!$K,B,BB:##$9:,[N	 0<8899[=S=SS&&uxx';';'U'UVKEHH00JJK	
	: .k:)[)!!8&7 - 	<C+000  )##C():;#	<Y=<~$ 	$BMM!MM  b!12$$&#		$+ 	$BMM!MM  b!12$$&#		$s-   A)I.,DI.?I.H  A%I.A&I++I.decomp_table.c                 J   t        t                     }i }t        | j                               D ]_  }||v r| |   ||<   |j	                  |       | |= $t        |      s0|j                         }|j                  d      rJ d       | |   ||<   a |D ]  }t        ||<    || fS )NatenzThis should be a custom op)	r   r   r^   keysremover#   rR   
startswithr*   )r   all_preservable_cia_opsr   r~   op_nameks         rX   ,_split_decomp_table_to_cia_and_python_decompr     s     ""<">?<$$&' 7$ ((&22&6##**2.R  $B'ggiG))&1O3OO1&22&6#97@ % =!<A= ,,rZ   c                      t               S )z
    This is the default decomposition table which contains decomposition of
    all ATEN operators to core aten opset. Use this API together with
    :func:`run_decompositions()`
    r3   rc   rZ   rX   rI   rI   >  s     rZ   cia_to_decomppython_decomp_tablejoint_loss_indexc                   ddl m} ddlm} ddlm}m}m}	m}
m	}m
} ddlm} d } || |      s| j                         }i t        |j                  d            t        |j!                  d            }dd	lm}  ||       i t        |j                  d            t        |j!                  d            }t'        | j(                        }|t+         |       d
      }|j,                  }|j.                  j0                  j2                  j4                  }|j6                  t8        t:        fvrt=        j>                  t:        d |g      }tA        tC        ||jD                  |            |j.                  _        |jG                          tI        | jJ                  | jL                  |       tO        || jP                  | jJ                  jR                        }tU        ||      }tW        |      }ddl,m-}m.} g }|j.                  j^                  D ]  }|j`                  dk(  stc        |jd                  d   tf              rwd }|jd                  d   jh                  '| jL                  |jd                  d   jj                     }n#|jd                  d   jh                  jl                  }|jo                  |       |jo                  |jd                  d           tq        |      }|5  ts        |      5   || jt                        5  tw        |      5  t=        jx                  ||jD                        } ||g |d   |d   j{                         i |      5 \  } }!}"}#}$ || |!|"||#|dd|	      }%|%jL                  j}                         D &'ci c]  \  }&}'|&tc        |'t~              r|$|'   n|' c}'}&|%_&        |%j                  }(|%j                  })t        |)|      })t        ||(|)       t        | jJ                  |)      }) ||(|)|#      }*t        |(|)| |!|"||*       d d d        d d d        d d d        d d d        d d d         |
(        ||(        ||()       t        |(|)      \  }(})i | jP                  |j}                         D +,ci c]  \  }+},|+|vr|+|, c},}+}-|j}                         D ]J  \  }+},|+|-vr&tc        |,t        j                  j                        rJ |+|-v s5|+|vs:|-j                  |+       L |(|)|-fS | j(                  j.                  j^                  D cg c]  }|j`                  dk(  s| }.}|.D cg c]  }|jd                  d    }/}| j(                  j!                         D +0cg c]  \  }+}0|+	 }1}+}0|1D ]  }+t        | j(                  |+        t        |/      }|t        j                         n|}|rt        j                  n|}2 |	       5  |5  ts        |      5   |2       5   || j(                  |/||d
nd||nd       \  }(}3|(j.                  j                          d d d        d d d        d d d        d d d        d }4(j.                  j^                  D cg c]  }|j`                  dk(  s| }5}t9        |(j.                  j^                        d   j                  d   }6t        |5      t        |.      k(  sJ t        |.|5      D ]  \  }7}8|7jj                  x|8_5        |8_S         |5D 9ci c]  }9|9jj                  |9jj                   }:}9|(j.                  j^                  D ]8  }|j`                  dk(  rt        |:|jj                  |jj                        |_5        : t        |(       ddlVmW};mX}< ddlYmZ}= t        j                  j                  j                  s[d}>t        |(      }?|?L |<|(t        j                  |;|>            5  t        |(|?dt        |(j.                         d
       d d d        |(jG                          t         |=|(            D ]7  \  }@}+tc        |6|@   t        j                  j                        s.|+|6@   _5        9 t        | jJ                  j                        D @Aci c]C  \  }@}Atc        |Aj                  t              s$Aj                  jj                  |5@   jj                  E }B}@}At        | jJ                  j                        D @Acg c]E  \  }@}At        |Aj                   |4|Aj                  |5|@         |Aj                  |Aj                        G }C}@}Ag }Dt        3j                        D @+ci c]  \  }@}+|+|@
 }E}@}+t9        |3j                  j                               }F|F|6d t        |F       D cg c]  }|jj                   c}k(  sJ |3j                  j}                         D ]  \  }G}HE|H   }@| jJ                  j                  |@   }I|Ij                  t        j                  t        j                  fv sJ Ij                  t        j                  k(  rt        j                  nt        j                  }JIj                  t        j                  k(  rIj                  nIj                  jj                  }KDjo                  t        Jt        G      |K              t        | jJ                  j                        D ]  \  }@}ADjo                  t        |@|k(  rt        j                  nAj                   |4Aj                  |6t        F      @z            Bj                  |Aj                  |Aj                                      ||3j                  J |3j                  j                  }Lt        |3j                        t        | jJ                  j                        k(  sJ t        | jJ                  j                        D @Aci c]/  \  }@}Atc        |Aj                  t              r|3j                  @   A1 }M}@}At        |6t        D      d        D ]  \  }@}L|jj                     }NM|N   }A|Aj                  t        j                  k(  rt        j                  }OAj                  }KnHAj                  t        j                  k(  rt        j                  }ON}Knt        dAj                         Djo                  t        Ot        |jj                        K              t        |5      t        |.      k(  sJ t        CD      })t        |.|5      D ]  \  }P}Qtc        |Pjd                  d   t        j                        sPjd                  d   Qjd                  d<   Qj                  |)j                  v sQj                  |)j                  v s}Pjd                  j}                         D ]  \  }R}S|SQjd                  |R<     |(|)| jP                  fS c c}'}&w # 1 sw Y   	xY w# 1 sw Y   	xY w# 1 sw Y   	xY w# 1 sw Y   	xY w# 1 sw Y   
xY wc c},}+w c c}w c c}w c c}0}+w # 1 sw Y   *xY w# 1 sw Y   /xY w# 1 sw Y   4xY w# 1 sw Y   9xY wc c}w c c}9w # 1 sw Y   xY wc c}A}@w c c}A}@w c c}+}@w c c}w c c}A}@w )Nr   )_materialize_and_lift_constants)aot_export_module)2_disable_custom_triton_op_functional_decomposition_export_to_aten_ir_ignore_backend_decomps_verify_nn_module_stack_verify_placeholder_names_verify_stack_trace)ShapeEnvc                 >    |d uxs | j                   j                  d uS rQ   )graph_signaturebackward_signature)epr   s     rX   _is_joint_ir_decompzO_decompose_and_get_gm_with_new_signature_constants.<locals>._is_joint_ir_decomp[  s)    D( A!!44D@	
rZ   F)remove_duplicate)!unwrap_tensor_subclass_parametersT)	shape_envexport)&_enable_graph_inputs_of_type_nn_module_fakify_script_objectsplaceholdervalr8   )r   _check_autograd_state_prettify_placeholder_namesdecompose_custom_triton_ops)decompositionstrace_jointoutput_loss_indexc                    t        | t              r| S t        | t              rt        |j                        S t        | t              rt	        |j                        S t        | t
              rt        |j                        S t        | t              rt        |j                        S t        dt        |              )NrR   zType of old_arg not supported: )	
isinstancer:   rD   rR   rC   rB   rA   RuntimeErrortype)old_argnew_phs     rX   
update_argzF_decompose_and_get_gm_with_new_signature_constants.<locals>.update_argX  s    g/0N0!v{{330!v{{33!12#551"44<T']OLMMrZ   )_node_metadata_hook_set_node_metadata_hook)_graph_output_nameszUFile "torch/fx/passes/runtime_assert.py", line 24, in insert_deferred_runtime_asserts)stack_tracezexported program: )r   r   )kindargtargetzUnknown input kind: input_specsoutput_specs)(torch._export.passes.lift_constants_passr   torch._functorch.aot_autogradr   torch.export._tracer   r   r   r   r   r   %torch.fx.experimental.symbolic_shapesr   modulerw   named_parametersnamed_buffers7torch._functorch._aot_autograd.subclass_parametrizationr   r    graph_moduler   	_out_specgraph_codegenpytree_info	orig_argsr   r^   tupler`   ra   r   r   _in_spec	recompiler   r   	constantsr(   
state_dictnon_persistent_buffersr!   r   torch._export.non_strict_utilsr   r   nodesr~   r   metar;   fake_valrR   real_objappendr   r   example_inputsr   tree_unflattenvaluesr   r   gmsigr%   r'   r&   r+   !_remove_unneccessary_copy_op_passr   nn	Parameterpopdelattrr.   
contextlibnullcontexteliminate_dead_coderi   lenzipr   r)   r$   (torch._export.passes._node_metadata_hookr   r   4torch._functorch._aot_autograd.input_output_analysisr   _dynamoconfigdo_not_emit_runtime_asserts_get_shape_envrm   r   r   r   	enumeratefxNoder   r   r:   r>   r   
persistentuser_inputsuser_inputs_to_mutater   r=   
USER_INPUTBUFFERr?   BUFFER_MUTATIONUSER_INPUT_MUTATIONr@   rD   r   LOSS_OUTPUTgetr   gradients_to_user_inputs	PARAMETERGRADIENT_TO_PARAMETERGRADIENT_TO_USER_INPUTAssertionErrorr<   Tensorinputs_to_parametersinputs_to_buffers)Tr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   modwrapped_params_buffersr   unwrapped_params_buffers	fake_moderN   orig_arg_namestemp_registered_constantsfake_params_buffersparams_buffers_to_node_metar   r   retracing_argsnodereal_script_objtxretracing_args_unwrappedpatched_modnew_fake_argsnew_fake_kwargsnew_fake_constant_attrsmap_fake_to_realaten_export_artifactre   objr   new_graph_signaturer   rR   pnew_state_dictold_placeholders	fake_args_buffers_to_remove#custom_triton_ops_decomposition_ctxr   r   new_placeholdersnew_outputsold_phr   phname_mapr   r   r   r   r   rV   specold_new_placeholder_mapr   r   user_inputs_indexmutation_namesoutput_name
input_name
input_specoutput_kindr   	gradientsspecssourcer   old_noderU   r   vsT                                                                                       rX   2_decompose_and_get_gm_with_new_signature_constantsrH  G  s!    Y?  ?
 r#34iik"
3'''?@"
3$$e$<="

	
 	*#.$
3'''?@$
3$$e$<=$
  .boo>	&DII ==++77AA ==u-udXJ?H+
		 	
 	((:(:BLL#N %C 2 2 I I%
!
 5YD&DS&I#
	

 IIOO 
	<Dww-'dii.0AB&*Oyy'008*,,,tyy7G7L7L*M*.))E*:*C*C*L*L"))/:"))$))E*:;
	< I& Q	/Q	
 323D3DEQ	 BKQ	 (.'<'<($ (-a0-a0779  E' '9!#'+!4*/050K
($& %9$B$B$H$H$J2 !S %c+;< )- !2$. *,,&:&>&>#
 L+-F $ :/5H
 'V&&(;'# <+-D	 ('!#'{EQ	 Q	 Q	 Q	f 	 #B!"&9:"C##

mm
  8==?D!55 a
 .335 	-GD!>)%a););<<<~%77"&&t,	- &66 ..44=8P  /??d5!?I?-/__-J-J-LM'$MM! '&' !+I,5,=
&&(9I ' 	? ( 	 !'' 	,M:' 	,-	' 0OO. 0 <%$4$@ d
O 	$$&' ' ' '&N *,T477m;STTrxx~~&r*//2K  C(8$9999.0@A 2&,kk1fm2 ,<<R <H< O77m#.xDIIN	O $B' Y==;;1 	 #2&	 (I%%&9{S  0()LRXX)V(WX	 LLN045 '4k!nehhmm4"&KN' !!3!3!?!?@At$(($45 	'*///  !!3!3!?!?@ At 	IItxx!1!!45KKOO		
K  L 1:/:U:U0VWWQqWW/??DDFGNK@U#nBU4VWDdiiWWWW#2#H#H#N#N#P 
Zj)''33A6
9#7#79I9I"JJJJ )"2"22 &&// 	 )"2"22 $$ 	
 	 "4	

. R//<<= 
4*+/?*?
&&TYY488[^1Dq1H%IJ'++DKKE	

 #11===#66OO	?../3r7I7I7U7U3VVVV %R%7%7%C%CD
4$((N3 ''*D0
 

 !S->-@!AB 	GAttyy)F=DyyI///!77i222!88$';DII;%GHH"		2	&  C(8$9999.l ""24DE 	%((--.=#+==#7HMM%  OO2GGG"5"G"GG ++- %1#$a %	% "BMM11w29E EQ	 Q	 Q	 Q	 Q	 Q	 Q	 Q	H$ @M' ' ' ' ' ' ' '@ U =0 $" XWJ
s0  'x:3x-x Ax	5x"x .A+xx	!x )x-1x:	y#y8yy7y!z$y70y*8=y	5y*=y7z0zzz&z	Az(6A
z.z4!z:24z? xxx	xx  x*%x--x7	2x::yy'"y**y4/y77z	<zzz%r   r.  c                    | j                  |j                               5  | j                  j                  D ]  }|j                  dk(  st        j                  |j                        \  }}|D ]  }t        |t        j                  j                        s(|j                  |j                  v sA|j                  dk(  sQ|j                  t        j                  j                   j"                  j$                  k(  s|j'                  |j                  d          | j                  j)                  |         | j+                          ddd       | |fS # 1 sw Y   | |fS xY w)zQ
    Removes redundant copy_ node that was introduced due to mutated buffer.
    outputcall_functionr8   N)_set_replace_hookget_replace_hookr   r   r~   r`   tree_flattenri   r   r   r  r  rR   buffers_to_mutater   opsr   r   defaultrY   
erase_noder   )r   r.  r#  ri   r3  outs         rX   r   r     s    
		1BBD	E HHNN 	5Dww(" --dii8a 
5C"36HH(;(M(MM  FFo5 #

eiinn.A.A.I.I I55chhqkBHH//4
5	5 	  """!  """s+   )E
AEE/E?;E;AEE!c           	         | j                  |j                               5  | j                         D ]  }t        |t        j
                  j                        s)i }i }t        |j                  j                        D ]  }|j                  dk(  r|j                  t        j                  k(  r|j                  \  }}||    d| }	|	|v rc|j                  ||	          |D ].  }
|
j                   |
j                   j                  |||	          0 |j                  j#                  |       |||	<   |	||<   |j$                  ||<     	 d d d        y # 1 sw Y   y xY w)NrK  .)rL  rM  modulesr   r   r  GraphModuler^   r   r   r~   r   operatorgetitemri   rY   rf   rR  rR   )r   r   module_call_graphr   node_idgetitemsr#  rE  idxnew_identrys              rX    _common_getitem_elimination_passr`    sG    
		o>>@	A .jjl 	.Ffehh&:&:;02G13HV\\//0 .77o-$++AQAQ2Q"&))KFC '0#7F)228F3CD%6 "E$: % E E$((6*:!""
 //5+/((.$(IIGDM!.	.. . .s   CE/AEEold_gmold_graph_signaturer   old_module_call_graphc                    t        j                  |      }| j                  j                  D ci c]  }|j                  | }}i j
                  j                  i |j
                  |j                  }i }	d}
| j                  j                  D cg c]  }|j                  dk(  s|j                    }}t        t        fd|            }|j                  j                  D cg c]  }|j                  dk(  s|j                    }}|j                  j                  D ]  }|j                  j                  dg       x}r|j                  |	|d   j                  <   >|j                  dk(  sN|j                  |v r]|j                  |j                  v rv|j                  |v st        |j                  t              sJ ||
   }t        |t              sJ |j                  |	|<   |
dz  }
 t!        t              }|j#                         D ]X  \  }}|j%                  d      s|v s||	|<   "dj'                  |j)                  d      dd       }||   j+                  |       Z |D ]x  }|j,                  }|g |j.                  |j0                  D ]H  }|j                  |v rt3        d	|j                   d
      |j                  |	v r|	|j                     |_        N|j                  |v s]||j                     }|j                  dk(  s||j                  t4        j6                  j8                  j:                  j<                  t4        j6                  j8                  j:                  j>                  t4        j6                  j8                  j:                  j@                  fv s|jB                  d   j                  }||	vrt3        d	| d
      |	|   |_        K { |S c c}w c c}w c c}w )Nr   r   c                 ,    | vxr | j                   vS rQ   )input_tokens)xold_graph_params_buffersrb  s    rX   <lambda>z0_get_updated_module_call_graph.<locals>.<lambda>X  s$    a77 :,999 rZ   	from_noder   r8   zparametrizations.rU  zIt looks like z is a tensor subclass. Preserving submodule that takes subclass parameter is not supported in inference IR because we desugar them, resulting in more tensorsrK  )"r   deepcopyr   r   rR   r  r  r~   r   r^   filterr   r  rf  r   rb   r   r   r   joinsplitr   rf   rK   rL   
ValueErrorr   rP  r   todtype_layoutdevicedtyperi   )ra  rb  r   r   rc  new_module_call_graphr#  	old_nodesnew_graph_params_buffers
provenanceuser_input_counterold_user_input_namesnew_user_input_nameshistoryold_nameold_param_to_desugaredrR   r   
old_targetr_  rf   rg  rF  rh  s    `                     @rX   _get_updated_module_call_graphr  :  s    !MM*?@-3\\-?-?@TD@I@ 

2
2 

/
/  

.
. 

+
+  "$J & 2 2dgg6N   : 	
 !#$'']2J   ,iimmK4474+/99Jwr{''(
 WW%77;;/">">>;;"66%dii55534FGH%h444+/99Jx(&!+&#,, ).0668 <f  !45//#'
4 &,,s"3Ab"9:J":.55d;< ' '4OO	89##8i&7&78 #	4A vv// $QVVH -Z [  vv##AFF+ 9$$QVV,;;/1hooIINN%%22IINN%%,,IINN%%++J 7
 "*q!1!6!6J!3(,ZL 9b c  (
3AFG#	4	'4R ! S A s   O/O4+O4,O9O9r   c          
      t   t        | ||||      \  }}}t        | j                  | j                  ||| j                        }|j
                  j                  | j                  j
                         t        || j                        }	t        ||j                  |||	|| j                  | j                        }
|
S )Nr   r   r   r   )rootr   r   r   range_constraintsrZ  r   r   )rH  r  r   r   rZ  r   r   _get_updated_range_constraintsr  rF   r   r   r   )r   r   r   r   r   r   r.  r   rt  new_range_constraintsexported_programs              rX   _decompose_exported_programr    s     	;
#/)$?		
 ;



 GGNN2??''(:


 'hh+//((,,	 rZ   c                      e Zd ZdZ	 	 dDdddeej                  j                  ee	e
f   f   dej                  j                  dedee	eej                  ej                  j                  f   f   dd	d
ee   deeee
df   ee	e
f   f      deee	ef      deeee         fdZe ed      d               Zej6                   ed      d               Ze ed      d               Zej6                   ed      d               Ze ed      d               Zej6                   ed      d               Ze ed      d               Zej6                   ed      d               Z ed      deej                  j                     fd       Z  ed      deee	ej                  j                  f      fd       Z! ed      deej                     fd       Z" ed      deee	ej                  f      fd       Z#e ed      d               Z$e$j6                   ed      d                Z$e ed      d!               Z%e%j6                   ed      d"               Z%e ed      d#               Z&e&j6                   ed      d$               Z&e ed      d%               Z'e'j6                   ed      d&               Z'e ed      de
fd'              Z(e(j6                   ed      d(               Z(e ed      de	fd)              Z)e)j6                   ed      d*               Z)e ed      d+               Z*e*j6                   ed      d,               Z*e ed      d-               Z+e+j6                   ed      d.               Z+e ed      d/               Z,e,j6                   ed      d0               Z,d1 Z-d2e
d3e
de
fd4Z.d2e
d3e
de
fd5Z/d6 Z0de	fd7Z1dej                  j                  fd8Z2d9 Z3e4	 	 dEd:eeejj                  jl                  e7f      d;e8dd fd<       Z9d=e:dd fd>Z;d? Z< ed      d@        Z=e>dA        Z?ddddB	 dFdCZ@y)GrF   a  
    Package of a program from :func:`export`. It contains
    an :class:`torch.fx.Graph` that represents Tensor computation, a state_dict containing
    tensor values of all lifted parameters and buffers, and various metadata.

    You can call an ExportedProgram like the original callable traced by
    :func:`export` with the same calling convention.

    To perform transformations on the graph, use ``.module`` property to access
    an :class:`torch.fx.GraphModule`. You can then use
    `FX transformation <https://pytorch.org/docs/stable/fx.html#writing-transformations>`_
    to rewrite the graph. Afterwards, you can simply use :func:`export`
    again to construct a correct ExportedProgram.
    N)	verifiersr  r   r   r   r  dict[sympy.Symbol, Any]rZ  r   .r   r  c	                $   t         j                  j                  j                         |_        t        ||      | _        t        |t         j                  j                        r/| j                  j                  j                  |j                         t        | j                  ||       || _        || _        || _        |J || _        || _        |xs i | _        |	xs t$        g}	t'        d |	D              sJ |	| _        | j+                          y )Nc              3   <   K   | ]  }t        |t                y wrQ   )rv   r,   ).0rG  s     rX   	<genexpr>z+ExportedProgram.__init__.<locals>.<genexpr>  s     >q:a*>s   )r   r  r   CodeGenr   _create_graph_module_for_export_graph_moduler   rW  r   r   r`  _graph_signature_state_dict_range_constraints_module_call_graph_example_inputs
_constantsr,   all
_verifiersvalidate)
rS   r  r   r   r   r  rZ  r   r   r  s
             rX   __init__zExportedProgram.__init__  s     //1<T5IdEHH001##**4995(1B	
 7F+5CT ,,,9J-#/r+(	>I>>>>#rZ   F)is_backward_compatiblec                     | j                   S rQ   )r  rS   s    rX   r   zExportedProgram.graph_module  s     !!!rZ   c                     t        d      )Nz7Unable to set ExportedProgram's graph_module attribute.r   rS   values     rX   r   zExportedProgram.graph_module   s     TUUrZ   c                 .    | j                   j                  S rQ   )r   r   r  s    rX   r   zExportedProgram.graph%  s       &&&rZ   c                     t        d      )Nz0Unable to set ExportedProgram's graph attribute.r  r  s     rX   r   zExportedProgram.graph*  s     MNNrZ   c                     | j                   S rQ   )r  r  s    rX   r   zExportedProgram.graph_signature/  s     $$$rZ   c                     t        d      )Nz:Unable to set ExportedProgram's graph_signature attribute.r  r  s     rX   r   zExportedProgram.graph_signature4  s     WXXrZ   c                     | j                   S rQ   )r  r  s    rX   r   zExportedProgram.state_dict9  s     rZ   c                     t        d      )Nz5Unable to set ExportedProgram's state_dict attribute.r  r  s     rX   r   zExportedProgram.state_dict>  s     RSSrZ   rt   c              #   D   K   | j                         D ]	  \  }}|  yw)zH
        Returns an iterator over original module's parameters.
        N)r   )rS   r3  params      rX   
parameterszExportedProgram.parametersC  s)     
 --/ 	HAuK	    c              #   h   K   | j                   j                  D ]  }|| j                  |   f  yw)z
        Returns an iterator over original module parameters, yielding
        both the name of the parameter as well as the parameter itself.
        N)r   r  r   )rS   
param_names     rX   r   z ExportedProgram.named_parametersK  s7      ..99 	:Jdooj999	:s   02c              #   D   K   | j                         D ]	  \  }}|  yw)zC
        Returns an iterator over original module buffers.
        N)r   )rS   r3  bufs      rX   bufferszExportedProgram.buffersT  s)     
 ((* 	FAsI	r  c              #      K   t        | j                  j                        }| j                  j                  D ]-  }||v r|| j                  |   f || j
                  |   f / yw)z
        Returns an iterator over original module buffers, yielding
        both the name of the buffer as well as the buffer itself.
        N)r   r   r   r  r   r   )rS   r   buffer_names      rX   r   zExportedProgram.named_buffers\  sm      "%T%9%9%P%P!Q//77 	@K44!4>>+#>>>!4??;#???		@s   A'A)c                     | j                   S rQ   )r  r  s    rX   r  z!ExportedProgram.range_constraintsi       &&&rZ   c                     t        d      )Nz<Unable to set ExportedProgram's range_constraints attribute.r  r  s     rX   r  z!ExportedProgram.range_constraintsn       J
 	
rZ   c                     | j                   S rQ   )r  r  s    rX   rZ  z!ExportedProgram.module_call_graphu  r  rZ   c                     t        d      )Nz<Unable to set ExportedProgram's module_call_graph attribute.r  r  s     rX   rZ  z!ExportedProgram.module_call_graphz  r  rZ   c                     | j                   S rQ   )r  r  s    rX   r   zExportedProgram.example_inputs  s     ###rZ   c                    ||| _         y t        |t              r4t        |      dk(  r&t        |d   t              rt        |d   t              st        d      |\  }}ddlm}  |||| j                  j                         || _         y )N   r   r8   zqExample inputs should be a tuple containing example arguments (as a tuple), and example kwargs (as a dictionary).)_check_inputs_match)
r  r   r   r   rw   ro  _unliftr  	call_specrM   )rS   r  ri   rj   r  s        rX   r   zExportedProgram.example_inputs  s    
 =#(D  ue$E
a58U+58T*B 
 f0D&$..*@*@A$rZ   c                 6   t        dddg      }t        | j                        dk(  r
 |d d       S | j                  d   j                  dk(  sJ  || j                  d   j                  j
                  | j                  d   j                  j                        S )NCallSpecrM   rN   r   )rM   rN    )r   r   rZ  re   rf   rM   rN   )rS   r  s     rX   r  zExportedProgram.call_spec  s     j9j*ABt%%&!+D488%%a(,,222**1-77??++A.88AA
 	
rZ   c                     t        d      )Nz4Unable to set ExportedProgram's call_spec attribute.r  r  s     rX   r  zExportedProgram.call_spec       QRRrZ   c                      | j                   d   S Nr   r  r  s    rX   verifierzExportedProgram.verifier  s     q!!rZ   c                     t        d      )Nz3Unable to set ExportedProgram's verifier attribute.r  r  s     rX   r  zExportedProgram.verifier  s     PQQrZ   c                 P    | j                   J | j                   d   j                  S r  )r  dialectr  s    rX   r  zExportedProgram.dialect  s)     ***q!)))rZ   c                     t        d      )Nz2Unable to set ExportedProgram's dialect attribute.r  r  s     rX   r  zExportedProgram.dialect  s     OPPrZ   c                     | j                   S rQ   r  r  s    rX   r  zExportedProgram.verifiers       rZ   c                     t        d      )Nz4Unable to set ExportedProgram's verifiers attribute.r  r  s     rX   r  zExportedProgram.verifiers  r  rZ   c                     | j                   S rQ   r  r  s    rX   tensor_constantsz ExportedProgram.tensor_constants  r  rZ   c                     t        d      )Nz;Unable to set ExportedProgram's tensor_constants attribute.r  r  s     rX   r  z ExportedProgram.tensor_constants  s     I
 	
rZ   c                     | j                   S rQ   r  r  s    rX   r   zExportedProgram.constants  r  rZ   c                     t        d      )Nz4Unable to set ExportedProgram's constants attribute.r  r  s     rX   r   zExportedProgram.constants  r  rZ   c                     | j                   j                  }|t        ||      }t        j                  ||f      \  }}| j                  |       t        d |D              }||fS )a  Flatten args, kwargs using pytree, then, check specs.

        Args:
            args: List[Any] original args passed to __call__
            kwargs: Dict[str, Any] original kwargs passed to __call

        Returns:
            A tuple of (flat_args, received_spec)
            flat_args is flattend args / kwargs
            received_spec is the pytree spec produced while flattening the
            tuple (args, kwargs)
        c              3   &   K   | ]	  }|d      yw)r8   Nrc   )r  rg  s     rX   r  z<ExportedProgram._get_flat_args_with_check.<locals>.<genexpr>  s     <1!A$<s   )r  rM   r2   r`   tree_flatten_with_path_check_input_constraintsr   )rS   ri   rj   rM   flat_args_with_pathreceived_spec	flat_argss          rX   _get_flat_args_with_checkz)ExportedProgram._get_flat_args_with_check  so     ..((#FG4F-3-J-J6N.
*] 	%%&9:<(;<<	-''rZ   ri   rj   c                    | j                   j                  }| j                  ||      \  }}|"t        ||t              st        d| d|       g }| j                  j                  D ]  }|j                  t        j                  k(  r"|j                  t        j                  t        j                  fv r`|j                  du r)|j                  | j                  |j                             |j                  | j"                  |j                             |j                  t        j$                  t        j&                  fv s|j                  | j                  |j                              t)        |      }||z   S )a,  Transform args, kwargs of __call__ to args for graph_module.

        self.graph_module takes stuff from state dict as inputs.
        The invariant is for ep: ExportedProgram is
        ep(args, kwargs) ==
          ep.postprocess(ep.graph_module(ep.graph_module_flat_inputs(args, kwargs)))
        z>Trying to flatten user inputs with exported input tree spec: 
z-
but actually got inputs with tree spec of: 
F)r  rM   r  r1   rx   ro  r   r   r   r=   r  r  r  r	  r   r   r   r   CONSTANT_TENSOR
CUSTOM_OBJr   )rS   ri   rj   rM   r  r  additional_inputsinput_s           rX   _graph_module_flat_inputsz)ExportedProgram._graph_module_flat_inputs  sf    ..((#'#A#A$#O 	=}7$A(
 Q) @ /#  **66 	HF{{i222##  !  $$- &,,T^^FMM-JK%,,T__V]]-KL))$$!  "(()FG#	H$ ""34 !9,,rZ   c                     t        d      )Nz\Unable to call ExportedProgram directly. You should use `exported_program.module()` instead.r  )rS   ri   rj   s      rX   __call__zExportedProgram.__call__-  s    B
 	
rZ   c           	      :   ddl mc m} | j                  ||      \  }}| j                  j
                  | j                  j                  }| j                  j                  }t        |      t        |      z   }	|d|	 }
| j                  j                  }|'t        t        |j                                     }|d| }||	d }	 t        j                  || j                  j
                        }	 | j                  j&                  D cg c]!  }|j(                  t*        j,                  k(  r|# }}t/        |
      D ]  \  }}| j                  j0                  |   j(                  t2        j4                  k(  r(j6                  J || j8                  j6                  <   dj(                  t2        j:                  k(  r@j6                  J t        fdt/        |      D              }||   j=                  |       t?        dj(                          |S |S # t         $ rD t        j"                  |      \  }}|j%                  d| j                  j
                   d|       w xY wc c}w # | j                  j&                  D cg c]!  }|j(                  t*        j,                  k(  r|# nc c}w }}t/        |
      D ]  \  }}| j                  j0                  |   j(                  t2        j4                  k(  r(j6                  J || j8                  j6                  <   dj(                  t2        j:                  k(  r@j6                  J t        fdt/        |      D              }||   j=                  |       t?        dj(                          w xY w)zProcess potential mutations to the input.

        Because self.graph_module is functional, so mutations has to be written
        back after execution of graph_module.
        r   Nz@Trying to flatten user outputs with exported output tree spec: 
z.
but actually got outputs with tree spec of: 
c              3   n   K   | ],  \  }}|j                   j                  j                  k(  r| . y wrQ   )r   rR   r   )r  rV   r;  output_specs      rX   r  zDExportedProgram._postprocess_graph_module_outputs.<locals>.<genexpr>`  s3      % '4#xx}}0B0BB %s   25zUnexpected kind: ) torch._export.error_exporterrorr  r  rN   r   rO  r  r   assertion_dep_tokennextiterr   r`   r   	ExceptionrN  InternalErrorr   r   r=   r  r  r   r?   r  r   r   r  copy_r  )rS   resr   orig_kwargsr  r  r3  buffer_mutationuser_input_mutationnum_mutatedmutated_valuesr  assertion_dep_token_indexr  r;  r
  rV   r  indexr  s                      @rX   !_postprocess_graph_module_outputsz1ExportedProgram._postprocess_graph_module_outputs3  s    	,+55iM	1>>""."22DDO"&"6"6"L"Lo.5H1IIK +.N #'"6"6"J"J".,06I6N6N6P1Q,R)445kl#CU++C1H1HI !% 4 4 @ @yyI$8$88  
 !*. 9 UHAu"&"6"6"C"CA"FK"'':+E+EE*11===>C(:(:;$))Z-K-KK*11=== $ %+4[+A% !
 "%(..u5,/@AQAQ@R-STTU 
s
;  #)#6#6s#; =))W~~../ 0E$o'  $ 4 4 @ @yyI$8$88   
 !*. 9 UHAu"&"6"6"C"CA"FK"'':+E+EE*11===>C(:(:;$))Z-K-KK*11=== $ %+4[+A% !
 "%(..u5,/@AQAQ@R-STTUs,   *H &I(AI%%I- -N&J-,C.Nc                     | j                   j                  dd      j                  dd      }t        | j                        j                  dd      }d| d| d| j
                   d}|S )NF)print_outputcolored
z
    zExportedProgram:
    z
Graph signature: z
Range constraints: )r   print_readablereplacerb   r   r  )rS   r   r   strings       rX   __str__zExportedProgram.__str__j  s    ((77 8 

'$
! 	 d223;;D(K. !  /0 1""&"8"8!9= 	 rZ   c                     ddl m}  ||       }ddt        fd}ddt        fd}t        j                  ||      |_        t        j                  ||      |_        |S )z_
        Returns a self contained GraphModule with all the parameters/buffers inlined.
        r8   )&_unlift_exported_program_lifted_statesmodec                     t        d      )Nz%Calling train() is not supported yet.NotImplementedErrorrS   r  s     rX   _trainz&ExportedProgram.module.<locals>._train  s    %&MNNrZ   c                     t        d      )Nz$Calling eval() is not supported yet.r  r	  s     rX   _evalz%ExportedProgram.module.<locals>._eval  s    %&LMMrZ   )T)r  r  booltypes
MethodTypetraineval)rS   r  r   r
  r  s        rX   r   zExportedProgram.modulew  s]     	D7=	Ot 	O	Nd 	N ''7&&uf5rZ   c                     t        d t        | j                  j                        D        t	        | j                  j                              S )Nc              3   `   K   | ]&  \  }}|j                   t        j                  k(  r| ( y wrQ   )r   r=   r  )r  rV   ss      rX   r  z=ExportedProgram._num_lifted_params_buffers.<locals>.<genexpr>  s.      Aq66Y111 s   ,.)r  r  r  r   r   r  s    rX   _num_lifted_params_buffersz*ExportedProgram._num_lifted_params_buffers  sC    %d&;&;&G&GH
 %%112
 	
rZ   r   r   c                     |
t               n
t        |      }t        |t              r|j	                         }t        |      \  }}t        | ||d|      S )a  
        Run a set of decompositions on the exported program and returns a new
        exported program. By default we will run the Core ATen decompositions to
        get operators in the
        `Core ATen Operator Set <https://pytorch.org/docs/stable/torch.compiler_ir.html>`_.

        For now, we do not decompose joint graphs.

        Args:
            decomp_table:
             An optional argument that specifies decomp behaviour for Aten ops
             (1) If None, we decompose to core aten decompositions
             (2) If empty, we don't decompose any operator


        Some examples:

        If you don't want to decompose anything

        .. code-block:: python

            ep = torch.export.export(model, ...)
            ep = ep.run_decompositions(decomp_table={})

        If you want to get a core aten operator set except for certain operator, you can do following:

        .. code-block:: python

            ep = torch.export.export(model, ...)
            decomp_table = torch.export.default_decompositions()
            decomp_table[your_op] = your_custom_decomp
            ep = ep.run_decompositions(decomp_table=decomp_table)
        Nr  )rI   rw   r   r4   materializer   r  )rS   r   r   _decomp_tabler   r   s         rX   run_decompositionsz"ExportedProgram.run_decompositions  sk    P )5(<"$$|BT 	 m%67)557M" 9G	
 +' 3!(C
 	
rZ   passesc                 T   t        t        |            }ddlm}  |       5   || j                        }d d d        |j                  n| j                  }|J || j                  u r|j
                  s| S dt        dt        j                  j                  dt        fd}t        ||j                   || j                  |      | j                  t        || j                        t!        j"                  | j$                        | j&                  | j(                  | j*                  	      }|j                  j,                  j/                  | j                  j,                         |j                  j,                  j/                  |j                  j,                         |S # 1 sw Y   jxY w)Nr   )r   old_signaturenew_gmrt   c           	         g }t        |j                  j                        D ]  \  }}|j                  dk7  r n|t	        | j
                        k  sJ d       | j
                  |   }t        |j                  t        t        f      r|j                  n$ t        |j                        |j                        }|j                  t        |j                  ||j                  |j                                 t#        |j                  j                        d   }|j                  dk(  sJ g }t        |j$                  d         D ]  \  }}|t	        | j&                        k  sJ d       | j&                  |   }	t        |	j                  t        t        f      r|	j                  n$ t        |	j                        |j                        }|j                  t)        |	j                  ||	j                                t+        ||      }
|
S )zO
            Update the graph signature's user_input/user_outputs.
            r   z-Number of inputs changed after transformationr   rJ  r   z.Number of outputs changed after transformationr   )r  r   r   r~   r   r   r   r   r:   r;   r   rR   r   r>   r   r   r	  r^   ri   r   r@   r<   )r  r  new_input_specsrV   r#  old_input_specr   output_nodenew_output_specsold_output_specnew_signatures              rX   _get_updated_graph_signaturezKExportedProgram._transform_do_not_use.<locals>._get_updated_graph_signature  s     !O$V\\%7%78 477m+3}8899 C9 "/!:!:1!= "&**-=?P,Q #&& 2n001$))<   &&&++&--&11	0 v||11226K>>X---!$[%5%5a%89 43}99:: D: #0"<"<Q"? "'++.>@Q-R $'' 3o112499=  !''33S/:P:PQ  1+:JM ! rZ   	r  r   r   r   r  rZ  r   r   r  )r7   r^   r   r   r   modifiedr<   r   r  rW  rF   r   r   r   r  r  r   rk  r  r   r   r  r   r   )rS   r  pmr   r  transformed_gmr%  transformed_eps           rX   _transform_do_not_usez%ExportedProgram._transform_do_not_use  so   f& 	@$& 	(T&&'C	(-0_))$BSBS)))T...s||K7	!/7	!HH((7	! "7	!r ) &&8$$n <&& #mmD,C,CD..nnnn
  	##((//0A0A0F0FG##((//0@0@0E0EFi	( 	(s   FF'c                 R   ddl m} | j                  j                  D cg c]  }|j                  dk(  s| }}t        || j                  j                        D cg c]$  \  }}|j                  t        j                  k(  r|& }}} |||| j                         y c c}w c c}}w )Nr   )"_check_input_constraints_for_graphr   )torch._export.utilsr-  r   r   r~   r   r   r   r   r=   r  r  )rS   r  r-  r/  placeholdersr  input_placeholderss          rX   r  z(ExportedProgram._check_input_constraints6  s    J#'::#3#3Maqtt}7LMM L$*>*>*J*JK
1vv--- 
 

 	+ 3T5K5K	
 N
s   BB)B#c                 $    | j                          y rQ   )	_validater  s    rX   r  zExportedProgram.validateC  s    rZ   c                     t        | j                        dkD  sJ d       | j                  D ]  } |       j                  |         y )Nr   z0ExportedProgram must have at least one verifier.)r   r  check)rS   rG  s     rX   r2  zExportedProgram._validateH  sE    4>>"Q& 	
>	
&  	ACIIdO	rZ   )r   r   r  c                $   t        ||j                  |||n| j                  t        j                  | j
                        t        j                  | j                        | j                  ||n| j                  ||	      S | j                  	      S )Nr&  )
rF   r   r   r   rk  r  r  r   r   r  )rS   r   r   r   r   r  s         rX   _updatezExportedProgram._updateQ  s     $$+%/%;z"mmD,B,BC"mmD,C,CD..#,#8idnn#,#8i

 
	
 ?Cnn

 
	
rZ   )NN)NF)rt   rF   )Ar[   r\   r]   __doc__r   r   r   Modulerw   rb   r   r  Graphr<   r  r   r^   rG   r
   r   r   r   r,   r  propertyr5   r   setterr   r   r   r   r  r   r  r   r  rZ  r   r  r  r  r  r  r   r  r  r  r  r  r   r  ro   _opsOperatorBaser   r  r  PassTyper+  r  r  r	   r2  r6  rc   rZ   rX   rF   rF     s   . LPAE# 59#EHHOOT#s(^34# xx~~# .	#
 eELL%((2D2D$DEEF# 5#  0# !uS#XS#X'F!GH# D&<!<=># Dh01#J %0" 1 " %0V 1 V %0' 1 ' \\%0O 1 O %0% 1 % %0Y 1 Y %0  1   %0T 1 T %0HUXX%7%78  1 %0:(5ehh6H6H1H+I"J : 1: %0%,,/  1 %0
@xc5<<.?(@A 
@ 1
@ %0' 1 ' %0
 1 

 %0' 1 ' %0
 1 

 %0$ 1 $ %0% 1 %2 %0	
 1 	
 %0S 1 S %0"# " 1 " __%0R 1 R %0* * 1 * ^^%0Q 1 Q %0 1  %0S 1 S %0 1  %0
 1 

 %0 1  %0S 1 S(.,-c ,-3 ,-3 ,-\
c 
S 
S 
5n  $
 $ KO,1D
tEJJ$;$;X$EFGD
 &*D
 
	D
 $D
LZX Z:K Zx
 %0 1   
 

rZ   rF   c                 P   | j                   j                  D cg c]-  }|j                  j                  dd       |j                  d   / }}ddlm}  ||      }||j                  S |D ]4  }t        |t        j                        s|j                  j                  c S  y c c}w )Nr   r   r-   )r   r   r   r  torch._guardsr.   r   r   r   SymIntr#  )r   r#  valsr.   r  rG  s         rX   r  r  g  s     HHNN99==%1 			%D 
 / &I""" $a&66###$s   2B#old_range_constraintsz!Optional[dict[sympy.Symbol, Any]]r  c                 <   |J t        |       }|i S t        j                  |      }|j                         D ci c]  \  }}||j                  vs|| }}}|j                  j                         D ]  \  }}||j                  vs||vs|||<     |S c c}}w rQ   )r  r   r   replacementsvar_to_range)r   rC  r   r  r   rG  s         rX   r  r  w  s     !,,,r"I			"78*002Aay?U?U6U1  &&,,. %1I***q8I/I#$a % s   BBc                    	 t         j                  j                  | |      }|S # t        $ r\ t	        j
                  d       t         j                  j                  | t         j                  j                               }||_        Y |S w xY w)NzUnable to execute the generated python source code from the graph. The graph module will no longer be directly callable, but you can still run the ExportedProgram, and if needed, you can run the graph module eagerly using torch.fx.Interpreter.)r   r  rW  SyntaxErrorwarningswarnr9  _graph)r  r   r   s      rX   r  r    sx    XX!!$.  I   	G	
 XX!!$(89	Is    $ A!B	B	)rt   r4   rQ   )r   r   dataclassesrm   rX  r  rI  collectionsr   r   collections.abcr   r   typingr   r   r	   r
   r   r   r@  r   r   torch._higher_order_ops.utilsr   "torch._library.fake_class_registryr   torch._subclasses.fake_implsr   r   r   torch._subclasses.fake_tensorr   torch.fx._symbolic_tracer   torch.fx._utilsr   torch.fx.graphr   r   torch.fx.immutable_collectionsr   r   torch.fx.passes.runtime_assertr   sympytorch.utils._sympy.value_rangesr   r   torch.utils._pytreeutils_pytreer`   r.  r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   torch._export.verifierr,   r.   r0   torch.export._tree_utilsr1   r2   torch.export.decomp_utilsr4   torch.fx._compatibilityr5   torch.fx.passes.infra.pass_baser6   "torch.fx.passes.infra.pass_managerr7   r   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   __all__r  rW  r>  	dataclassrH   rG   ro   r   Contextr  rx   r   r   AutogradCPUAutogradCUDAAutogradMetaAutogradXLAAutogradLazyAutogradIPUAutogradXPUAutogradMPSAutogradHPUAutogradPrivateUse1AutogradPrivateUse2AutogradPrivateUse3r   CPUCUDAMetaXLALazyIPUXPUMPSHPUr   r   rw   r<  r=  r   r   rI   intrH  r   r`  r^   r  r  rF   r  r  r  rc   rZ   rX   <module>r}     s          / $ % G G 1 B ? 
 9 ; ? 6 I J 
 ;  $ $    " , * @ B 7 1 6 :   " UXX))*HZ,@@A ' ' '  4 4 4
GG>>G G >>	G
 
G: 
HH$$	HH%%	HH%%	HH$$	HH%%	HH$$	HH$$	HH$$	HH$$	HH,,	HH,,	HH,,, (, 
HH	HH	HH	HH	HH	HH	HH	HH	HH
  P$ P$f)-uzz..89)-
4

''12C78)-Xz2 

//9:z2 ejj55x?@	z2
 smz2z##3G#
588!556#2..:r!HH  r!-r! 	r! *	r!
  0r!j4 

//9:4 ejj55x?@	4
 sm4 "&4n~	
 ~	
B$$ BF> .rZ   