
    &Vjic                     B   d dl Z d dlmZmZ d dlmZmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ e	r
d dlZd dlmZ g dZe j         G d	 d
                      Ze j         G d d                      Ze j         G d d                      Ze j         G d d                      Ze j         G d d                      Ze j         G d d                      Ze j         G d d                      Ze
eeeeeeef         Z G d de          Ze j         G d d                      Z G d de          Ze j         G d d                      Ze j         G d d                       Z e j         G d! d"                      Z!d# Z"d$efd%Z#d&d'd(d)d*e$e%         d$d"fd+Z&dS ),    N)
CollectionMapping)autoEnum)OptionalTYPE_CHECKINGUnionFakeScriptObject)is_fake)GraphSignature)ConstantArgumentCustomObjArgumentExportBackwardSignatureExportGraphSignature	InputKind	InputSpec
OutputKind
OutputSpecSymIntArgumentSymFloatArgumentSymBoolArgumentTensorArgumentc                       e Zd ZU eed<   dS )r   nameN__name__
__module____qualname__str__annotations__     V/root/voice-cloning/.venv/lib/python3.11/site-packages/torch/export/graph_signature.pyr   r               
IIIIIr#   r   c                       e Zd ZU eed<   dS )TokenArgumentr   Nr   r"   r#   r$   r'   r'   $   r%   r#   r'   c                       e Zd ZU eed<   dS )r   r   Nr   r"   r#   r$   r   r   )   r%   r#   r   c                       e Zd ZU eed<   dS )r   r   Nr   r"   r#   r$   r   r   .   r%   r#   r   c                       e Zd ZU eed<   dS )r   r   Nr   r"   r#   r$   r   r   3   r%   r#   r   c                   >    e Zd ZU eed<   eed<   dZee         ed<   dS )r   r   	class_fqnNfake_val)r   r   r   r    r!   r-   r   r   r"   r#   r$   r   r   8   s:         
IIINNN+/Hh'(/////r#   r   c                   :    e Zd ZU eed<   eeeeedf         ed<   dS )r   r   Nvalue)	r   r   r   r    r!   r	   intfloatboolr"   r#   r$   r   r   ?   s7         
IIIeT3,------r#   r   c                       e Zd Z e            Z e            Z e            Z e            Z e            Z e            Z	dS )r   N)
r   r   r   r   
USER_INPUT	PARAMETERBUFFERCONSTANT_TENSOR
CUSTOM_OBJTOKENr"   r#   r$   r   r   P   sP        JITVVFdffOJDFFEEEr#   r   c                   `    e Zd ZU eed<   eed<   ee         ed<   dZee	         ed<   d Z
d ZdS )r   kindargtargetN
persistentc           
         | j         t          j        k    r| j        
J d            t	          | j        t          t          t          t          t          t          t          f          sJ dt          | j                               d S )Nz,Failed to specify persistent flag on BUFFER.zgot )r;   r   r6   r>   
isinstancer<   r   r   r   r   r   r   r'   typeselfs    r$   __post_init__zInputSpec.__post_init__`   s    9	(((?..> /.. H  !
 
 	# 	# #$tx..""	# 	# 
 	# 	#r#   c                     | j         dn
d| j          d}| j        dn	d| j         }t          | j        j                   dt          | j        j                   | | S )N 	 target=''z persistent=: )r=   r>   r    r<   r   r;   )rC   r=   r>   s      r$   __str__zInputSpec.__str__r   sq    {*0JDK0J0J0J?2RR8Xt8X8X
dhm$$QQDIN(;(;QVQZQQQr#   )r   r   r   r   r!   ArgumentSpecr   r    r>   r2   rD   rJ   r"   r#   r$   r   r   Y   sr         
OOO	SM!%J%%%# # #$R R R R Rr#   r   c                       e Zd Z e            Z e            Z e            Z e            Z e            Z e            Z	 e            Z
 e            ZdS )r   N)r   r   r   r   USER_OUTPUTLOSS_OUTPUTBUFFER_MUTATIONPARAMETER_MUTATIONGRADIENT_TO_PARAMETERGRADIENT_TO_USER_INPUTUSER_INPUT_MUTATIONr9   r"   r#   r$   r   r   x   sj        $&&K$&&KdffO DFF!TVV$&&DFFEEEr#   r   c                   F    e Zd ZU eed<   eed<   ee         ed<   d Zd Z	dS )r   r;   r<   r=   c           
          t          | j        t          t          t          t
          t          t          t          f          sJ | j                    d S N)	r@   r<   r   r   r   r   r   r'   r   rB   s    r$   rD   zOutputSpec.__post_init__   sX    H  !
 
 	 	 8	 	 
 	 	r#   c                     | j         dn
