§
    Ÿ²Åj[  ã                   ó:  — d dl Z d dlmZmZ d dlmZmZmZmZm	Z	m
Z
mZ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)Ú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                   ó   — e Zd ZU eed<   dS )r   ÚnameN©Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__© ó    úMC:\Projects\Historical\venv\Lib\site-packages\torch/export/graph_signature.pyr   r      ó   € € € € € € à
€I€I�I€I€Ir%   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   1   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   6   s:   € € € € € € à
€I€I�IØ€N€N�NØ+/€HˆhÐ'Ô(Ð/Ð/Ñ/Ð/Ð/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   € € € € € € à
€I€I�IØ��e˜T 3¨Ð,Ô-Ð-Ð-Ñ-Ð-Ð-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   N   sP   € € € € € Ø�‘”€JØ�‘”€IØˆT‰VŒV€FØ�d‘f”f€OØ�‘”€JØˆD‰FŒF€E€E€Er%   r   c                   óZ   — e Zd ZU eed<   eed<   ee         ed<   dZee	         ed<   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   r8   r@   Ú
isinstancer>   r   r   r   r   r   r   r)   Útype©Úselfs    r&   Ú__post_init__zInputSpec.__post_init__^   s�   € ØŒ9�	Ô(Ò(Ð(à”Ð+Ð+Ø=ñ ,Ô+Ð+åØŒHåÝÝ ÝÝ Ý!Ýðñ
ô 
ð 	#ð 	#ð #•$�t”x‘.”.Ð"Ð"ñ	#ô 	#ð 
ð 	#ð 	#r%   )r   r    r!   r   r#   ÚArgumentSpecr	   r"   r@   r4   rF   r$   r%   r&   r   r   W   s^   € € € € € € à
€O€O�OØ	ÐÐÑØ�SŒMÐÐÑØ!%€J�˜”Ð%Ð%Ñ%ð#ð #ð #ð #ð #r%   r   c                   óš   — e Zd 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ÚGRADIENT_TO_PARAMETERÚGRADIENT_TO_USER_INPUTÚUSER_INPUT_MUTATIONr;   r$   r%   r&   r   r   q   s^   € € € € € Ø�$‘&”&€KØ�$‘&”&€KØ�d‘f”f€OØ ˜D™FœFÐØ!˜T™VœVÐØ˜$™&œ&ÐØˆD‰FŒF€E€E€Er%   r   c                   ó@   — e Zd ZU eed<   eed<   ee         ed<   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)	rB   r>   r   r   r   r   r   r)   r   rD   s    r&   rF   zOutputSpec.__post_init__�   sX   € ÝØŒHåÝÝ ÝÝ ÝÝ!ðñ
ô 
ð 	ð 	ð Œ8ñ	ô 	ð 
ð 	ð 	r%   N)	r   r    r!   r   r#   rG   r	   r"   rF   r$   r%   r&   r   r   {   sM   € € € € € € à
ÐÐÑØ	ÐÐÑØ�SŒMÐÐÑðð ð ð ð 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!   r   r"   r#   r$   r%   r&   r   r   �   sF   € € € € € € à! # s (œ^Ð+Ð+Ñ+Ø" 3¨ 8œnÐ,Ð,Ñ,ØÐÐÑÐÐ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         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
S )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                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó‚   K  — | ]:}|j         t          j        k    ¯t          |j        t
          ¦  «        ¯1|j        V — Œ;d S rQ   )r=   r   r7   rB   r?   r"   ©Ú.0Úss     r&   ú	<genexpr>z2ExportGraphSignature.parameters.<locals>.<genexpr>å   sT   è è € ð 
