Ë
    M²j›k  ã                   ó*  — d dl Z d dlmZmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZ 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z  ez  ez  ez  ez  ez  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'y)-é    N)Ú
CollectionÚMapping)ÚautoÚEnum)ÚTYPE_CHECKING©ÚFakeScriptObject)Úget_opaque_type_nameÚis_opaque_type)Úis_fake)ÚGraphSignature)ÚConstantArgumentÚCustomObjArgumentÚExportBackwardSignatureÚExportGraphSignatureÚ	InputKindÚ	InputSpecÚ
OutputKindÚ
OutputSpecÚSymIntArgumentÚSymFloatArgumentÚSymBoolArgumentÚTensorArgumentc                   ó   — e Zd ZU eed<   y)r   ÚnameN©Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__© ó    ú[/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/export/graph_signature.pyr   r       ó   … à
„Ir#   r   c                   ó   — e Zd ZU eed<   y)ÚTokenArgumentr   Nr   r"   r#   r$   r'   r'   %   r%   r#   r'   c                   ó   — e Zd ZU eed<   y)r   r   Nr   r"   r#   r$   r   r   *   r%   r#   r   c                   ó   — e Zd ZU eed<   y)r   r   Nr   r"   r#   r$   r   r   /   r%   r#   r   c                   ó   — e Zd ZU eed<   y)r   r   Nr   r"   r#   r$   r   r   4   r%   r#   r   c                   ó6   — e Zd ZU eed<   eed<   dZedz  ed<   y)r   r   Ú	class_fqnNÚfake_val)r   r   r   r    r!   r-   r	   r"   r#   r$   r   r   9   s   … à
ƒIØƒNØ(,€HÐ Ñ%Ô,r#   r   c                   ó:   — e Zd ZU eed<   eez  ez  ez  dz  ed<   y)r   r   NÚvalue)r   r   r   r    r!   ÚintÚfloatÚboolr"   r#   r$   r   r   @   s    … à
ƒIØ�‰;˜Ñ Ñ# dÑ*Ô*r#   r   c                   ó`   — e Zd Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z	y)r   N)
r   r   r   r   Ú
USER_INPUTÚ	PARAMETERÚBUFFERÚCONSTANT_TENSORÚ
CUSTOM_OBJÚTOKENr"   r#   r$   r   r   Q   s,   „ Ù“€JÙ“€IÙ‹V€FÙ“f€OÙ“€JÙ‹F�Er#   r   c                   óR   — e Zd ZU eed<   eed<   edz  ed<   dZedz  ed<   d„ Z	d„ Z
y)r   ÚkindÚargNÚtargetÚ
persistentc           
      ó   — | j                   t        j                  k(  r| j                  €t	        d«      ‚t        | j                  t        t        t        t        t        t        t        f«      s!t	        dt        | j                  «      › �«      ‚y )Nz,Failed to specify persistent flag on BUFFER.úexpected valid arg type, got )r;   r   r6   r>   ÚAssertionErrorÚ
isinstancer<   r   r   r   r   r   r   r'   Útype©Úselfs    r$   Ú__post_init__zInputSpec.__post_init__a   sv   € Ø�9‰9œ	×(Ñ(Ò(Ø�‰Ð&Ü$Ð%SÓTÐTÜØ�H‰HäÜÜ ÜÜ Ü!Üðô
ô !Ð#@ÄÀdÇhÁhÃÐ@PÐ!QÓRÐRð
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;   )rE   r=   r>   s      r$   Ú__str__zInputSpec.__str__s   sp   € Ø—{‘{Ð*‘°)¸D¿K¹K¸=ÈÐ0JˆØŸ?™?Ð2‘R¸,ÀtÇÁÐFWÐ8Xˆ
Ü�d—h‘h—m‘mÓ$Ð% R¬¨D¯I©I¯N©NÓ(;Ð'<¸V¸HÀZÀLÐQÐQr#   )r   r   r   r   r!   ÚArgumentSpecr    r>   r2   rF   rL   r"   r#   r$   r   r   Z   s1   … à
ƒOØ	ÓØ�$‰JÓØ"€J��t‘Ó"òSó$Rr#   r   c                   ó|   — e Zd Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z	 e«       Z
 e«       Zy)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   y   s>   „ Ù“&€KÙ“&€KÙ“f€OÙ›ÐÙ ›FÐÙ!›VÐÙ›&ÐÙ‹F�Er#   r   c                   ó>   — e Zd ZU eed<   eed<   edz  ed<   d„ Zd„ Zy)r   r;   r<   Nr=   c           
      ó¦   — t        | j                  t        t        t        t
        t        t        t        f«      st        d| j                  › �«      ‚y )Nr@   )