d| j          d}t          | j        j                   dt          | j        j                   | S )NrF   rG   rH   rI   )r=   r    r<   r   r;   )rC   r=   s     r$   rJ   zOutputSpec.__str__   sQ    {*0JDK0J0J0Jdhm$$EEDIN(;(;EVEEEr#   N)
r   r   r   r   r!   rK   r   r    rD   rJ   r"   r#   r$   r   r      sa         
	SM  F F F F Fr#   r   c                   N    e Zd ZU eeef         ed<   eeef         ed<   eed<   dS )r   gradients_to_parametersgradients_to_user_inputsloss_outputN)r   r   r   dictr    r!   r"   r#   r$   r   r      sF         !#s(^+++"38n,,,r#   r   c            	          e Zd ZU dZee         ed<   ee         ed<   ede	e
         fd            Zede	e
         fd            Zede	e
         fd            Zede	e
         fd            Zede	e
         fd	            Zede	eeeed
e
f                  fd            Zede	eeeed
e
f                  fd            Zedee
e
f         fd            Zedee
e
f         fd            Zedee
e
f         fd            Zedee
e
f         fd            Zedee
e
f         fd            Zedee
e
f         fd            Zedee
e
f         fd            Zedee         fd            Z edeeee
f                  fd            Z!ede	e
         fd            Z"ede	e
         fd            Z#ddZ$de
de
fdZ%d dZ&d Z'd
S )!r   a.  
    :class:`ExportGraphSignature` models the input/output signature of Export Graph,
    which is a fx.Graph with stronger invariants guarantees.

    Export Graph is functional and does not access "states" like parameters
    or buffers within the graph via ``getattr`` nodes. Instead, :func:`export`
    guarantees 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


        mod = CustomModule()
        ep = torch.export.export(mod, (torch.tensor(1.0), torch.tensor(2.0)))

    Resulting Graph is non-functional::

        graph():
            %p_my_parameter : [num_users=1] = placeholder[target=p_my_parameter]
            %b_my_buffer1 : [num_users=1] = placeholder[target=b_my_buffer1]
            %b_my_buffer2 : [num_users=2] = placeholder[target=b_my_buffer2]
            %x1 : [num_users=1] = placeholder[target=x1]
            %x2 : [num_users=1] = placeholder[target=x2]
            %add : [num_users=1] = call_function[target=torch.ops.aten.add.Tensor](args = (%x1, %p_my_parameter), kwargs = {})
            %mul : [num_users=1] = call_function[target=torch.ops.aten.mul.Tensor](args = (%add, %b_my_buffer1), kwargs = {})
            %mul_1 : [num_users=1] = call_function[target=torch.ops.aten.mul.Tensor](args = (%x2, %b_my_buffer2), kwargs = {})
            %add_1 : [num_users=1] = call_function[target=torch.ops.aten.add.Tensor](args = (%mul, %mul_1), kwargs = {})
            %add_ : [num_users=0] = call_function[target=torch.ops.aten.add_.Tensor](args = (%b_my_buffer2, 1.0), kwargs = {})
            return (add_1,)

    Resulting ExportGraphSignature of the non-functional Graph would be::

        # inputs
        p_my_parameter: PARAMETER target='my_parameter'
        b_my_buffer1: BUFFER target='my_buffer1' persistent=True
        b_my_buffer2: BUFFER target='my_buffer2' persistent=True
        x1: USER_INPUT
        x2: USER_INPUT

        # outputs
        add_1: USER_OUTPUT

    To get a functional Graph, you can use :func:`run_decompositions`::

        mod = CustomModule()
        ep = torch.export.export(mod, (torch.tensor(1.0), torch.tensor(2.0)))
        ep = ep.run_decompositions()

    Resulting Graph is functional::

        graph():
            %p_my_parameter : [num_users=1] = placeholder[target=p_my_parameter]
            %b_my_buffer1 : [num_users=1] = placeholder[target=b_my_buffer1]
            %b_my_buffer2 : [num_users=2] = placeholder[target=b_my_buffer2]
            %x1 : [num_users=1] = placeholder[target=x1]
            %x2 : [num_users=1] = placeholder[target=x2]
            %add : [num_users=1] = call_function[target=torch.ops.aten.add.Tensor](args = (%x1, %p_my_parameter), kwargs = {})
            %mul : [num_users=1] = call_function[target=torch.ops.aten.mul.Tensor](args = (%add, %b_my_buffer1), kwargs = {})
            %mul_1 : [num_users=1] = call_function[target=torch.ops.aten.mul.Tensor](args = (%x2, %b_my_buffer2), kwargs = {})
            %add_1 : [num_users=1] = call_function[target=torch.ops.aten.add.Tensor](args = (%mul, %mul_1), kwargs = {})
            %add_2 : [num_users=1] = call_function[target=torch.ops.aten.add.Tensor](args = (%b_my_buffer2, 1.0), kwargs = {})
            return (add_2, add_1)

    Resulting ExportGraphSignature of the functional Graph would be::

        # inputs
        p_my_parameter: PARAMETER target='my_parameter'
        b_my_buffer1: BUFFER target='my_buffer1' persistent=True
        b_my_buffer2: BUFFER target='my_buffer2' persistent=True
        x1: USER_INPUT
        x2: USER_INPUT

        # outputs
        add_2: BUFFER_MUTATION target='my_buffer2'
        add_1: USER_OUTPUT

    input_specsoutput_specsreturnc                 >    t          d | j        D                       S )Nc              3      K   | ]:}|j         t          j        k    t          |j        t
                    1|j        V  ;d S rV   )r;   r   r5   r@   r=   r    .0ss     r$   	<genexpr>z2ExportGraphSignature.parameters.<locals>.<genexpr>  sT       
 
