
    IЦiX                        S SK r S SKJrJr  S SKJrJrJrJrJ	r	J
r
JrJr  S SKJr  \(       a
  S SKrS SKJr  / SQr\ R&                   " S S5      5       r\ R&                   " S	 S
5      5       r\ R&                   " S S5      5       r\ R&                   " S S5      5       r\ R&                   " S S5      5       r\ R&                   " S S5      5       r\ R&                   " S S5      5       r\\\\\\\\4   r " S S\5      r\ R&                   " S S5      5       r " S S\5      r\ R&                   " S S5      5       r\ R&                   " S S5      5       r \ R&                   " S S 5      5       r!S! r"S"\4S# jr#S$S%S&S'S(\
\$   S"S 4S) jr%g)*    N)autoEnum)
CollectionDictListMappingOptionalSetTYPE_CHECKINGUnionFakeScriptObject)GraphSignature)ConstantArgumentCustomObjArgumentExportBackwardSignatureExportGraphSignature	InputKind	InputSpec
OutputKind
OutputSpecSymIntArgumentSymFloatArgumentSymBoolArgumentTensorArgumentc                        \ rS rSr% \\S'   Srg)r      name N__name__
__module____qualname____firstlineno__str__annotations____static_attributes__r       [/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/export/graph_signature.pyr   r          
Ir(   r   c                        \ rS rSr% \\S'   Srg)TokenArgument"   r   r   Nr    r   r(   r)   r,   r,   "   r*   r(   r,   c                        \ rS rSr% \\S'   Srg)r   '   r   r   Nr    r   r(   r)   r   r   '   r*   r(   r   c                        \ rS rSr% \\S'   Srg)r   ,   r   r   Nr    r   r(   r)   r   r   ,   r*   r(   r   c                        \ rS rSr% \\S'   Srg)r   1   r   r   Nr    r   r(   r)   r   r   1   r*   r(   r   c                   >    \ rS rSr% \\S'   \\S'   Sr\\   \S'   Sr	g)r   6   r   	class_fqnNfake_valr   )
r!   r"   r#   r$   r%   r&   r7   r	   r   r'   r   r(   r)   r   r   6   s    
IN+/Hh'(/r(   r   c                   :    \ rS rSr% \\S'   \\\\	\S4   \S'   Sr
g)r   =   r   Nvaluer   )r!   r"   r#   r$   r%   r&   r   intfloatboolr'   r   r(   r)   r   r   =   s    
IeT3,--r(   r   c                   h    \ rS rSr\" 5       r\" 5       r\" 5       r\" 5       r\" 5       r	\" 5       r
Srg)r   N   r   N)r!   r"   r#   r$   r   
USER_INPUT	PARAMETERBUFFERCONSTANT_TENSOR
CUSTOM_OBJTOKENr'   r   r(   r)   r   r   N   s,    JIVFfOJFEr(   r   c                   T    \ rS rSr% \\S'   \\S'   \\   \S'   Sr	\\
   \S'   S rSrg)	r   W   kindargtargetN