rB   r<   r   r   r   r   r   r'   r   rA   rD   s    r$   rF   zOutputSpec.__post_init__Š   sI   € ÜØ�H‰HäÜÜ ÜÜ ÜÜ!ðô
ô !Ð#@ÀÇÁÀ
Ð!KÓLÐLð
r#   c                 óÄ   — | j                   €dnd| j                   › d�}t        | j                  j                  «      › dt        | j                  j                  «      › |› �S )NrH   rI   rJ   rK   )r=   r    r<   r   r;   )rE   r=   s     r$   rL   zOutputSpec.__str__™   sP   € Ø—{‘{Ð*‘°)¸D¿K¹K¸=ÈÐ0JˆÜ�d—h‘h—m‘mÓ$Ð% R¬¨D¯I©I¯N©NÓ(;Ð'<¸V¸HÐEÐEr#   )	r   r   r   r   r!   rM   r    rF   rL   r"   r#   r$   r   r   „   s$   … à
ÓØ	ÓØ�$‰JÓòMóFr#   r   c                   ó@   — e Zd ZU eeef   ed<   eeef   ed<   eed<   y)r   Úgradients_to_parametersÚgradients_to_user_inputsÚloss_outputN)r   r   r   Údictr    r!   r"   r#   r$   r   r   ž   s$   … à! # 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z  ez  e
z  d
z     fd„«       Zede	eez  ez  e
z  d
z     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d
z  fd„«       Zedeee
f   d
z  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%y
) 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  — | ]G  }|j                   t        j                  k(  r(t        |j                  t
        «      r|j                  –— ŒI y ­w©N)r;   r   r5   rB   r=   r    ©Ú.0Úss     r$   ú	<genexpr>z2ExportGraphSignature.parameters.<locals>.<genexpr>  s<   è ø€ ò 
àØ�v‰vœ×,Ñ,Ò,Ü˜!Ÿ(™(¤CÔ(ð �H�Hñ
ùó   ‚AA©Útupler_   rD   s    r$   Ú
parameterszExportGraphSignature.parameters  ó"   € äñ 
à×%Ñ%ô
ó 
ð 	
r#   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó¢   K  — | ]G  }|j                   t        j                  k(  r(t        |j                  t
        «      r|j                  –— ŒI y ­wrd   )r;   r   r6   rB   r=   r    re   s     r$   rh   z/ExportGraphSignature.buffers.<locals>.<genexpr>"  s<   è ø€ ò 
àØ�v‰vœ×)Ñ)Ò)Ü˜!Ÿ(™(¤CÔ(ð �H�Hñ
ùri   rj   rD   s    r$   ÚbufferszExportGraphSignature.buffers   rm   r#   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó¾   K  — | ]U  }|j                   t        j                  k(  r6|j                  d u r(t	        |j
                  t        «      r|j
                  –— ŒW y­w)FN)r;   r   r6   r>   rB   r=   r    re   s     r$   rh   z>ExportGraphSignature.non_persistent_buffers.<locals>.<genexpr>+  sH   è ø€ ò 
àØ�v‰vœ×)Ñ)Ò)Ø�|‰|˜uÑ$Ü˜!Ÿ(™(¤CÔ(ð	 �H�Hñ
ùs   ‚AArj   rD   s    r$   Únon_persistent_buffersz+ExportGraphSignature.non_persistent_buffers)  s"   € äñ 
à×%Ñ%ô
ó 
ð 	
r#   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó¢   K  — | ]G  }|j                   t        j                  k(  r(t        |j                  t
        «      r|j                  –— ŒI y ­wrd   )r;   r   r7   rB   r=   r    re   s     r$   rh   z?ExportGraphSignature.lifted_tensor_constants.<locals>.<genexpr>6  s<   è ø€ ò 
àØ�v‰vœ×2Ñ2Ò2Ü˜!Ÿ(™(¤CÔ(ð �H�Hñ
ùri   rj   rD   s    r$   Úlifted_tensor_constantsz,ExportGraphSignature.lifted_tensor_constants4  rm   r#   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó¢   K  — | ]G  }|j                   t        j                  k(  r(t        |j                  t
        «      r|j                  –— ŒI y ­wrd   )r;   r   r8   rB   r=   r    re   s     r$   rh   z:ExportGraphSignature.lifted_custom_objs.<locals>.<genexpr>?  s<   è ø€ ò 
àØ�v‰vœ×-Ñ-Ò-Ü˜!Ÿ(™(¤CÔ(ð �H�Hñ
ùri   rj   rD   s    r$   Úlifted_custom_objsz'ExportGraphSignature.lifted_custom_objs=  rm   r#   Nc           	      óÒ  — g }| j                   D ]Ì  }|j                  t        j                  k7  rŒ!t	        |j
                  t        t        t        t        t        f«      r&|j                  |j
                  j                  «       Œvt	        |j
                  t        «      r&|j                  |j
                  j                  «       Œ¶t        |j
                  › d�«      ‚ t!        |«      S )Nz is not a valid user inputs)r_   r;   r   r4   rB   r<   r   r   r   r   r   Úappendr   r   r/   ÚRuntimeErrorrk   )rE   Úuser_inputsrg   s      r$   r}   z ExportGraphSignature.user_inputsG  s·   € à=?ˆØ×!Ñ!ò 	JˆAØ�v‰vœ×-Ñ-Ò-ØäØ—‘ä"Ü"Ü$Ü#Ü%ðô	ð ×"Ñ" 1§5¡5§:¡:Õ.Ü˜AŸE™EÔ#3Ô4Ø×"Ñ" 1§5¡5§;¡;Õ/ä" a§e¡e WÐ,GÐ#HÓIÐIð%	Jô& �[Ó!Ð!r#   c                 ój  — g }| j                   D �]  }|j                  t        j                  t        j                  fvrŒ1t        |j                  t        t        t        t        f«      r&|j                  |j                  j                  «       Œ�t        |j                  t        «      r&|j                  |j                  j                  «       ŒÁt        |j                  t        «      r'|j                  |j                  j                  «       �Œt!        |j                  › d�«      ‚ t#        |«      S )Nz is not a valid user output)r`   r;   r   rO   rP   rB   r<   r   r   r   r   r{   r   r   r/   r   r|   rk   )rE   Úuser_outputsrg   s      r$   r   z!ExportGraphSignature.user_outputsa  sè   € à>@ˆØ×"Ñ"ó 	JˆAØ�v‰vÜ×&Ñ&Ü×&Ñ&ðñ ð äØ—‘Ü¤Ô1AÄ?ÐSôð ×#Ñ# A§E¡E§J¡JÕ/Ü˜AŸE™EÔ#3Ô4Ø×#Ñ# A§E¡E§K¡KÕ0Ü˜AŸE™EÔ#4Ô5Ø×#Ñ# A§E¡E§J¡JÖ/ä" a§e¡e WÐ,GÐ#HÓIÐIð#	Jô$ �\Ó"Ð"r#   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó  K  — | ]w  }|j                   t        j                  k(  rXt        |j                  t
        «      r>t        |j                  t        «      r$|j                  j                  |j                  f–— Œy y ­wrd   )	r;   r   r5   rB   r<   r   r=   r    r   re   s     r$   rh   z<ExportGraphSignature.inputs_to_parameters.<locals>.<genexpr>|  sW   è ø€ ò 
àØ�v‰vœ×,Ñ,Ò,Ü˜1Ÿ5™5¤.Ô1Ü˜1Ÿ8™8¤SÔ)ð	 �U‰U�Z‰Z˜Ÿ™Ô"ñ
ùó   ‚A=A?©Ú_immutable_dictr_   rD   s    r$   Úinputs_to_parametersz)ExportGraphSignature.inputs_to_parametersz  ó"   € äñ 
à×%Ñ%ô
ó 
ð 	
r#   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó  K  — | ]w  }|j                   t        j                  k(  rXt        |j                  t
        «      r>t        |j                  t        «      r$|j                  j                  |j                  f–— Œy y ­wrd   )	r;   r   r6   rB   r<   r   r=   r    r   re   s     r$   rh   z9ExportGraphSignature.inputs_to_buffers.<locals>.<genexpr>ˆ  sW   è ø€ ò 