v,,,!(C(( - H,,,,
 
r#   tupler^   rB   s    r$   
parameterszExportGraphSignature.parameters  3     
 
%
 
 
 
 
 	
r#   c                 >    t          d | j        D                       S )Nc              3      K   | ]:}|j         t          j        k    t          |j        t
                    1|j        V  ;d S rV   )r;   r   r6   r@   r=   r    rc   s     r$   rf   z/ExportGraphSignature.buffers.<locals>.<genexpr>   sT       
 
v)))!(C(( * H))))
 
r#   rg   rB   s    r$   bufferszExportGraphSignature.buffers  rj   r#   c                 >    t          d | j        D                       S )Nc              3      K   | ]C}|j         t          j        k    r,|j        d u  t	          |j        t                    :|j        V  DdS )FN)r;   r   r6   r>   r@   r=   r    rc   s     r$   rf   z>ExportGraphSignature.non_persistent_buffers.<locals>.<genexpr>)  sc       
 
v)))|u$$!(C(( % H %$$$	
 
r#   rg   rB   s    r$   non_persistent_buffersz+ExportGraphSignature.non_persistent_buffers'  s3     
 
%
 
 
 
 
 	
r#   c                 >    t          d | j        D                       S )Nc              3      K   | ]:}|j         t          j        k    t          |j        t
                    1|j        V  ;d S rV   )r;   r   r7   r@   r=   r    rc   s     r$   rf   z?ExportGraphSignature.lifted_tensor_constants.<locals>.<genexpr>4  sT       
 
v222!(C(( 3 H2222
 
r#   rg   rB   s    r$   lifted_tensor_constantsz,ExportGraphSignature.lifted_tensor_constants2  rj   r#   c                 >    t          d | j        D                       S )Nc              3      K   | ]:}|j         t          j        k    t          |j        t
                    1|j        V  ;d S rV   )r;   r   r8   r@   r=   r    rc   s     r$   rf   z:ExportGraphSignature.lifted_custom_objs.<locals>.<genexpr>=  sT       
 
v---!(C(( . H----
 
r#   rg   rB   s    r$   lifted_custom_objsz'ExportGraphSignature.lifted_custom_objs;  rj   r#   Nc           	         g }| j         D ]}|j        t          j        k    rt	          |j        t          t          t          t          t          f          r |                    |j        j                   kt	          |j        t                    r |                    |j        j                   t          |j         d          t!          |          S )Nz is not a valid user inputs)r^   r;   r   r4   r@   r<   r   r   r   r   r   appendr   r   r/   RuntimeErrorrh   )rC   user_inputsre   s      r$   rz   z ExportGraphSignature.user_inputsE  s    @B! 	J 	JAv---""$#%	 	 J ""15:....AE#344 J""15;////"ae#H#H#HIII[!!!r#   c                 &   g }| j         D ]}|j        t          j        t          j        fvr"t          |j        t          t          t          t          f          r |                    |j        j                   ot          |j        t                    r |                    |j        j                   t          |j        t                    r |                    |j        j                   t!          |j         d          t#          |          S )Nz is not a valid user output)r_   r;   r   rM   rN   r@   r<   r   r   r   r   rx   r   r   r/   r   ry   rh   )rC   user_outputsre   s      r$   r|   z!ExportGraphSignature.user_outputs_  s   AC" 	J 	JAv&&   1A?S  
J ##AEJ////AE#344 J##AEK0000AE#455 J##AEJ////"ae#H#H#HIII\"""r#   c                 >    t          d | j        D                       S )Nc              3      K   | ]`}|j         t          j        k    t          |j        t
                    1t          |j        t                    K|j        j        |j        fV  ad S rV   )	r;   r   r5   r@   r<   r   r=   r    r   rc   s     r$   rf   z<ExportGraphSignature.inputs_to_parameters.<locals>.<genexpr>z  sq       
 
v,,,15.11 -18S)) - UZ",,,,
 
r#   _immutable_dictr^   rB   s    r$   inputs_to_parametersz)ExportGraphSignature.inputs_to_parametersx  3     
 
%
 
 
 
 
 	
r#   c                 >    t          d | j        D                       S )Nc              3      K   | ]`}|j         t          j        k    t          |j        t
                    1t          |j        t                    K|j        j        |j        fV  ad S rV   )	r;   r   r6   r@   r<   r   r=   r    r   rc   s     r$   rf   z9ExportGraphSignature.inputs_to_buffers.<locals>.<genexpr>  sq       
 
v)))15.11 *18S)) * UZ"))))
 