ð 
àØŒv�Ô,Ò,Ð,Ý˜!œ(¥CÑ(Ô(ð -ð ŒHà,Ð,Ð,Ð,ð
ð 
r%   ©ÚtuplerW   rD   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 rQ   )r=   r   r8   rB   r?   r"   r\   s     r&   r_   z/ExportGraphSignature.buffers.<locals>.<genexpr>ï   sT   è è € ð 
ð 
àØŒv�Ô)Ò)Ð)Ý˜!œ(¥CÑ(Ô(ð *ð ŒHà)Ð)Ð)Ð)ð
ð 
r%   r`   rD   s    r&   ÚbufferszExportGraphSignature.buffersí   rc   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   r8   r@   rB   r?   r"   r\   s     r&   r_   z>ExportGraphSignature.non_persistent_buffers.<locals>.<genexpr>ø   sc   è è € ð 
ð 
àØŒv�Ô)Ò)Ð)ØŒ|˜uÐ$Ð$Ý˜!œ(¥CÑ(Ô(ð %ð ŒHð %Ð$Ð$Ð$ð	
ð 
r%   r`   rD   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 rQ   )r=   r   r9   rB   r?   r"   r\   s     r&   r_   z?ExportGraphSignature.lifted_tensor_constants.<locals>.<genexpr>  sT   è è € ð 
ð 
àØŒv�Ô2Ò2Ð2Ý˜!œ(¥CÑ(Ô(ð 3ð ŒHà2Ð2Ð2Ð2ð
ð 
r%   r`   rD   s    r&   Úlifted_tensor_constantsz,ExportGraphSignature.lifted_tensor_constants  rc   r%   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó‚   K  — | ]:}|j         t          j        k    ¯t          |j        t
          ¦  «        ¯1|j        V — Œ;d S rQ   )r=   r   r:   rB   r?   r"   r\   s     r&   r_   z:ExportGraphSignature.lifted_custom_objs.<locals>.<genexpr>  sT   è è € ð 
ð 
àØŒv�Ô-Ò-Ð-Ý˜!œ(¥CÑ(Ô(ð .ð ŒHà-Ð-Ð-Ð-ð
ð 
r%   r`   rD   s    r&   Úlifted_custom_objsz'ExportGraphSignature.lifted_custom_objs
  rc   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)rW   r=   r   r6   rB   r>   r   r   r   r   r   Úappendr   r   r1   ÚRuntimeErrorra   )rE   Úuser_inputsr^   s      r&   rs   z ExportGraphSignature.user_inputs  sÏ   € à@BˆØÔ!ð 	Jð 	JˆAØŒv�Ô-Ò-Ð-ØåØ”å"Ý"Ý$Ý#Ý%ðñ	ô 	ð Jð ×"Ò" 1¤5¤:Ñ.Ô.Ð.Ð.Ý˜AœEÕ#3Ñ4Ô4ð JØ×"Ò" 1¤5¤;Ñ/Ô/Ð/Ð/å" a¤eÐ#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)rX   r=   r   rI   rJ   rB   r>   r   r   r   r   rq   r   r   r1   r   rr   ra   )rE   Úuser_outputsr^   s      r&   ru   z!ExportGraphSignature.user_outputs.  s  € àACˆØÔ"ð 	Jð 	JˆAØŒvÝÔ&ÝÔ&ðð ð ð åØ”Ý¥Õ1AÅ?ÐSñô ð 
Jð ×#Ò# A¤E¤JÑ/Ô/Ð/Ð/Ý˜AœEÕ#3Ñ4Ô4ð JØ×#Ò# A¤E¤KÑ0Ô0Ð0Ð0Ý˜AœEÕ#4Ñ5Ô5ð JØ×#Ò# A¤E¤JÑ/Ô/Ð/Ð/å" a¤eÐ#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 rQ   )	r=   r   r7   rB   r>   r   r?   r"   r   r\   s     r&   r_   z<ExportGraphSignature.inputs_to_parameters.<locals>.<genexpr>I  sq   è è € ð 
ð 
àØŒv�Ô,Ò,Ð,Ý˜1œ5¥.Ñ1Ô1ð -å˜1œ8¥SÑ)Ô)ð -ð ŒUŒZ˜œÐ"à,Ð,Ð,Ð,ð
ð 
r%   ©Ú_immutable_dictrW   rD   s    r&   Úinputs_to_parametersz)ExportGraphSignature.inputs_to_parametersG  ó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 rQ   )	r=   r   r8   rB   r>   r   r?   r"   r   r\   s     r&   r_   z9ExportGraphSignature.inputs_to_buffers.<locals>.<genexpr>U  sq   è è € ð 
ð 
àØŒv�Ô)Ò)Ð)Ý˜1œ5¥.Ñ1Ô1ð *å˜1œ8¥SÑ)Ô)ð *ð ŒUŒZ˜œÐ"à)Ð)Ð)Ð)ð
ð 
r%   rx   rD   s    r&   Úinputs_to_buffersz&ExportGraphSignature.inputs_to_buffersS  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 rQ   )	r=   r   rK   rB   r>   r   r?   r"   r   r\   s     r&   r_   z9ExportGraphSignature.buffers_to_mutate.<locals>.<genexpr>a  sq   è è € ð 
ð 
àØŒv�Ô3Ò3Ð3Ý˜1œ5¥.Ñ1Ô1ð 4å˜1œ8¥SÑ)Ô)ð 4ð ŒUŒZ˜œÐ"à3Ð3Ð3Ð3ð
ð 
r%   ©ry   rX   rD   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 rQ   )	r=   r   rN   rB   r>   r   r?   r"   r   r\   s     r&   r_   z=ExportGraphSignature.user_inputs_to_mutate.<locals>.<genexpr>k  sq   è è € ð 
ð 
àØŒv�Ô7Ò7Ð7Ý˜1œ5¥.Ñ1Ô1ð 8å˜1œ8¥SÑ)Ô)ð 8ð ŒUŒZ˜œÐ"à7Ð7Ð7Ð7ð
ð 
r%   r�   rD   s    r&   Úuser_inputs_to_mutatez*ExportGraphSignature.user_inputs_to_mutatei  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 rQ   )	r=   r   r9   rB   r>   r   r?   r"   r   r\   s     r&   r_   zIExportGraphSignature.inputs_to_lifted_tensor_constants.<locals>.<genexpr>v  sq   è è € ð 
ð 
àØŒv�Ô2Ò2Ð2Ý˜1œ5¥.Ñ1Ô1ð 3å˜1œ8¥SÑ)Ô)ð 3ð ŒUŒZ˜œÐ"à2Ð2Ð2Ð2ð
ð 
r%   rx   rD   s    r&   Ú!inputs_to_lifted_tensor_constantsz6ExportGraphSignature.inputs_to_lifted_tensor_constantst  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 rQ   )	r=   r   r:   rB   r>   r   r?   r"   r   r\   s     r&   r_   zDExportGraphSignature.inputs_to_lifted_custom_objs.<locals>.<genexpr>€  sr   è è € ð 
ð 
àØŒv�Ô-Ò-Ð-Ý˜1œ5Õ"3Ñ4Ô4ð .å˜1œ8¥SÑ)Ô)ð .ð ŒUŒZ˜œÐ"à-Ð-Ð-Ð-ð
ð 
r%   rx   rD   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)rU   rS   rT   )rX   r=   r   rJ   rB   r>   r   r   rL   r?   r"   rM   r   )rE   rU   rS   rT   Úspecs        r&   Úbackward_signaturez'ExportGraphSignature.backward_signatureˆ  s7  € àˆØ24ÐØ35Ð ØÔ%ð 	Fñ 	FˆDØŒy�JÔ2Ò2Ð2Ø"Ð*Ð*Ð*Ý! $¤(­NÑ;Ô;Ð;Ð;Ð;Ø"œhœm��Ø”�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 rQ   r$   rD   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 rQ   )
rW   r=   r   r;   rB   r>   r)   rq   r   ra   )rE   Úinput_tokensr^   s      r&   r“   z!ExportGraphSignature.input_tokens«  sg   € àˆØÔ!ð 	0ð 	0ˆAØŒv�œÒ(Ð(Ý! !¤%­Ñ7Ô7Ð7Ð7Ð7Ø×#Ò# A¤E¤JÑ/Ô/Ð/øÝ�\Ñ"Ô"Ð"r%   c                 óØ   — g }| j         D ]R}|j        t          j        k    r;t	          |j        t          ¦  «        sJ ‚|                     |j        j        ¦  «         ŒSt          |¦  «        S rQ   )
rX   r=   r   r;   rB   r>   r)   rq   r   ra   )rE   Úoutput_tokensr^   s      r&   r•   z"ExportGraphSignature.output_tokens´  sh   € àˆØÔ"ð 	1ð 	1ˆAØŒv�Ô)Ò)Ð)Ý! !¤%­Ñ7Ô7Ð7Ð7Ð7Ø×$Ò$ Q¤U¤ZÑ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Úkeysru   r‚   )rE   r‘   Úassertion_dep_token_indexs      r&   rF   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)rB   r"   r   r   r   r   r   r)   rX   r>   r   rW   )rE   r�   rž   Ú	arg_typesÚoÚis         r&   Úreplace_all_usesz%ExportGraphSignature.replace_all_usesÈ  sÓ   € õ ˜#�sÑ#Ô#Ð#Ð#Ð#Ý˜#�sÑ#Ô#Ð#Ð#Ð#åÝÝÝÝÝð
ˆ	ð Ô"ð 	%ð 	%ˆAÝ˜!œ% Ñ+Ô+ð %Ø”5”: Ò$Ð$Ø!$�A”E”JøØÔ!ð 	%ð 	%ˆAÝ˜!œ% Ñ+Ô+ð %Ø”5”: Ò$Ð$Ø!$�A”E”Jøð	%ð 	%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_inputsrE   s      €€r&   Ú_z0ExportGraphSignature.get_replace_hook.<locals>._à  sj   ø€ ØŒw˜(Ò"Ð"Ø×%Ò% c¤h°Ñ4Ô4Ð4Øð 5 #¤&¨MÒ"9Ð"9Ø×%Ò% c¤h°Ñ4Ô4Ð4Ð4Ð4ð5ð 5Ð"9Ð"9r%   r$   )rE   rª   r«   s   `` r&   Úget_replace_hookz%ExportGraphSignature.get_replace_hookß  s)   øø€ ð	5ð 	5ð 	5ð 	5ð 	5ð 	5ð ˆr%   )rY   N)F)&r   r    r!   Ú__doc__r   r   r#   r   Úpropertyr   r"   rb   rf   ri   rl   ro   r   r2   r3   r4   rs   ru   r   rz   r~   r‚   r†   r‰   rŒ   r	   r   r�   r‘   r“   r•   rF   r£   r¬   r$   r%   r&   r   r   —   s·  € € € € € € ðDð DðL �i”Ð Ð Ñ Ø�zÔ"Ð"Ð"Ñ"ð ð
˜J sœOð 
ð 
ð 
ñ „Xð
ð ð
˜ Cœð 
ð 
ð 
ñ „Xð
ð ð
¨
°3¬ð 
ð 
ð 
ñ „Xð
ð ð
¨°C¬ð 
ð 
ð 
ñ „Xð
ð ð
 J¨s¤Oð 