àØ�v‰vœ×)Ñ)Ò)Ü˜1Ÿ5™5¤.Ô1Ü˜1Ÿ8™8¤SÔ)ð	 �U‰U�Z‰Z˜Ÿ™Ô"ñ
ùr‚   rƒ   rD   s    r$   Úinputs_to_buffersz&ExportGraphSignature.inputs_to_buffers†  r†   r#   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó  K  — | ]w  }|j                   t        j                  k(  rXt        |j                  t
        «      r>t        |j                  t        «      r$|j                  j                  |j                  f–— Œy y ­wrd   )	r;   r   rQ   rB   r<   r   r=   r    r   re   s     r$   rh   z9ExportGraphSignature.buffers_to_mutate.<locals>.<genexpr>”  sW   è ø€ ò 
àØ�v‰vœ×3Ñ3Ò3Ü˜1Ÿ5™5¤.Ô1Ü˜1Ÿ8™8¤SÔ)ð	 �U‰U�Z‰Z˜Ÿ™Ô"ñ
ùr‚   ©r„   r`   rD   s    r$   Úbuffers_to_mutatez&ExportGraphSignature.buffers_to_mutate’  ó"   € äñ 
à×&Ñ&ô
ó 
ð 	
r#   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó  K  — | ]w  }|j                   t        j                  k(  rXt        |j                  t
        «      r>t        |j                  t        «      r$|j                  j                  |j                  f–— Œy y ­wrd   )	r;   r   rR   rB   r<   r   r=   r    r   re   s     r$   rh   z<ExportGraphSignature.parameters_to_mutate.<locals>.<genexpr>ž  sW   è ø€ ò 
àØ�v‰vœ×6Ñ6Ò6Ü˜1Ÿ5™5¤.Ô1Ü˜1Ÿ8™8¤SÔ)ð	 �U‰U�Z‰Z˜Ÿ™Ô"ñ
ùr‚   rŒ   rD   s    r$   Úparameters_to_mutatez)ExportGraphSignature.parameters_to_mutateœ  rŽ   r#   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó  K  — | ]w  }|j                   t        j                  k(  rXt        |j                  t
        «      r>t        |j                  t        «      r$|j                  j                  |j                  f–— Œy y ­wrd   )	r;   r   rU   rB   r<   r   r=   r    r   re   s     r$   rh   z=ExportGraphSignature.user_inputs_to_mutate.<locals>.<genexpr>¨  sW   è ø€ ò 
àØ�v‰vœ×7Ñ7Ò7Ü˜1Ÿ5™5¤.Ô1Ü˜1Ÿ8™8¤SÔ)ð	 �U‰U�Z‰Z˜Ÿ™Ô"ñ
ùr‚   rŒ   rD   s    r$   Úuser_inputs_to_mutatez*ExportGraphSignature.user_inputs_to_mutate¦  rŽ   r#   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó  K  — | ]w  }|j                   t        j                  k(  rXt        |j                  t
        «      r>t        |j                  t        «      r$|j                  j                  |j                  f–— Œy y ­wrd   )	r;   r   r7   rB   r<   r   r=   r    r   re   s     r$   rh   zIExportGraphSignature.inputs_to_lifted_tensor_constants.<locals>.<genexpr>³  sW   è ø€ ò 
àØ�v‰vœ×2Ñ2Ò2Ü˜1Ÿ5™5¤.Ô1Ü˜1Ÿ8™8¤SÔ)ð	 �U‰U�Z‰Z˜Ÿ™Ô"ñ
ùr‚   rƒ   rD   s    r$   Ú!inputs_to_lifted_tensor_constantsz6ExportGraphSignature.inputs_to_lifted_tensor_constants±  r†   r#   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó  K  — | ]w  }|j                   t        j                  k(  rXt        |j                  t
        «      r>t        |j                  t        «      r$|j                  j                  |j                  f–— Œy y ­wrd   )	r;   r   r8   rB   r<   r   r=   r    r   re   s     r$   rh   zDExportGraphSignature.inputs_to_lifted_custom_objs.<locals>.<genexpr>½  sX   è ø€ ò 
àØ�v‰vœ×-Ñ-Ò-Ü˜1Ÿ5™5Ô"3Ô4Ü˜1Ÿ8™8¤SÔ)ð	 �U‰U�Z‰Z˜Ÿ™Ô"ñ
ùr‚   rƒ   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_|�t	        d«      ‚t        |j                  t        «      s!t	        dt        |j                  «      › �«      ‚|j                  j                  }Œ€|j                  t        j                  k(  r›t        |j                  t        «      s!t	        dt        |j                  «      › �«      ‚t        |j                  t        «      s!t	        dt        |j                  «      › �«      ‚|j                  ||j                  j                  <   �Œ8|j                  t        j                  k(  s�ŒWt        |j                  t        «      s!t	        dt        |j                  «      › �«      ‚t        |j                  t        «      s!t	        dt        |j                  «      › �«      ‚|j                  ||j                  j                  <   �Œò |€y t        |||¬«      S )Nz multiple LOSS_OUTPUT specs foundz-expected TensorArgument for LOSS_OUTPUT, got z3expected str target for GRADIENT_TO_PARAMETER, got z7expected TensorArgument for GRADIENT_TO_PARAMETER, got z4expected str target for GRADIENT_TO_USER_INPUT, got z8expected TensorArgument for GRADIENT_TO_USER_INPUT, got )r\   rZ   r[   )r`   r;   r   rP   rA   rB   r<   r   rC   r   rS   r=   r    rT   r   )rE   r\   rZ   r[   Úspecs        r$   Úbackward_signaturez'ExportGraphSignature.backward_signatureÅ  sÐ  € àˆØ24ÐØ35Ð Ø×%Ñ%ó 	FˆDØ�y‰yœJ×2Ñ2Ò2ØÐ*Ü(Ð)KÓLÐLÜ! $§(¡(¬NÔ;Ü(ØGÌÈTÏXÉXËÐGWÐXóð ð #Ÿh™hŸm™m‘Ø—‘œj×>Ñ>Ò>Ü! $§+¡+¬sÔ3Ü(ØMÌdÐSW×S^ÑS^ÓN_ÐM`Ðaóð ô " $§(¡(¬NÔ;Ü(ØQÔRVÐW[×W_ÑW_ÓR`ÐQaÐbóð ð :>¿¹Ð'¨¯©¯©Ó6Ø—‘œj×?Ñ?Ô?Ü! $§+¡+¬sÔ3Ü(ØNÌtÐTX×T_ÑT_ÓO`ÐNaÐbóð ô " $§(¡(¬NÔ;Ü(ØRÔSWÐX\×X`ÑX`ÓSaÐRbÐcóð ð ;?¿+¹+Ð(¨¯©¯©Ó7ð9	Fð< ÐØä&Ø#Ø$;Ø%=ô
ð 	
r#   c                  ó   — y rd   r"   rD   s    r$   Úassertion_dep_tokenz(ExportGraphSignature.assertion_dep_tokenô  s   € àr#   c                 ó:  — g }| j                   D ]€  }|j                  t        j                  k(  sŒ!t	        |j
                  t        «      s!t        dt        |j
                  «      › �«      ‚|j                  |j
                  j                  «       Œ‚ t        |«      S ©Nz+expected TokenArgument for TOKEN kind, got )r_   r;   r   r9   rB   r<   r'   rA   rC   r{   r   rk   )rE   Úinput_tokensrg   s      r$   r¢   z!ExportGraphSignature.input_tokensø  s~   € àˆØ×!Ñ!ò 	0ˆAØ�v‰vœŸ™Ó(Ü! !§%¡%¬Ô7Ü(ØEÄdÈ1Ï5É5ÃkÀ]ÐSóð ð ×#Ñ# A§E¡E§J¡JÕ/ð	0ô �\Ó"Ð"r#   c                 ó:  — g }| j                   D ]€  }|j                  t        j                  k(  sŒ!t	        |j
                  t        «      s!t        dt        |j
                  «      › �«      ‚|j                  |j
                  j                  «       Œ‚ t        |«      S r¡   )r`   r;   r   r9   rB   r<   r'   rA   rC   r{   r   rk   )rE   Úoutput_tokensrg   s      r$   r¤   z"ExportGraphSignature.output_tokens  s€   € àˆØ×"Ñ"ò 	1ˆAØ�v‰vœ×)Ñ)Ó)Ü! !§%¡%¬Ô7Ü(ØEÄdÈ1Ï5É5ÃkÀ]ÐSóð ð ×$Ñ$ Q§U¡U§Z¡ZÕ0ð	1ô �]Ó#Ð#r#   c                 ó2  — | j                   }|€y t        |«      dk7  rt        dt        |«      › �«      ‚t        t	        |j                  «       «      «      }t        | j                  «      t        | j                  «      z   }||k7  rt        d|› d|› �«      ‚y )Né   z,expected exactly 1 assertion_dep_token, got z)expected assertion_dep_token_index to be z, got )rŸ   ÚlenrA   ÚnextÚiterÚkeysr   r�   )rE   rŸ   Úassertion_dep_token_indexÚexpected_indexs       r$   rF   z"ExportGraphSignature.__post_init__  s­   € Ø"×6Ñ6ÐØÐ&ØÜÐ"Ó# qÒ(Ü Ø>¼sÐCVÓ?WÐ>XÐYóð ô %)¬Ð.A×.FÑ.FÓ.HÓ)IÓ$JÐ!Ü˜T×.Ñ.Ó/´#°d×6LÑ6LÓ2MÑMˆØÐ6Ò6Ü Ø;¸NÐ;KÈ6ÐRkÐQlÐmóð ð 7r#   ÚoldÚnewc                 ó,  — t        |t        «      st        dt        |«      › �«      ‚t        |t        «      st        dt        |«      › �«      ‚t        t
        t        t        t        t        f}| j                  D ]D  }t        |j                  |«      sŒ|j                  j                  |k(  sŒ4||j                  _        ŒF | j                  D ]D  }t        |j                  |«      sŒ|j                  j                  |k(  sŒ4||j                  _        ŒF y)zR
        Replace all uses of the old name with new name in the signature.
        zexpected old to be str, got zexpected new to be str, got N)rB   r    rA   rC   r   r   r   r   r   r'   r`   r<   r   r_   )rE   r­   r®   Ú	arg_typesÚoÚis         r$   Úreplace_all_usesz%ExportGraphSignature.replace_all_uses  sß   € ô ˜#œsÔ#Ü Ð#?ÄÀSÃ	¸{Ð!KÓLÐLÜ˜#œsÔ#Ü Ð#?ÄÀSÃ	¸{Ð!KÓLÐLäÜÜÜÜÜð