r#   r   rB   s    r$   inputs_to_buffersz&ExportGraphSignature.inputs_to_buffers  r   r#   c                 >    t          d | j        D                       S )Nc              3      K   | ]`}|j         t          j        k    t          |j        t
                    1t          |j        t                    K|j        j        |j        fV  ad S rV   )	r;   r   rO   r@   r<   r   r=   r    r   rc   s     r$   rf   z9ExportGraphSignature.buffers_to_mutate.<locals>.<genexpr>  sq       
 
v33315.11 418S)) 4 UZ"3333
 
r#   r   r_   rB   s    r$   buffers_to_mutatez&ExportGraphSignature.buffers_to_mutate  3     
 
&
 
 
 
 
 	
r#   c                 >    t          d | j        D                       S )Nc              3      K   | ]`}|j         t          j        k    t          |j        t
                    1t          |j        t                    K|j        j        |j        fV  ad S rV   )	r;   r   rP   r@   r<   r   r=   r    r   rc   s     r$   rf   z<ExportGraphSignature.parameters_to_mutate.<locals>.<genexpr>  sq       
 
v66615.11 718S)) 7 UZ"6666
 
r#   r   rB   s    r$   parameters_to_mutatez)ExportGraphSignature.parameters_to_mutate  r   r#   c                 >    t          d | j        D                       S )Nc              3      K   | ]`}|j         t          j        k    t          |j        t
                    1t          |j        t                    K|j        j        |j        fV  ad S rV   )	r;   r   rS   r@   r<   r   r=   r    r   rc   s     r$   rf   z=ExportGraphSignature.user_inputs_to_mutate.<locals>.<genexpr>  sq       
 
v77715.11 818S)) 8 UZ"7777
 
r#   r   rB   s    r$   user_inputs_to_mutatez*ExportGraphSignature.user_inputs_to_mutate  r   r#   c                 >    t          d | j        D                       S )Nc              3      K   | ]`}|j         t          j        k    t          |j        t
                    1t          |j        t                    K|j        j        |j        fV  ad S rV   )	r;   r   r7   r@   r<   r   r=   r    r   rc   s     r$   rf   zIExportGraphSignature.inputs_to_lifted_tensor_constants.<locals>.<genexpr>  sq       
 