ð 
ð 
ñ „Xð
ð ð"˜Z¨¨c°5¸$ÀÀcÐ.IÔ(JÔKð "ð "ð "ñ „Xð"ð2 ð#˜j¨¨s°E¸4ÀÀsÐ/JÔ)KÔLð #ð #ð #ñ „Xð#ð0 ð
 g¨c°3¨hÔ&7ð 
ð 
ð 
ñ „Xð
ð ð
 7¨3°¨8Ô#4ð 
ð 
ð 
ñ „Xð
ð ð
 7¨3°¨8Ô#4ð 
ð 
ð 
ñ „Xð
ð ð
 w¨s°C¨xÔ'8ð 
ð 
ð 
ñ „Xð
ð ð
°7¸3À¸8Ô3Dð 
ð 
ð 
ñ „Xð
ð ð
¨g°c¸3°hÔ.?ð 
ð 
ð 
ñ „Xð
ð ð
 HÐ-DÔ$Eð 
ð 
ð 
ñ „Xð
ð< ð X¨g°c¸3°hÔ.?Ô%@ð ð ð ñ „Xðð ð#˜j¨œoð #ð #ð #ñ „Xð#ð ð$˜z¨#œð $ð $ð $ñ „Xð$ð	
ð 	
ð 	
ð 	
ð% Cð %¨cð %ð %ð %ð %ð.ð ð ð ð ð 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°   Údict)Úitemsr°   s     r&   ry   ry   é  s-   € ð
 'Ð&Ð&Ð&Ð&Ð&àÐ�D ™KœKÑ(Ô(Ð(r%   rY   c           
      ó.  — ddl m}m}m}m} ddl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 t7          dt          |¦  «        › d�¦  «        ‚)Nr   )ÚScriptObjectÚSymBoolÚSymFloatÚSymIntr   )Ú