ˆ	ð ×"Ñ"ò 	%ˆAÜ˜!Ÿ%™% Õ+Ø—5‘5—:‘: Ó$Ø!$�A—E‘E•Jð	%ð ×!Ñ!ò 	%ˆAÜ˜!Ÿ%™% Õ+Ø—5‘5—:‘: Ó$Ø!$�A—E‘E•Jñ	%r#   c                 ó   ‡ ‡— ˆˆ fd„}|S )Nc                 óº   •— |j                   dk(  r‰j                  | j                  |«       ‰r-| j                   dk(  r‰j                  | j                  |«       y y y )NÚoutputÚplaceholder)Úopr³   r   )r­   r®   ÚuserÚreplace_inputsrE   s      €€r$   Ú_z0ExportGraphSignature.get_replace_hook.<locals>._9  sL   ø€ Ø�w‰w˜(Ò"Ø×%Ñ% c§h¡h°Ô4Ù #§&¡&¨MÒ"9Ø×%Ñ% c§h¡h°Õ4ð #:ˆ~r#   r"   )rE   rº   r»   s   `` r$   Úget_replace_hookz%ExportGraphSignature.get_replace_hook8  s   ù€ õ	5ð ˆr#   c                 óœ   — dj                  d„ | j                  D «       «      }dj                  d„ | j                  D «       «      }d|› d|› d�S )Nú
c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrd   ©r    re   s     r$   rh   z/ExportGraphSignature.__str__.<locals>.<genexpr>B  s   è ø€ ÒA¨1¤ A§ÑAùó   ‚c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrd   rÀ   re   s     r$   rh   z/ExportGraphSignature.__str__.<locals>.<genexpr>C  s   è ø€ Ò C¨A¤ Q§Ñ CùrÁ   z