v22215.11 318S)) 3 UZ"2222
 
r#   r   rB   s    r$   !inputs_to_lifted_tensor_constantsz6ExportGraphSignature.inputs_to_lifted_tensor_constants  r   r#   c                 >    t          d | j        D                       S )Nc              3      K   | ]`}|j         t          j        k    t          |j        t
                    1t          |j        t                    K|j        j        |j        fV  ad S rV   )	r;   r   r8   r@   r<   r   r=   r    r   rc   s     r$   rf   zDExportGraphSignature.inputs_to_lifted_custom_objs.<locals>.<genexpr>  sr       
 
v---15"344 .18S)) . UZ"----
 
r#   r   rB   s    r$   inputs_to_lifted_custom_objsz1ExportGraphSignature.inputs_to_lifted_custom_objs  r   r#   c                 \   d }i }i }| j         D ]}|j        t          j        k    r-|J t	          |j        t                    sJ |j        j        }E|j        t          j        k    rMt	          |j	        t                    sJ t	          |j        t                    sJ |j	        ||j        j        <   |j        t          j        k    rLt	          |j	        t                    sJ t	          |j        t                    sJ |j	        ||j        j        <   
|d S t          |||          S )N)r[   rY   rZ   )r_   r;   r   rN   r@   r<   r   r   rQ   r=   r    rR   r   )rC   r[   rY   rZ   specs        r$   backward_signaturez'ExportGraphSignature.backward_signature  s7   2435 % 	F 	FDyJ222"***!$(N;;;;;"hmj>>>!$+s33333!$(N;;;;;9='66j???!$+s33333!$(N;;;;;:>+(74&#$;%=
 
 
 	
r#   c                     d S rV   r"   rB   s    r$   assertion_dep_tokenz(ExportGraphSignature.assertion_dep_token  s    tr#   c                     g }| j         D ]R}|j        t          j        k    r;t	          |j        t                    sJ |                    |j        j                   St          |          S rV   )
r^   r;   r   r9   r@   r<   r'   rx   r   rh   )rC   input_tokensre   s      r$   r   z!ExportGraphSignature.input_tokens  sg    ! 	0 	0Av((!!%77777##AEJ///\"""r#   c                     g }| j         D ]R}|j        t          j        k    r;t	          |j        t                    sJ |                    |j        j                   St          |          S rV   )
r_   r;   r   r9   r@   r<   r'   rx   r   rh   )rC   output_tokensre   s      r$   r   z"ExportGraphSignature.output_tokens  sh    " 	1 	1Av)))!!%77777$$QUZ000]###r#   c                     | j         }|d S t          |          dk    sJ t          t          |                                                    }t          | j                  t          | j                  z   |k    sJ d S )N   )r   lennextiterkeysr|   r   )rC   r   assertion_dep_token_indexs      r$   rD   z"ExportGraphSignature.__post_init__  s    "6&F&''1,,,,$(.A.F.F.H.H)I)I$J$J!!""S)?%@%@@() ) ) ) ) )r#   oldnewc                    t          |t                    sJ t          |t                    sJ t          t          t          t
          t          t          f}| j        D ]3}t          |j	        |          r|j	        j
        |k    r||j	        _
        4| j        D ]3}t          |j	        |          r|j	        j
        |k    r||j	        _
        4dS )zR
        Replace all uses of the old name with new name in the signature.
        N)r@   r    r   r   r   r   r   r'   r_   r<   r   r^   )rC   r   r   	arg_typesois         r$   replace_all_usesz%ExportGraphSignature.replace_all_uses  s     #s######s#####
	 " 	% 	%A!%++ %5:$$!$AEJ! 	% 	%A!%++ %5:$$!$AEJ	% 	%r#   Fc                       fd}|S )Nc                     |j         dk    r                    | j        |           r(| j         dk    r                    | j        |           d S d S d S )Noutputplaceholder)opr   r   )r   r   userreplace_inputsrC   s      r$   _z0ExportGraphSignature.get_replace_hook.<locals>._  sj    w(""%%ch444 5#&M"9"9%%ch444445 5"9"9r#   r"   )rC   r   r   s   `` r$   get_replace_hookz%ExportGraphSignature.get_replace_hook  s)    	5 	5 	5 	5 	5 	5 r#   c                     d                     d | j        D                       }d                     d | j        D                       }d| d| dS )N