FakeTensorÚ )r   r1   Ú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   Útorch._subclasses.fake_tensorr¹   rB   r2   r4   r3   rC   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Æ   ó  sB  € Ø=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=ØCÐCÐCÐCÐCÐCØ8Ð8Ð8Ð8Ð8Ð8å�$��d¥E­4°©:¬:µsÐ;Ñ<Ô<ð 5å R¨tÐ4Ñ4Ô4Ð4ð 	�”ÐÐÐØ
ÐHÐHÐHñ 	ÔÐà
Œ)�EÔ
€CØ„y�KÐÐÝ $¤)Ð,Ñ,Ô,Ð,Ý	�C˜Ñ	$Ô	$ð 
Ý 4¤9Ð-Ñ-Ô-Ð-Ý	�C˜Ñ	 Ô	 ð 
Ý 4¤9Ð-Ñ-Ô-Ð-Ý	�C˜Ñ	"Ô	"ð 
Ý T¤YÐ/Ñ/Ô/Ð/Ý	�C˜Ñ	!Ô	!ð 
Ý D¤IÐ.Ñ.Ô.Ð.Ý	�C˜Ñ	&Ô	&ð 
Ý  d¤i¸3¿9º9¹;¼;×;UÒ;UÑ;WÔ;WÐXÑXÔXÐXÝ	�CÐ)Ñ	*Ô	*ð 