# inputs
z

# outputs
)Újoinr_   r`   )rE   r_   r`   s      r$   rL   zExportGraphSignature.__str__A  sK   € Ø—i‘iÑA°×0@Ñ0@ÔAÓAˆØ—y‘yÑ C°×1BÑ1BÔ CÓCˆØ˜k˜]¨/¸,¸ÀrÐJÐJr#   )ra   N)F)&r   r   r   Ú__doc__Úlistr   r!   r   Úpropertyr   r    rl   rp   rs   rv   ry   r0   r1   r2   r}   r   r   r…   r‰   r�   r‘   r”   r—   rš   r   r�   rŸ   r¢   r¤   rF   r³   r¼   rL   r"   r#   r$   r   r   ¥   sÉ  … ñiðV �i‘Ó Ø�zÑ"Ó"ð ð
˜J s™Oò 
ó ð
ð ð
˜ C™ò 
ó ð
ð ð
¨
°3©ò 
ó ð
ð ð
¨°C©ò 
ó ð
ð ð
 J¨s¡Oò 
ó ð
ð ð"˜Z¨¨e©°dÑ(:¸SÑ(@À4Ñ(GÑHò "ó ð"ð2 ð#˜j¨¨u©°tÑ);¸cÑ)AÀDÑ)HÑIò #ó ð#ð0 ð
 g¨c°3¨hÑ&7ò 