c              3   4   K   | ]}t          |          V  d S rV   r    rc   s     r$   rf   z/ExportGraphSignature.__str__.<locals>.<genexpr>$  s(      AA1AAAAAAAr#   c              3   4   K   | ]}t          |          V  d S rV   r   rc   s     r$   rf   z/ExportGraphSignature.__str__.<locals>.<genexpr>%  s(       C CAQ C C C C C Cr#   z

# inputs
z

# outputs
)joinr^   r_   )rC   r^   r_   s      r$   rJ   zExportGraphSignature.__str__#  sa    iiAA0@AAAAAyy C C1B C C CCCJkJJ,JJJJr#   )r`   N)F)(r   r   r   __doc__listr   r!   r   propertyr   r    ri   rm   rp   rs   rv   r	   r0   r1   r2   rz   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rD   r   r   rJ   r"   r#   r$   r   r      s        i iV i   z"""" 
JsO 
 
 
 X
 
C 
 
 
 X
 

3 
 
 
 X
 
C 
 
 
 X
 
JsO 
 
 
 X
 "Zc5$c.I(JK " " " X"2 #jsE4s/J)KL # # # X#0 
gc3h&7 
 
 
 X
 
738#4 
 
 
 X
 
738#4 
 
 
 X
 
gc3h&7 
 
 
 X
 
wsCx'8 
 
 
 X
 
7383D 
 
 
 X
 
gc3h.? 
 
 
 X
 
H-D$E 
 
 
 X
< Xgc3h.?%@    X #jo # # # X# $z# $ $ $ X$	
 	
 	
 	
%C %c % % % %.   K K K K Kr#   r   c                 >    ddl m}  |t          |                     S )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   r\   )itemsr   s     r$   r   r   )  s-    
 '&&&&&DKK(((r#   r`   c           
          ddl m}m}m}m} ddlm} t          | t          t          t          t          d           t          f          rt          d|           S d| j        v sJ |  d            | j        d         }| j        |v rt!          | j                  S t#          |          rt%          | j                  S t          ||          rt'          | j                  S t          ||          rt)          | j                  S t          ||          rt+          | j                  S t          ||          r:t-          | j        |                                                                	          S t          ||          rt-          | j        |j        |
          S t          |t          t          t          t          t          d           f          rt          | j        |          S t5          dt          |           d          )Nr   )ScriptObjectSymBoolSymFloatSymIntr
   rF   )r   r/   valz8 is not a constant or a node with a 'val' metadata field)r   )r   r,   )r   r,   r-   z*Encountered an unsupported object of type z0 while writing the metadata for exported program)torchr   r   r   r   "torch._library.fake_class_registryr   r@   r0   r2   r1   rA   r    r   metar   r'   r   r   r   r   r   r   _typequalified_namescript_class_nameAssertionError)nodetoken_namesr   r   r   r   r   r   s           r$   _make_argument_specr   3  s,   ============CCCCCC$dE4::s;<< 5Rt4444DIIII  )E
CyK$),,,,	 
49----	C	 	  
49----	C	"	" 
TY////	C	!	! 
DI....	C	&	& 
 di399;;;U;U;W;WXXXX	C)	*	* 

 c&;c
 
 
 	
 
C#tS%d<	=	= 
TYc::::?c ? ? ?
 
 	
r#   graph_signaturer   gmztorch.fx.GraphModulerp   c           
        	
 ddl m} | j        d u}t          | j                  | j        | j        t          | j                  | j        	| j	        | j
        |r| j        j        ni 