Ý Ø” cÔ&;Àcð
ñ 
ô 
ð 	
õ 
�C�#�t¥S­%µ°d±´Ð<Ñ	=Ô	=ð 
Ý T¤Y°cÐ:Ñ:Ô:Ð:åð?½¸c¹¼ð ?ð ?ð ?ñ
ô 
ð 	
r%   Úgraph_signaturer   Úgmztorch.fx.GraphModuleri   c           
      ó  ‡‡	‡
‡‡‡‡‡‡‡‡‡‡‡— ddl m} | j        d u}t          | j        ¦  «        Š| j        Š| j        Št          | 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t.          fˆˆˆˆfd„Šdt0          d	t,          dt2          fˆ	ˆ
ˆˆˆˆˆfd
„Šˆfd„|D ¦   «         }ˆfd„t5          |¦  «        D ¦   «         }t7          ||¬¦  «        S )Nr   )Ú_pytreec                 óF   •— g | ]}|j         d k    ¯t          |‰¦  «        ‘ŒS )r§   )r¨   rÆ   )r]   rÄ   r“   s     €r&   ú
<listcomp>z6_convert_to_export_graph_signature.<locals>.<listcomp>/  s:   ø€ ð ð ð àØŒ7�mÒ#Ð#õ 	˜D ,Ñ/Ô/à#Ð#Ð#r%   c                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS r$   )rÆ   )r]   rÄ   r•   s     €r&   rÌ   z6_convert_to_export_graph_signature.<locals>.<listcomp>4  s3   ø€ ð ð ð àõ 	˜D -Ñ0Ô0ðð ð r%   ÚinprY   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: )rB   r)   r   r   r;   r   r6   r   r7   r8   rÃ   )rÎ   r   r~   rz   ri   rs   s     €€€€r&   Úto_input_specz9_convert_to_export_graph_signature.<locals>.to_input_spec9  s  ø€ Ý�c�=Ñ)Ô)ð 	IÝ¥)¤/°sÀ4ÐHÑHÔHÐHå˜#�~Ñ.Ô.ð 	NÝ¥)Ô"6¸CÈÐMÑMÔMÐMØŒxˆØ�;ÐÐÝ¥)Ô"6¸CÈÐMÑMÔMÐMØÐ)Ð)Ð)ÝÝÔ(ØØ+¨DÔ1ðñ ô ð ð
 Ð&Ð&Ð&ÝÝÔ%ØØ(¨Ô.Ø-¨dÔ3Ð;QÐQð	ñ ô ð õ !Ð!E¸tÐ!EÐ!EÑFÔFÐFr%   Úidxr¡   c                 ó8  •— t          |t          ¦  «        rt          t          j        |d ¬¦  «        S t          |t
          ¦  «        st          t          j        |d ¬¦  «        S |j        }| t          ‰¦  «        t          ‰¦  «        z   t          ‰¦  «        z   k     r^|‰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: )rB   r)   r   r   r;   r   rI   r   r˜   rK   rN   rÃ   rL   rM   rJ   )