ó ð
ð ð
 7¨3°¨8Ñ#4ò 
ó ð
ð ð
 7¨3°¨8Ñ#4ò 
ó ð
ð ð
 g¨c°3¨hÑ&7ò 
ó ð
ð ð
 w¨s°C¨xÑ'8ò 
ó ð
ð ð
°7¸3À¸8Ñ3Dò 
ó ð
ð ð
¨g°c¸3°hÑ.?ò 
ó ð
ð ð)
Ð$;¸dÑ$Bò )
ó ð)
ð\ ð W¨S°#¨XÑ%6¸Ñ%=ò ó ðð ð	#˜j¨™oò 	#ó ð	#ð ð	$˜z¨#™ò 	$ó ð	$óð% Cð %¨có %ó2óKr#   r   c                 ó0   — 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„   G  s   € õ
 'áœD ›KÓ(Ð(r#   ra   c           
      óH  — 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rt        | › 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        ||«      r3t/        | j                   |j1                  «       j3                  «       ¬	«      S t        ||«      r"t/        | j                   |j4                  |¬
«      S t7        t        |«      «      r*t/        | j                   t9        t        |«      «      |¬
«      S t        |t        t        t        t        t        d «      f«      rt        | j                   |¬«      S t        dt        |«      › d�«      ‚)Nr   )ÚScriptObjectÚSymBoolÚSymFloatÚSymIntr   rH   )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	   rB   r0   r2   r1   rC   r    r   ÚmetarA   r   r'   r   r   r   r   r   r   Ú_typeÚqualified_nameÚscript_class_namer   r
   )ÚnodeÚtoken_namesrÌ   rÍ   rÎ   rÏ   r	   rÐ   s           r$   Ú_make_argument_specrÙ   Q  s´  € ß=Ó=ÝCä�$œœd¤E¬4°«:´sÐ;Ô<ä R¨tÔ4Ð4à�D—I‘IÑÜØˆfÐLÐMó