persistentc           
         U R                   [        R                  :X  a  U R                  c   S5       e[	        U R
                  [        [        [        [        [        [        [        45      (       d   S[        U R
                  5       35       eg )Nz,Failed to specify persistent flag on BUFFER.zgot )rH   r   rB   rK   
isinstancerI   r   r   r   r   r   r   r,   typeselfs    r)   __post_init__InputSpec.__post_init__^   s    99	(((+>=>+HH  !
 
 	# $txx.!"	# 
r(   r   )r!   r"   r#   r$   r   r&   ArgumentSpecr	   r%   rK   r=   rQ   r'   r   r(   r)   r   r   W   s*    
O	SM!%J%#r(   r   c                   v    \ rS rSr\" 5       r\" 5       r\" 5       r\" 5       r\" 5       r	\" 5       r
\" 5       rSrg)r   q   r   N)r!   r"   r#   r$   r   USER_OUTPUTLOSS_OUTPUTBUFFER_MUTATIONGRADIENT_TO_PARAMETERGRADIENT_TO_USER_INPUTUSER_INPUT_MUTATIONrE   r'   r   r(   r)   r   r   q   s6    &K&KfO F!V&FEr(   r   c                   @    \ rS rSr% \\S'   \\S'   \\   \S'   S r	Sr
g)r   {   rH   rI   rJ   c           
          [        U R                  [        [        [        [
        [        [        [        45      (       d   U R                  5       eg N)	rM   rI   r   r   r   r   r   r,   r   rO   s    r)   rQ   OutputSpec.__post_init__   sH    HH  !
 
 	 88	 
r(   r   N)r!   r"   r#   r$   r   r&   rS   r	   r%   rQ   r'   r   r(   r)   r   r   {   s    
	SMr(   r   c                   H    \ rS rSr% \\\4   \S'   \\\4   \S'   \\S'   Srg)r      gradients_to_parametersgradients_to_user_inputsloss_outputr   N)r!   r"   r#   r$   r   r%   r&   r'   r   r(   r)   r   r      s$    !#s(^+"38n,r(   r   c            	          \ rS rSr% Sr\\   \S'   \\   \S'   \	S\
\   4S j5       r\	S\
\   4S j5       r\	S\
\   4S j5       r\	S\
\   4S	 j5       r\	S\
\   4S
 j5       r\	S\
\\\\S\4      4S j5       r\	S\
\\\\S\4      4S j5       r\	S\\\4   4S j5       r\	S\\\4   4S j5       r\	S\\\4   4S j5       r\	S\\\4   4S j5       r\	S\\\4   4S j5       r\	S\\\4   4S j5       r\	S\\   4S j5       r \	S\\\\4      4S j5       r!\	S\
\   4S j5       r"\	S\
\   4S j5       r#SS jr$S\S\4S jr%SS jr&Sr'g) r      a  
:class:`ExportGraphSignature` models the input/output signature of Export Graph,
which is a fx.Graph with stronger invariants gurantees.

Export Graph is functional and does not access "states" like parameters
or buffers within the graph via ``getattr`` nodes. Instead, :func:`export`
gurantees that parameters, buffers, and constant tensors are lifted out of
the graph as inputs.  Similarly, any mutations to buffers are not included
in the graph either, instead the updated values of mutated buffers are
modeled as additional outputs of Export Graph.

The ordering of all inputs and outputs are::

    Inputs = [*parameters_buffers_constant_tensors, *flattened_user_inputs]
    Outputs = [*mutated_inputs, *flattened_user_outputs]

e.g. If following module is exported::

    class CustomModule(nn.Module):
        def __init__(self) -> None:
            super(CustomModule, self).__init__()

            # Define a parameter
            self.my_parameter = nn.Parameter(torch.tensor(2.0))

            # Define two buffers
            self.register_buffer('my_buffer1', torch.tensor(3.0))
            self.register_buffer('my_buffer2', torch.tensor(4.0))

        def forward(self, x1, x2):
            # Use the parameter, buffers, and both inputs in the forward method
            output = (x1 + self.my_parameter) * self.my_buffer1 + x2 * self.my_buffer2

            # Mutate one of the buffers (e.g., increment it by 1)
            self.my_buffer2.add_(1.0) # In-place addition

            return output

Resulting Graph would be::

    graph():
        %arg0_1 := placeholder[target=arg0_1]
        %arg1_1 := placeholder[target=arg1_1]
        %arg2_1 := placeholder[target=arg2_1]
        %arg3_1 := placeholder[target=arg3_1]
        %arg4_1 := placeholder[target=arg4_1]
        %add_tensor := call_function[target=torch.ops.aten.add.Tensor](args = (%arg3_1, %arg0_1), kwargs = {})
        %mul_tensor := call_function[target=torch.ops.aten.mul.Tensor](args = (%add_tensor, %arg1_1), kwargs = {})
        %mul_tensor_1 := call_function[target=torch.ops.aten.mul.Tensor](args = (%arg4_1, %arg2_1), kwargs = {})
        %add_tensor_1 := call_function[target=torch.ops.aten.add.Tensor](args = (%mul_tensor, %mul_tensor_1), kwargs = {})
        %add_tensor_2 := call_function[target=torch.ops.aten.add.Tensor](args = (%arg2_1, 1.0), kwargs = {})
        return (add_tensor_2, add_tensor_1)

Resulting ExportGraphSignature would be::

    ExportGraphSignature(
        input_specs=[
            InputSpec(kind=<InputKind.PARAMETER: 2>, arg=TensorArgument(name='arg0_1'), target='my_parameter'),
            InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg1_1'), target='my_buffer1'),
            InputSpec(kind=<InputKind.BUFFER: 3>, arg=TensorArgument(name='arg2_1'), target='my_buffer2'),
            InputSpec(kind=<InputKind.USER_INPUT: 1>, arg=TensorArgument(name='arg3_1'), target=None),
            InputSpec(kind=<InputKind.USER_INPUT: 1>, arg=TensorArgument(name='arg4_1'), target=None)
        ],
        output_specs=[
            OutputSpec(kind=<OutputKind.BUFFER_MUTATION: 3>, arg=TensorArgument(name='add_2'), target='my_buffer2'),
            OutputSpec(kind=<OutputKind.USER_OUTPUT: 1>, arg=TensorArgument(name='add_1'), target=None)
        ]
    )
input_specsoutput_specsreturnc                 :    [        S U R                   5       5      $ )Nc              3      #    U  HR  nUR                   [        R                  :X  d  M#  [        UR                  [
        5      (       d  MD  UR                  v   MT     g 7fr_   )rH   r   rA   rM   rJ   r%   .0ss     r)   	<genexpr>2ExportGraphSignature.parameters.<locals>.<genexpr>   sD      
%vv,,,  !((C( AHH%   "AA	Atuplerh   rO   s    r)   
parametersExportGraphSignature.parameters   "     
%%
 
 	
r(   c                 :    [        S U R                   5       5      $ )Nc              3      #    U  HR  nUR                   [        R                  :X  d  M#  [        UR                  [
        5      (       d  MD  UR                  v   MT     g 7fr_   )rH   r   rB   rM   rJ   r%   rm   s     r)   rp   /ExportGraphSignature.buffers.<locals>.<genexpr>   sD      
%vv)))  !((C( AHH%rr   rs   rO   s    r)   buffersExportGraphSignature.buffers   rw   r(   c                 :    [        S U R                   5       5      $ )Nc              3      #    U  Hc  nUR                   [        R                  :X  d  M#  UR                  S L d  M4  [	        UR
                  [        5      (       d  MU  UR
                  v   Me     g7f)FN)rH   r   rB   rK   rM   rJ   r%   rm   s     r)   rp   >ExportGraphSignature.non_persistent_buffers.<locals>.<genexpr>   sW      
%vv)))  ||u$  !((C(	 AHH%s   "A-A-A-A-rs   rO   s    r)   non_persistent_buffers+ExportGraphSignature.non_persistent_buffers   s"     
%%
 
 	
r(   c                 :    [        S U R                   5       5      $ )Nc              3      #    U  HR  nUR                   [        R                  :X  d  M#  [        UR                  [
        5      (       d  MD  UR                  v   MT     g 7fr_   )rH   r   rC   rM   rJ   r%   rm   s     r)   rp   ?ExportGraphSignature.lifted_tensor_constants.<locals>.<genexpr>  sD      
%vv222  !((C( AHH%rr   rs   rO   s    r)   lifted_tensor_constants,ExportGraphSignature.lifted_tensor_constants  rw   r(   c                 :    [        S U R                   5       5      $ )Nc              3      #    U  HR  nUR                   [        R                  :X  d  M#  [        UR                  [
        5      (       d  MD  UR                  v   MT     g 7fr_   )rH   r   rD   rM   rJ   r%   rm   s     r)   rp   :ExportGraphSignature.lifted_custom_objs.<locals>.<genexpr>  sD      
%vv---  !((C( AHH%rr   rs   rO   s    r)   lifted_custom_objs'ExportGraphSignature.lifted_custom_objs
  rw   r(   Nc           	         / nU R                    H  nUR                  [        R                  :w  a  M#  [	        UR
                  [        [        [        [        [        45      (       a'  UR                  UR
                  R                  5        M~  [	        UR
                  [        5      (       a'  UR                  UR
                  R                  5        M  [        UR
                   S35      e   [!        U5      $ )Nz is not a valid user inputs)rh   rH   r   r@   rM   rI   r   r   r   r   r   appendr   r   r:   RuntimeErrorrt   )rP   user_inputsro   s      r)   r    ExportGraphSignature.user_inputs  s    @B!!Avv---""$#%	 	 ""155::.AEE#344""155;;/"aeeW,G#HII% "& [!!r(   c                    / nU R                    GH,  nUR                  [        R                  [        R                  4;  a  M4  [        UR                  [        [        [        [        45      (       a'  UR                  UR                  R                  5        M  [        UR                  [        5      (       a'  UR                  UR                  R                  5        M  [        UR                  [        5      (       a(  UR                  UR                  R                  5        GM  [!        UR                   S35      e   [#        U5      $ )Nz is not a valid user output)ri   rH   r   rV   rW   rM   rI   r   r   r   r   r   r   r   r:   r   r   rt   )rP   user_outputsro   s      r)   r   !ExportGraphSignature.user_outputs.  s    AC""Avv&&&&  1A?S  ##AEEJJ/AEE#344##AEEKK0AEE#455##AEEJJ/"aeeW,G#HII# #$ \""r(   c                 :    [        S U R                   5       5      $ )Nc              3   *  #    U  H  nUR                   [        R                  :X  d  M#  [        UR                  [
        5      (       d  MD  [        UR                  [        5      (       d  Me  UR                  R                  UR                  4v   M     g 7fr_   )	rH   r   rA   rM   rI   r   rJ   r%   r   rm   s     r)   rp   <ExportGraphSignature.inputs_to_parameters.<locals>.<genexpr>I  sf      
%vv,,, # 155.1 # 188S)	 #QUUZZ"%   "BB	B*)B_immutable_dictrh   rO   s    r)   inputs_to_parameters)ExportGraphSignature.inputs_to_parametersG  "     
%%
 
 	
r(   c                 :    [        S U R                   5       5      $ )Nc              3   *  #    U  H  nUR                   [        R                  :X  d  M#  [        UR                  [
        5      (       d  MD  [        UR                  [        5      (       d  Me  UR                  R                  UR                  4v   M     g 7fr_   )	rH   r   rB   rM   rI   r   rJ   r%   r   rm   s     r)   rp   9ExportGraphSignature.inputs_to_buffers.<locals>.<genexpr>U  sf      
%vv))) # 155.1 # 188S)	 #QUUZZ"%r   r   rO   s    r)   inputs_to_buffers&ExportGraphSignature.inputs_to_buffersS  r   r(   c                 :    [        S U R                   5       5      $ )Nc              3   *  #    U  H  nUR                   [        R                  :X  d  M#  [        UR                  [
        5      (       d  MD  [        UR                  [        5      (       d  Me  UR                  R                  UR                  4v   M     g 7fr_   )	rH   r   rX   rM   rI   r   rJ   r%   r   rm   s     r)   rp   9ExportGraphSignature.buffers_to_mutate.<locals>.<genexpr>a  sf      
&vv333 # 155.1 # 188S)	 #QUUZZ"&r   r   ri   rO   s    r)   buffers_to_mutate&ExportGraphSignature.buffers_to_mutate_  "     
&&
 
 	
r(   c                 :    [        S U R                   5       5      $ )Nc              3   *  #    U  H  nUR                   [        R                  :X  d  M#  [        UR                  [
        5      (       d  MD  [        UR                  [        5      (       d  Me  UR                  R                  UR                  4v   M     g 7fr_   )	rH   r   r[   rM   rI   r   rJ   r%   r   rm   s     r)   rp   =ExportGraphSignature.user_inputs_to_mutate.<locals>.<genexpr>k  sf      
&vv777 # 155.1 # 188S)	 #QUUZZ"&r   r   rO   s    r)   user_inputs_to_mutate*ExportGraphSignature.user_inputs_to_mutatei  r   r(   c                 :    [        S U R                   5       5      $ )Nc              3   *  #    U  H  nUR                   [        R                  :X  d  M#  [        UR                  [
        5      (       d  MD  [        UR                  [        5      (       d  Me  UR                  R                  UR                  4v   M     g 7fr_   )	rH   r   rC   rM   rI   r   rJ   r%   r   rm   s     r)   rp   IExportGraphSignature.inputs_to_lifted_tensor_constants.<locals>.<genexpr>v  sf      
%vv222 # 155.1 # 188S)	 #QUUZZ"%r   r   rO   s    r)   !inputs_to_lifted_tensor_constants6ExportGraphSignature.inputs_to_lifted_tensor_constantst  r   r(   c                 :    [        S U R                   5       5      $ )Nc              3   *  #    U  H  nUR                   [        R                  :X  d  M#  [        UR                  [
        5      (       d  MD  [        UR                  [        5      (       d  Me  UR                  R                  UR                  4v   M     g 7fr_   )	rH   r   rD   rM   rI   r   rJ   r%   r   rm   s     r)   rp   DExportGraphSignature.inputs_to_lifted_custom_objs.<locals>.<genexpr>  sg      
%vv--- # 155"34 # 188S)	 #QUUZZ"%r   r   rO   s    r)   inputs_to_lifted_custom_objs1ExportGraphSignature.inputs_to_lifted_custom_objs~  r   r(   c                     S n0 n0 nU R                    GHi  nUR                  [        R                  :X  a>  Ub   e[	        UR
                  [        5      (       d   eUR
                  R                  nM`  UR                  [        R                  :X  af  [	        UR                  [        5      (       d   e[	        UR
                  [        5      (       d   eUR                  X$R
                  R                  '   M  UR                  [        R                  :X  d  GM  [	        UR                  [        5      (       d   e[	        UR
                  [        5      (       d   eUR                  X4R
                  R                  '   GMl     Uc  g [        UUUS9$ )N)re   rc   rd   )ri   rH   r   rW   rM   rI   r   r   rY   rJ   r%   rZ   r   )rP   re   rc   rd   specs        r)   backward_signature'ExportGraphSignature.backward_signature  s0   2435 %%DyyJ222"***!$((N;;;;"hhmmj>>>!$++s3333!$((N;;;;9='6j???!$++s3333!$((N;;;;:>++(7 & &#$;%=
 	
r(   c                     g r_   r   rO   s    r)   assertion_dep_token(ExportGraphSignature.assertion_dep_token  s    r(   c                    / nU R                    Hi  nUR                  [        R                  :X  d  M#  [	        UR
                  [        5      (       d   eUR                  UR
                  R                  5        Mk     [        U5      $ r_   )
rh   rH   r   rE   rM   rI   r,   r   r   rt   )rP   input_tokensro   s      r)   r   !ExportGraphSignature.input_tokens  sa    !!Avv(!!%%7777##AEEJJ/ " \""r(   c                    / nU R                    Hi  nUR                  [        R                  :X  d  M#  [	        UR
                  [        5      (       d   eUR                  UR
                  R                  5        Mk     [        U5      $ r_   )
ri   rH   r   rE   rM   rI   r,   r   r   rt   )rP   output_tokensro   s      r)   r   "ExportGraphSignature.output_tokens  sc    ""Avv)))!!%%7777$$QUUZZ0 # ]##r(   c                     U R                   nUc  g [        U5      S:X  d   e[        [        UR	                  5       5      5      n[        U R
                  5      [        U R                  5      -   U:X  d   eg )N   )r   lennextiterkeysr   r   )rP   r   assertion_dep_token_indexs      r)   rQ   "ExportGraphSignature.__post_init__  su    "66&&'1,,,$(.A.F.F.H)I$J!!!"S)?)?%@@()	
)r(   oldnewc                    [        U[        5      (       d   e[        U[        5      (       d   e[        [        [        [
        [        [        4nU R                   HL  n[        UR                  U5      (       d  M   UR                  R                  U:X  d  M<  X$R                  l
        MN     U R                   HL  n[        UR                  U5      (       d  M   UR                  R                  U:X  d  M<  X%R                  l
        MN     g)zB
Replace all uses of the old name with new name in the signature.
N)rM   r%   r   r   r   r   r   r,   ri   rI   r   rh   )rP   r   r   	arg_typesois         r)   replace_all_uses%ExportGraphSignature.replace_all_uses  s     #s#####s####
	 ""A!%%++55::$!$EEJ # !!A!%%++55::$!$EEJ "r(   c                    ^ ^ UU 4S jnU$ )Nc                    > UR                   S:X  a  TR                  U R                  U5        T(       a.  U R                   S:X  a  TR                  U R                  U5        g g g )Noutputplaceholder)opr   r   )r   r   userreplace_inputsrP   s      r)   _0ExportGraphSignature.get_replace_hook.<locals>._  sL    ww("%%chh4#&&M"9%%chh4 #:~r(   r   )rP   r   r   s   `` r)   get_replace_hook%ExportGraphSignature.get_replace_hook  s    	5 r(   r   )rj   N)F)(r!   r"   r#   r$   __doc__r   r   r&   r   propertyr   r%   ru   r{   r   r   r   r   r;   r<   r=   r   r   r   r   r   r   r   r   r   r	   r   r   r   r   r   rQ   r   r   r'   r   r(   r)   r   r      s   DL i z"" 
JsO 
 
 
C 
 
 

3 
 
 
C 
 
 
JsO 
 
 "Zc5$c.I(JK " "2 #jsE4s/J)KL # #0 
gc3h&7 
 
 
738#4 
 
 
738#4 
 
 
wsCx'8 
 
 
7383D 
 
 
gc3h.? 
 
 
H-D$E 
 
< Xgc3h.?%@   #jo # # $z# $ $	
%C %c %.r(   r   c                 0    SSK Jn  U" [        U 5      5      $ )z
Creates a mapping where items cannot be added, deleted, or updated.
NOTE: The immutability is shallow (like tuple is an immutable collection).
r   )MappingProxyType)typesr   dict)itemsr   s     r)   r   r     s    
 'DK((r(   rj   c           
         SSK JnJnJnJn  SSKJn  SSKJn  [        U [        [        [        [        S 5      [        45      (       a
  [        SU S9$ SU R                   ;   d
   U  S35       eU R                   S   nU R"                  U;   a  [%        U R"                  S	9$ [        X5      (       a  ['        U R"                  S	9$ [        X5      (       a  [)        U R"                  S	9$ [        X5      (       a  [+        U R"                  S	9$ [        X5      (       a  [-        U R"                  S	9$ [        X5      (       a0  [/        U R"                  UR1                  5       R3                  5       S
9$ [        X5      (       a  [/        U R"                  UR4                  US9$ [        U[        [        [        [        [        S 5      45      (       a  [        U R"                  US9$ [7        S[        U5       S35      e)Nr   )ScriptObjectSymBoolSymFloatSymIntr   )
FakeTensor )r   r:   valz8 is not a constant or a node with a 'val' metadata field)r   )r   r6   )r   r6   r7   z*Encountered an unsupported object of type z0 while writing the metadata for exported program)torchr   r   r   r   "torch._library.fake_class_registryr   torch._subclasses.fake_tensorr   rM   r;   r=   r<   rN   r%   r   metar   r,   r   r   r   r   r   _typequalified_namescript_class_nameAssertionError)	nodetoken_namesr   r   r   r   r   r   r   s	            r)   _make_argument_specr     s   ==C8$dE4:s;<<Rt44 	I
GHI
))E
CyyK$)),,	C	$	$499--	C	 	 499--	C	"	"TYY//	C	!	!DII..	C	&	& dii399;;U;U;WXX	C	*	* c&;&;c
 	
 
C#tS%d<	=	=TYYc::8c D> ?
 	
r(   graph_signaturer   gmztorch.fx.GraphModuler   c           	      J  ^^^^^^^^^^^ SSK Jn  U R                  S Ln[        U R                  5      mU R
                  mU R                  m[        U R                  5      mU R                  mU R                  mU(       a  U R                  R                  O0 mU(       a  U R                  R                  O0 mU(       a  U R                  R                  OS mU R                  nU R                  mUR                  R                    Vs/ s H   nUR"                  S:X  d  M  [%        Xe5      PM"     nnUR'                  [)        [+        [-        UR                  R                   5      5      5      R.                  5       Vs/ s H  n[%        UT5      PM     nnS[0        S[2        4UUUU4S jjn	S[4        S[0        S[6        4UUUUUUU4S	 jjn
U Vs/ s H
  o" U5      PM     nn[9        U5       VVs/ s H  u  pU
" X5      PM     nnn[;        XS
9$ s  snf s  snf s  snf s  snnf )Nr   )_pytreer   inprj   c                   > [        U [        5      (       a  [        [        R                  U S S9$ [        U [
        5      (       d  [        [        R                  U S S9$ U R                  nUT;   a  [        [        R                  U S S9$ UT;   a  [        [        R                  U TU   S9$ UT;   a#  [        [        R                  U TU   TU   T;  S9$ [        SU 35      e)NrH   rI   rJ   )rH   rI   rJ   rK   zUnknown tensor input kind: )rM   r,   r   r   rE   r   r@   r   rA   rB   r   )r   r   r   r   r   r   s     r)   to_input_spec9_convert_to_export_graph_signature.<locals>.to_input_spec9  s    c=)))//s4HH#~..)"6"6CMMxx;)"6"6CMM))((+D1 
 &&%%(.-d3;QQ	  !#>tf!EFFr(   idxr   c                   > [        U[        5      (       a  [        [        R                  US S9$ [        U[
        5      (       d  [        [        R                  US S9$ UR                  nU [        T5      [        T5      -   [        T5      -   :  aR  UT;   a  [        [        R                  UTU   S9$ UT;   a  [        [        R                  UTU   S9$ [        SU 35      eUT	;   a  [        [        R                  US S9$ UT;   a  [        [        R                  UTU   S9$ UT;   a  [        [        R                  UTU   S9$ UT:X  a  [        [        R                  US S9$ [        SU 35      e)Nr   zUnknown tensor mutation kind: zUnknown tensor output kind: )rM   r,   r   r   rE   r   rV   r   r   rX   r[   r   rY   rZ   rW   )
r  r   r   buffer_mutationsgrad_paramsgrad_user_inputsre   r   user_input_mutationsr   s
      r)   to_output_spec:_convert_to_export_graph_signature.<locals>.to_output_specR  s   a'':#3#34HH!^,,:#9#9qNNvv%&-A)BBSEWWW''!#33+D1 
 --!#77/5  %'EdV%LMM|#!z'='=1TRR$!#99&t, 
 ))!#::+D1 
 $!z'='=1TRR %'CD6%JKKr(   )rh   ri   )torch.utilsr   r   setr   r   r   r   r   r   gradients_to_parameterrd   re   r   r   graphnodesr   r   tree_leavesr   r   reversedargsrS   r   r;   r   	enumerater   )r   r   r   pytreeis_jointr   r   inputsoutputsr  r	  r   rh   r  r   ri   r  r  r  r   r   re   r   r  r   r   s     `             @@@@@@@@@@r)   "_convert_to_export_graph_signaturer    s   
 .11=H o112K*??'99334L&88*@@OW/44KK]_KV^99RRdfDL/44@@RVK"//L#11M HHNN"D77m# 	0D/"   &&tD"((..1I,J'K'P'PQQD 	D-0Q  
G< GI G G2*LC *LL *LZ *L *LX 288#=%K89B79KL9KvsN3*9KLLKSSc
T 9Ls   HH<HH0H)&dataclassesenumr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   &torch._functorch._aot_autograd.schemasr   __all__	dataclassr   r,   r   r   r   r   r   rS   r   r   r   r   r   r   r   r   r%   r  r   r(   r)   <module>r     s	     W W W ? E                 0 0 0 . . .
   # # #2    (    N N Nb
)#
l #
LgT%gTgT  HgT 	gTr(   