rÒ   r¡   r   Úbuffer_mutationsÚgrad_paramsÚgrad_user_inputsrU   r•   Úuser_input_mutationsru   s
      €€€€€€€r&   Úto_output_specz:_convert_to_export_graph_signature.<locals>.to_output_specR  sÜ  ø€ Ý�a�Ñ'Ô'ð 	IÝ¥:Ô#3¸À4ÐHÑHÔHÐHå˜!�^Ñ,Ô,ð 	OÝ¥:Ô#9¸qÈÐNÑNÔNÐNØŒvˆØ•Ð%Ñ&Ô&­Ð-AÑ)BÔ)BÑBÅSÈÑEWÔEWÑWÒWÐWØÐ'Ð'Ð'Ý!Ý#Ô3ØØ+¨DÔ1ðñ ô ð ð
 Ð-Ð-Ð-Ý!Ý#Ô7ØØ/°Ô5ðñ ô ð õ %Ð%LÀdÐ%LÐ%LÑMÔMÐMà�|Ð#Ð#Ý!¥zÔ'=À1ÈTÐRÑRÔRÐRà˜Ð$Ð$Ý!Ý#Ô9ØØ& tÔ,ðñ ô ð ð
 Ð)Ð)Ð)Ý!Ý#Ô:ØØ+¨DÔ1ðñ ô ð ð
 ˜Ò$Ð$Ý!¥zÔ'=À1ÈTÐRÑRÔRÐRõ %Ð%JÀDÐ%JÐ%JÑKÔKÐKr%   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r$   r$   )r]   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$   )r]   rÒ   r¡   rØ   s      €r&   rÌ   z6_convert_to_export_graph_signature.<locals>.<listcomp>  s)   ø€ ÐLÐLÐL©v¨s°A�N�N 3¨Ñ*Ô*ÐLÐLÐLr%   )rW   rX   )Útorch.utilsrÊ   r�   Úsetrs   rz   r~   ru   r‚   r†   Úgradients_to_parameterrT   rU   r“   r•   ÚgraphÚnodesÚtree_leavesr™   rš   ÚreversedÚargsrG   r   r2   r   Ú	enumerater   )rÇ   rÈ   ri   ÚpytreeÚis_jointÚinputsÚoutputsrW   rX   rÔ   rÕ   rÖ   r“   r~   rz   rU   r•   rÑ   rØ   r×   rs   ru   s     `      @@@@@@@@@@@@@r&   Ú"_convert_to_export_graph_signaturerè     sA  øøøøøøøøøøøøøø€ ð
 .Ð-Ð-Ð-Ð-Ð-àÔ1¸Ð=€Hõ �oÔ1Ñ2Ô2€KØ*Ô?ÐØ'Ô9ÐÝ�Ô3Ñ4Ô4€LØ&Ô8ÐØ*Ô@ÐØOWÐ_�/Ô4ÔKÐKÐ]_€KØV^Ðf�Ô9ÔRÐRÐdfÐØDLÐV�/Ô4Ô@Ð@ÐRV€KØ"Ô/€LØ#Ô1€Mðð ð ð à”H”Nðñ ô €Fð
ð ð ð à×&Ò&¥t­Dµ¸"¼(¼.Ñ1IÔ1IÑ,JÔ,JÑ'KÔ'KÔ'PÑQÔQðñ ô €Gð
G�<ð G­Ið Gð Gð Gð Gð Gð Gð Gð Gð Gð2*L�Cð *L¥Lð *LµZð *Lð *Lð *Lð *Lð *Lð *Lð *Lð *Lð *Lð *Lð *Lð *LðX 9Ð8Ð8Ð8°Ð8Ñ8Ô8€KØLÐLÐLÐL½À7Ñ9KÔ9KÐLÑLÔL€LÝ¨KÀlÐSÑSÔSÐSr%   )&Ú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   rG   r   r   r   r   r   r   ry   rÆ   r"   rè   r$   r%   r&   ú<module>rï      s  ðà Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ Wà ?Ð ?Ð ?Ð ?Ð ?Ð ?ð ð FØ€L€L€LØEÐEÐEÐEÐEÐEðð ð €ð  Ôðð ð ð ð ñ ô ñ Ôðð Ôðð ð ð ð ñ ô ñ Ôðð Ôðð ð ð ð ñ ô ñ Ôðð Ôðð ð ð ð ñ ô ñ Ôðð Ôðð ð ð ð ñ ô ñ Ôðð Ôð0ð 0ð 0ð 0ð 0ñ 0ô 0ñ Ôð0ð Ôð.ð .ð .ð .ð .ñ .ô .ñ Ôð.ð
 ØØØØØØØðô€ðð ð ð ð �ñ ô ð ð Ôð#ð #ð #ð #ð #ñ #ô #ñ Ôð#ð2ð ð ð ð �ñ ô ð ð Ôðð ð ð ð ñ ô ñ Ôðð( Ôðð ð ð ð ñ ô ñ Ôðð ÔðNð Nð Nð Nð Nñ Nô Nñ ÔðNðb
)ð )ð )ð#
¨lð #
ð #
ð #
ð #
ðLgTØ%ðgTàðgTð   œHðgTð ð	gTð gTð gTð gTð gTð gTr%   