ð 	
ð �)‰)�EÑ
€CØ‡y�y�KÑÜ $§)¡)Ô,Ð,Ü	�ŒÜ 4§9¡9Ô-Ð-Ü	�C˜Ô	 Ü 4§9¡9Ô-Ð-Ü	�C˜Ô	"Ü T§Y¡YÔ/Ð/Ü	�C˜Ô	!Ü D§I¡IÔ.Ð.Ü	�C˜Ô	&Ü  d§i¡i¸3¿9¹9»;×;UÑ;UÓ;WÔXÐXÜ	�CÐ)Ô	*Ü Ø—‘ c×&;Ñ&;Àcô
ð 	
ô 
œ˜S›	Ô	"Ü Ø—‘Ô&:¼4À»9Ó&EÐPSô
ð 	
ô 
�Cœ#œt¤S¬%´°d³Ð<Ô	=Ü T§Y¡Y°cÔ:Ð:äØ8¼¸c»¸ð D>ð ?ó
ð 	
r#   Úgraph_signaturer   Úgmztorch.fx.GraphModulers   c           	      ó2  ‡‡‡‡‡‡‡‡‡‡‡‡— 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                  Š|j                   j"                  D �cg c]  }|j$                  dk(  rt'        ||«      ‘Œ }}|j)                  t+        t-        t/        |j                   j"                  «      «      «      j0                  «      D �cg c]  }t'        |‰«      ‘Œ }}dt2        dt4        fˆˆˆˆfd„}	dt6        dt2        dt8        fˆˆˆˆˆˆˆˆfd	„}
|D �cg c]
  } |	|«      ‘Œ }}t;        |«      D ��cg c]  \  }} |