|r| j        j        ni |r| j        j        nd | j        | j        fd|j        j        D             }fd|                    t'          t)          t+          |j        j                                      j                  D             }dt.          dt0          ffddt2          d	t.          dt4          f	
fd
fd|D             }fdt7          |          D             }t9          ||          S )Nr   )_pytreec                 F    g | ]}|j         d k    t          |          S )r   )r   r   )rd   r   r   s     r$   
<listcomp>z6_convert_to_export_graph_signature.<locals>.<listcomp>{  s:       7m## 	D,//###r#   c                 0    g | ]}t          |          S r"   )r   )rd   r   r   s     r$   r   z6_convert_to_export_graph_signature.<locals>.<listcomp>  s3        	D-00  r#   inpr`   c                    t          | t                    rt          t          j        | d           S t          | t
                    st          t          j        | d           S | j        }|v rt          t          j        | d           S |v r"t          t          j        | |                   S |v r+t          t          j	        | |         |         v          S t          d|           )Nr;   r<   r=   )r;   r<   r=   r>   zUnknown tensor input kind: )r@   r'   r   r   r9   r   r4   r   r5   r6   r   )r   r   r   r   rp   rz   s     r$   to_input_specz9_convert_to_export_graph_signature.<locals>.to_input_spec  s   c=)) 	I)/s4HHHH#~.. 	N)"6CMMMMx;)"6CMMMM)))(+D1   
 &&&%(.-d3;QQ	    !!Et!E!EFFFr#   idxr   c                    t          |t                    rt          t          j        |d           S t          |t
                    st          t          j        |d           S |j        }| t                    t                    z   t          	          z   t                    z   k     r|v r"t          t          j	        ||                   S |v r"t          t          j
        ||                   S |	v r"t          t          j        |	|                   S t          d|           |
v rt          t          j        |d           S |v r"t          t          j        ||                   S |v r"t          t          j        ||                   S |k    rt          t          j        |d           S t          d|           )Nr   zUnknown tensor mutation kind: zUnknown tensor output kind: )r@   r'   r   r   r9   r   rM   r   r   rO   rP   rS   r   rQ   rR   rN   )r   r   r   buffer_mutationsgrad_paramsgrad_user_inputsr[   r   parameter_mutationsuser_input_mutationsr|   s      r$   to_output_specz:_convert_to_export_graph_signature.<locals>.to_output_spec  s1   a'' 	I:#34HHHH!^,, 	O:#9qNNNNv%&&-@)A)AAC E
 E
 
   '''!#3+D1   
 ,,,!#6.t4   
 ---!#7/5    %%Ld%L%LMMM|##!z'=1TRRRR$$!#9&t,   
 )))!#:+D1   
 $$!z'=1TRRRR %%JD%J%JKKKr#   c                 &    g | ]} |          S r"   r"   )rd   r   r   s     r$   r   z6_convert_to_export_graph_signature.<locals>.<listcomp>  s#    888#==%%888r#   c                 .    g | ]\  }} ||          S r"   r"   )rd   r   r   r   s      r$   r   z6_convert_to_export_graph_signature.<locals>.<listcomp>  s)    LLLvsANN3**LLLr#   )r^   r_   )torch.utilsr   r   setrz   r   r   r|   r   r   r   gradients_to_parameterrZ   r[   r   r   graphnodestree_leavesr   r   reversedargsrK   r   r0   r   	enumerater   )r   r   rp   pytreeis_jointinputsoutputsr^   r_   r   r   r   r   r   r   r[   r   r   r   r   r   rz   r|   s     `      @@@@@@@@@@@@@@r$   "_convert_to_export_graph_signaturer   X  sg   
 .-----1=H o122K*?'9344L&8)>*@ 	*AA  	*CC  	*66 
 #/L#1M   HN  F
   &&tD"(.1I1I,J,J'K'K'PQQ  G
G< GI G G G G G G G G G22LC 2LL 2LZ 2L 2L 2L 2L 2L 2L 2L 2L 2L 2L 2L 2L 2Lh 9888888KLLLL79K9KLLLLKlSSSSr#   )'dataclassescollections.abcr   r   enumr   r   typingr   r   r	   r   r   torch._subclasses.fake_tensorr   r   &torch._functorch._aot_autograd.schemasr   __all__	dataclassr   r'   r   r   r   r   r   rK   r   r   r   r   r   r   r   r   r   r    r   r"   r#   r$   <module>r      sB       / / / / / / / /         1 1 1 1 1 1 1 1 1 1 ? ? ? ? ? ? 1 1 1 1 1 1  FLLLEEEEEE                                            0 0 0 0 0 0 0 0 . . . . . . . .
         R R R R R R R R<        F F F F F F F F0         BK BK BK BK BK BK BK BKJ) ) )"
l "
 "
 "
 "
J|T%|T|T  H|T 	|T |T |T |T |T |Tr#   