||«      ‘Œ }}}t=        ||¬
«      S c c}w c c}w c c}w c c}}w )Nr   )Ú_pytreer·   Úinpra   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   r9   r   r4   r   r5   r6   rA   )rÞ   r   r‰   r…   rs   r}   s     €€€€r$   Úto_input_specz9_convert_to_export_graph_signature.<locals>.to_input_spec¨  sÞ   ø€ Ü�cœ=Ô)Ü¤)§/¡/°sÀ4ÔHÐHä˜#œ~Ô.Ü¤)×"6Ñ"6¸CÈÔMÐMØ�x‰xˆØ�;ÑÜ¤)×"6Ñ"6¸CÈÔMÐMØÐ)Ñ)ÜÜ×(Ñ(ØØ+¨DÑ1ôð ð
 Ð&Ñ&ÜÜ×%Ñ%ØØ(¨Ñ.Ø-¨dÑ3Ð;QÐQô	ð ô !Ð#>¸t¸fÐ!EÓFÐFr#   Úidxr±   c                 óH  •— 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  rw|‰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: )rB   r'   r   r   r9   r   rO   r   r§   rQ   rR   rU   rA   rS   rT   rP   )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Á  sÁ  ø€ Ü�aœÔ'Ü¤:×#3Ñ#3¸À4ÔHÐHä˜!œ^Ô,Ü¤:×#9Ñ#9¸qÈÔNÐNØ�v‰vˆØ”Ð%Ó&¬Ð-@Ó)AÑAÄCØ óE
ñ 
ä�Óñò ð Ð'Ñ'Ü!Ü#×3Ñ3ØØ+¨DÑ1ôð ð
 Ð,Ñ,Ü!Ü#×6Ñ6ØØ.¨tÑ4ôð ð
 Ð-Ñ-Ü!Ü#×7Ñ7ØØ/°Ñ5ôð ô %Ð'EÀdÀVÐ%LÓMÐMà�|Ñ#Ü!¤z×'=Ñ'=À1ÈTÔRÐRà˜Ñ$Ü!Ü#×9Ñ9ØØ& tÑ,ôð ð
 Ð)Ñ)Ü!Ü#×:Ñ:ØØ+¨DÑ1ôð ð
 ˜Ò$Ü!¤z×'=Ñ'=À1ÈTÔRÐRô %Ð'CÀDÀ6Ð%JÓKÐKr#   )r_   r`   )Útorch.utilsrÝ   r�   Úsetr}   r…   r‰   r   r�   r‘   r”   Úgradients_to_parameterr[   r\   r¢   r¤   ÚgraphÚnodesr¸   rÙ   Útree_leavesr¨   r©   ÚreversedÚargsrM   r   r0   r   Ú	enumerater   )rÚ   rÛ   rs   ÚpytreeÚis_jointr¢   r×   ÚinputsÚoutputsrá   ré   rÞ   r_   râ   r±   r`   rä   rå   ræ   r‰   r…   r\   r¤   rç   rè   r}   r   s     `             @@@@@@@@@@@r$   Ú"_convert_to_export_graph_signaturer÷   {  s  ÿû€ õ
 .à×1Ñ1¸Ð=€Hô �o×1Ñ1Ó2€KØ*×?Ñ?ÐØ'×9Ñ9ÐÜ�×3Ñ3Ó4€LØ&×8Ñ8ÐØ)×>Ñ>ÐØ*×@Ñ@Ðñ ð 	×*Ñ*×AÒAàð ñ ð 	×*Ñ*×CÒCàð ñ ð 	×*Ñ*×6Ò6àð ð
 #×/Ñ/€LØ#×1Ñ1€Mð —H‘H—N‘NöàØ�7‰7�mÒ#ô 	˜D ,Õ/ð€Fð ð ×&Ñ&¤t¬D´¸"¿(¹(¿.¹.Ó1IÓ,JÓ'K×'PÑ'PÓQöàô 	˜D -Õ0ð€Gð ð
Gœ<ð G¬I÷ Gð Gð22LœCð 2L¤Lð 2L´Z÷ 2Lô 2Lðh 28Ö8¨#‘= Õ%Ð8€KÐ8Ü9BÀ7Ó9K×L©v¨s°A‘N 3¨Õ*ÐL€LÑLÜ¨KÀlÔSÐSùòsùò
ùòd 9ùÛLs   Ä"HÅ5H	ÇHÇ!H)(ÚdataclassesÚcollections.abcr   r   Úenumr   r   Útypingr   rÒ   r	   Útorch._library.opaque_objectr
   r   Útorch._subclasses.fake_tensorr   rÑ   Ú&torch._functorch._aot_autograd.schemasr   Ú__all__Ú	dataclassr   r'   r   r   r   r   r   rM   r   r   r   r   r   r   r„   rÙ   rë   r    r÷   r"   r#   r$   ú<module>r     s1  ðã ß /ß Ý  å ?ß MÝ 1ñ ÛÝEò€ð  ×Ñ÷ð ó ðð ×Ñ÷ð ó ðð ×Ñ÷ð ó ðð ×Ñ÷ð ó ðð ×Ñ÷ð ó ðð ×Ñ÷-ð -ó ð-ð ×Ñ÷+ð +ó ð+ð Øñàñð ñð ñ	ð
 ñð ñð ô�ô ð ×Ñ÷Rð Ró ðRô<�ô ð ×Ñ÷Fð Fó ðFð2 ×Ñ÷ð ó ðð ×Ñ÷^Kð ^Kó ð^KòB)ð'
¨ló '
ðT|TØ%ð|Tàð|Tð   ™Hð|Tð ô	|Tr#   