§
    ŠŠtjfZ  ã            
       ó~  — U d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZ d dlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ  ed¦  «        Z ed¦  «        Z ej        e ¦  «        Z!g d¢Z"i a#e$e%ef         e&d<   da'edz  e&d<    ej(        ¦   «         Z)da*da+dZ,i Z-e$e%e$e%ef         f         e&d<   de%de$e%ef         ddfd„Z. ed¬¦  «         G d„ de¦  «        ¦   «         Z/ ed¬¦  «         G d„ d¦  «        ¦   «         Z0 ed¬¦  «        e
dBde1ded         fd „¦   «         ¦   «         Z2e
dBd!e1ded         fd"„¦   «         Z3 ed¬¦  «        d#e4e%         ddfd$„¦   «         Z5 ed¬¦  «        e
d%e$e%ef         ded         fd&„¦   «         ¦   «         Z6d'Z7d(ede8dz  fd)„Z9 ed¬¦  «        d%e$e%ef         deeeef         geeef         f         fd*„¦   «         Z:e
dBde1ded         fd+„¦   «         Z; ed¬¦  «        dCd,„¦   «         Z< ed¬¦  «        dCd-„¦   «         Z= ed¬¦  «        d.e>ddfd/„¦   «         Z? ed¬¦  «        dCd0„¦   «         Z@ ed¬¦  «        de4e%         fd1„¦   «         ZA ed¬¦  «        de1fd2„¦   «         ZBde1fd3„ZC ed¬¦  «        e
dDd(ed5e%ded         fd6„¦   «         ¦   «         ZD ed¬¦  «        de$e%ef         fd7„¦   «         ZE ed¬¦  «        e
d(edz  ded         fd8„¦   «         ¦   «         ZF ed¬¦  «        dedz  fd9„¦   «         ZG ed¬¦  «        e
d:e%dz  ded         fd;„¦   «         ¦   «         ZH ed¬¦  «        de%dz  fd<„¦   «         ZI ed¬¦  «        d=ede$e%ef         fd>„¦   «         ZJd?ede%fd@„ZKd?ee4e         z  de4e4e%                  fdA„ZLdS )Eé    N)Údefaultdict)ÚCallableÚIterator)Úcontextmanager)ÚEnum)ÚAnyÚOptionalÚ	ParamSpecÚTypeVarÚUnion)Úsignpost_eventé   )Úcompatibility)ÚGraph)ÚGraphModule)ÚNodeÚ_PÚ_R)ÚannotateÚannotate_fnÚpreserve_node_metaÚhas_preserved_node_metaÚset_stack_traceÚset_grad_fn_seq_nrÚreset_grad_fn_seq_nrÚformat_stackÚset_current_metaÚget_current_metaÚ
NodeSourceÚNodeSourceActionÚget_graph_provenance_jsonÚset_current_replay_nodeÚget_current_replay_nodeÚcurrent_metaÚcurrent_replay_nodeFz<Gradient addition node due to multiple use of tensor around:Ú_FX_METADATA_REGISTRYÚmodule_nameÚmetadataÚreturnc                 ó   — |t           | <   dS )ap  
    Register FX metadata in the global in-memory registry.

    This is called automatically during graph module compilation to store metadata
    for later use by memory profiler augmentation.

    Args:
        module_name: The module identifier (content-addressed filename)
        metadata: Metadata dict containing lineno_map, node_metadata, and source_code
    N)r&   )r'   r(   s     úP/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/fx/traceback.pyÚ_register_fx_metadatar,   B   s   € ð *2Õ˜+Ñ&Ð&Ð&ó    )Úis_backward_compatiblec                   ó   — e Zd ZdZdZdZdS )r    zLEnum representing the action taken to produce a node in provenance tracking.ÚcreateÚreplaceN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚCREATEÚREPLACE© r-   r+   r    r    Q   s   € € € € € àVÐVà€FØ€G€G€Gr-   r    c            
       óè  — e Zd ZU dZ G d„ d¦  «        Zeed<   ed         ed<   ed          ed<   ed         ed<   e	ee
f         d	z  ed
<   ed	z  ed<   	 	 dded	z  dededed         f         d	z  dd	fd„Zedefd„¦   «         Zedefd„¦   «         Zedefd„¦   «         Zdefd„Zdefd„Zddedefd„Zde	ee
f         fd„Zdedefd„Zdefd„Zede	ee
f         d	z  ded          fd„¦   «         Zd	S ) r   z¼
    NodeSource is a data structure that contains the provenance information of a node.
    If node `a` is created from node `b`, then `a.meta["from_node"]` may contain NodeSource(b).
    c                   ó&   — e Zd Zdedededdfd„ZdS )úNodeSource.NodeInfoÚnameÚtargetÚgraph_idr)   Nc                 ó0   — || _         || _        || _        d S ©N©r<   r=   r>   )Úselfr<   r=   r>   s       r+   Ú__init__zNodeSource.NodeInfo.__init__a   s   € ØˆDŒIØ ˆDŒKØ$ˆDŒMˆMˆMr-   )r2   r3   r4   ÚstrÚintrC   r8   r-   r+   ÚNodeInfor;   `   sD   € € € € € ð	% ð 	%¨cð 	%¸Sð 	%ÀTð 	%ð 	%ð 	%ð 	%ð 	%ð 	%r-   rF   Ú	pass_namer    ÚactionÚ	from_nodeÚ	node_infoNÚ_dictÚ_action_stringÚ Únoder)   c                 óö  — || _         |€g }nt          |t          ¦  «        s|g}|D ]6}t          |t          ¦  «        st	          dt          |¦  «        › �¦  «        ‚Œ7|| _        |rv|                      |j        t          |j
        ¦  «        t          |j        ¦  «        ¬¦  «        | _        d|j        v rt          j        |j        d         ¦  «        ng | _        nd | _        g | _        d | _        d | _        d S )NzExpected NodeSourceAction, got rA   rI   )rG   Ú
isinstanceÚlistr    ÚAssertionErrorÚtyperH   rF   r<   rD   r=   ÚidÚgraphrJ   ÚmetaÚcopyÚdeepcopyrI   rL   rK   )rB   rN   rG   rH   Úas        r+   rC   zNodeSource.__init__m   s  € ð #ˆŒàˆ>ØˆFˆFÝ˜F¥DÑ)Ô)ð 	Ø�XˆFØð 	Rð 	RˆAÝ˜aÕ!1Ñ2Ô2ð RÝ$Ð%PÅtÈAÁwÄwÐ%PÐ%PÑQÔQÐQðRàˆŒØð 	 Ø!Ÿ]š]Ø”Y¥s¨4¬;Ñ'7Ô'7Å"ÀTÄZÁ.Ä.ð +ñ ô ˆDŒNð
  $¤)Ð+Ð+õ ”˜dœi¨Ô4Ñ5Ô5Ð5àð ŒNˆNð "ˆDŒNØˆDŒNð +/ˆÔØ,0ˆŒ
ˆ
ˆ
r-   c                 ó,   — | j         r| j         j        ndS ©NrM   )rJ   r<   ©rB   s    r+   r<   zNodeSource.nameŽ   s   € à&*¤nÐ<ˆtŒ~Ô"Ð"¸"Ð<r-   c                 ó,   — | j         r| j         j        ndS r[   )rJ   r=   r\   s    r+   r=   zNodeSource.target’   s   € à(,¬Ð>ˆtŒ~Ô$Ð$¸BÐ>r-   c                 ó,   — | j         r| j         j        ndS )Néÿÿÿÿ)rJ   r>   r\   s    r+   r>   zNodeSource.graph_id–   s   € à*.¬.Ð@ˆtŒ~Ô&Ð&¸bÐ@r-   c                 ó*   — |                       ¦   «         S r@   )Úprint_readabler\   s    r+   Ú__repr__zNodeSource.__repr__š   s   € Ø×"Ò"Ñ$Ô$Ð$r-   c                 óp   — | j         €)d                     d„ | j        D ¦   «         ¦  «        | _         | j         S )Nú+c                 ó@   — g | ]}|j                              ¦   «         ‘ŒS r8   )r<   Úlower)Ú.0rY   s     r+   ú
<listcomp>z1NodeSource._get_action_string.<locals>.<listcomp>Ÿ   s"   € Ð+PÐ+PÐ+P¸q¨A¬F¯LªL©N¬NÐ+PÐ+PÐ+Pr-   )rL   ÚjoinrH   r\   s    r+   Ú_get_action_stringzNodeSource._get_action_string�   s9   € ØÔÐ&Ø"%§(¢(Ð+PÐ+PÀDÄKÐ+PÑ+PÔ+PÑ"QÔ"QˆDÔØÔ"Ð"r-   r   Úindentc                 óà   — |dk    rdS d}|                       ¦   «         }|d|z  dz  d| j        › d| j        › d|› d| j        › d	�	z   z  }| j        D ]}||                     |d
z   ¦  «        z  }Œ|S )Né	   rM   ú é   z(name=z, pass_name=z	, action=z, graph_id=z)
r   )rj   r<   rG   r>   rI   ra   )rB   rk   ÚresultÚaction_stringÚitems        r+   ra   zNodeSource.print_readable¢   s¦   € Ø�AŠ:ˆ:Ø�2ØˆØ×/Ò/Ñ1Ô1ˆØØ�&‰L˜1ÑØs�t”yÐsÐs¨d¬nÐsÐsÀ}ÐsÐsÐaeÔanÐsÐsÐsñtñ	
ˆð ”Nð 	6ð 	6ˆDØ�d×)Ò)¨&°1©*Ñ5Ô5Ñ5ˆFˆFØˆr-   c                 óÔ   — | j         €E|                      ¦   «         }| j        | j        | j        | j        |d„ | j        D ¦   «         dœ| _         | j         €t          d¦  «        ‚| j         S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r8   ©Úto_dict)rg   rN   s     r+   rh   z&NodeSource.to_dict.<locals>.<listcomp>¹   s    € ÐHÐHÐH°˜dŸlšl™nœnÐHÐHÐHr-   )r<   r=   r>   rG   rH   rI   z"_dict is None after initialization)rK   rj   r<   r=   r>   rG   rI   rR   )rB   rq   s     r+   rv   zNodeSource.to_dict¯   st   € ØŒ:Ðà ×3Ò3Ñ5Ô5ˆMàœ	Øœ+Ø œMØ!œ^Ø'ØHÐH¸¼ÐHÑHÔHðð ˆDŒJð Œ:ÐÝ Ð!EÑFÔFÐFØŒzÐr-   Úotherc                 ó„   — t          |t          ¦  «        sdS |                      ¦   «         |                     ¦   «         k    S )NF)rP   r   rv   )rB   rw   s     r+   Ú__eq__zNodeSource.__eq__À   s4   € Ý˜%¥Ñ,Ô,ð 	Ø�5Ø�|Š|‰~Œ~ §¢¡¤Ò0Ð0r-   c                 ó€   ‡— dt           dt           fˆfd„Št           ‰|                      ¦   «         ¦  «        ¦  «        S )NÚobjr)   c                 ó  •— t          | t          ¦  «        r:t          t          ˆfd„|                      ¦   «         D ¦   «         ¦  «        ¦  «        S t          | t
          ¦  «        rt          ˆfd„| D ¦   «         ¦  «        S | S )Nc              3   ó8   •K  — | ]\  }}| ‰|¦  «        fV — Œd S r@   r8   )rg   ÚkÚvÚ_make_hashables      €r+   ú	<genexpr>z>NodeSource.__hash__.<locals>._make_hashable.<locals>.<genexpr>Ê   s6   øè è € Ð#SÐ#S¹t¸qÀ! Q¨¨°qÑ(9Ô(9Ð$:Ð#SÐ#SÐ#SÐ#SÐ#SÐ#Sr-   c              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S r@   r8   )rg   rr   r€   s     €r+   r�   z>NodeSource.__hash__.<locals>._make_hashable.<locals>.<genexpr>Ì   s-   øè è € ÐBÐB°d˜^˜^¨DÑ1Ô1ÐBÐBÐBÐBÐBÐBr-   )rP   ÚdictÚtupleÚsortedÚitemsrQ   )r{   r€   s    €r+   r€   z+NodeSource.__hash__.<locals>._make_hashableÈ   s‚   ø€ Ý˜#�tÑ$Ô$ð Ý�VÐ#SÐ#SÐ#SÐ#SÀsÇyÂyÁ{Ä{Ð#SÑ#SÔ#SÑSÔSÑTÔTÐTÝ˜C¥Ñ&Ô&ð ÝÐBÐBÐBÐB¸cÐBÑBÔBÑBÔBÐBà�
r-   )r   Úhashrv   )rB   r€   s    @r+   Ú__hash__zNodeSource.__hash__Å   sQ   ø€ ð	¥ð 	­ð 	ð 	ð 	ð 	ð 	ð 	õ �N�N 4§<¢<¡>¤>Ñ2Ô2Ñ3Ô3Ð3r-   Údc                 óÌ  ‡ ‡— |€dS t          |t          ¦  «        st          dt          |¦  «        › �¦  «        ‚t                               t          ¦  «        }d|_        d|_        |                     dd¦  «        |_	        |                     dd¦  «        }g }|r‡| 
                    d¦  «        D ]q}|                     ¦   «         dk    r |                     t          j        ¦  «         Œ:|                     ¦   «         dk    r|                     t          j        ¦  «         Œr||_        d	|v rhd
|v rdd|v r`t                               |                     d	d¦  «        |                     d
d¦  «        |                     dd¦  «        ¦  «        }||_        nd|_        |                     dd¦  «        �)ˆ ˆfd„|                     dg ¦  «        D ¦   «         |_        ng |_        |S )zö
        Recursively deserialize from_node metadata from dictionary data.
        It is used to deserialize the from_node field from serialized metadata.
        Please use constructor NodeSource(node, ...) to create a NodeSource object.
        NzExpected a dict, got rG   rM   rH   rd   r6   r7   r<   r=   r>   r_   rI   c                 óB   •— g | ]}‰                      |¦  «        xŠ®‰‘ŒS r@   )Ú
_from_dict)rg   ÚfnÚclsrp   s     €€r+   rh   z)NodeSource._from_dict.<locals>.<listcomp>   s:   ø€ ð %ð %ð %àØ!Ÿnšn¨RÑ0Ô0Ð0�FÐ=ð à=Ð=Ð=r-   )rP   rƒ   rR   rS   r   Ú__new__rL   rK   ÚgetrG   ÚsplitÚupperÚappendr    r6   r7   rH   rF   rJ   rI   )rŽ   r‰   Únode_sourceÚ
action_strÚactionsÚaction_namerJ   rp   s   `      @r+   rŒ   zNodeSource._from_dictÒ   s  øø€ ð ˆ9Ø�4å˜!�TÑ"Ô"ð 	DÝ Ð!B½¸a¹¼Ð!BÐ!BÑCÔCÐCõ !×(Ò(­Ñ4Ô4ˆð &*ˆÔ"Ø ˆÔð !"§¢ k°2Ñ 6Ô 6ˆÔð —U’U˜8 RÑ(Ô(ˆ
ØˆØð 	=Ø)×/Ò/°Ñ4Ô4ð =ð =�Ø×$Ò$Ñ&Ô&¨(Ò2Ð2Ø—N’NÕ#3Ô#:Ñ;Ô;Ð;Ð;Ø ×&Ò&Ñ(Ô(¨IÒ5Ð5Ø—N’NÕ#3Ô#;Ñ<Ô<Ð<øØ$ˆÔð �Qˆ;ˆ;˜8 q˜=˜=¨Z¸1¨_¨_Ý"×+Ò+Ø—’�f˜bÑ!Ô! 1§5¢5¨°2Ñ#6Ô#6¸¿º¸jÈ"Ñ8MÔ8Mñô ˆIð %.ˆKÔ!Ð!à$(ˆKÔ!ð �5Š5�˜dÑ#Ô#Ð/ð%ð %ð %ð %ð %àŸ%š% ¨RÑ0Ô0ð%ñ %ô %ˆKÔ!Ð!ð %'ˆKÔ!ØÐr-   )rM   N)r   )r2   r3   r4   r5   rF   rD   Ú__annotations__rQ   r	   rƒ   r   r   r   rC   Úpropertyr<   r=   rE   r>   rb   rj   ra   rv   ÚobjectÚboolry   rˆ   ÚclassmethodrŒ   r8   r-   r+   r   r   Y   s‰  € € € € € € ðð ð
%ð %ð %ð %ð %ñ %ô %ð %ð €N€N�NØÐ#Ô$Ð$Ð$Ñ$Ø�LÔ!Ð!Ð!Ñ!Ø˜
Ô#Ð#Ð#Ñ#Ø��S�Œ>˜DÑ Ð Ð Ñ Ø˜$‘JÐÐÑð
 ØMQð	1ð 1à�T‰kð1ð ð1ð Ð(¨$Ð/AÔ*BÐBÔCÀdÑJð	1ð
 
ð1ð 1ð 1ð 1ðB ð=�cð =ð =ð =ñ „Xð=ð ð?˜ð ?ð ?ð ?ñ „Xð?ð ðA˜#ð Að Að Añ „XðAð%˜#ð %ð %ð %ð %ð# Cð #ð #ð #ð #ð
ð  Sð °ð ð ð ð ð˜˜c 3˜hœð ð ð ð ð"1˜Fð 1 tð 1ð 1ð 1ð 1ð
4˜#ð 4ð 4ð 4ð 4ð ð4˜4  S œ>¨DÑ0ð 4°X¸lÔ5Kð 4ð 4ð 4ñ „[ð4ð 4ð 4r-   r   TÚenablec              #   ór   K  — t           }t                               ¦   «         }	 | a d V — |a |ad S # |a |aw xY wr@   )Úshould_preserve_node_metar$   rW   )r�   Úsaved_should_preserve_node_metaÚsaved_current_metas      r+   r   r   
  s_   è è € õ
 '@Ð#å%×*Ò*Ñ,Ô,Ðð*Ø$*Ð!Øˆˆˆà$CÐ!Ø)ˆˆˆøð %DÐ!Ø)ˆÐ)Ð)Ð)Ð)s   ¤0 °6Úpreserve_seq_nrc              #   ó8   K  — t           }	 | a dV — |a dS # |a w xY w)zm
    Temporarily enables or disables the preservation of node.meta["seq_nr"] in the
    tracing context.
    N©Ú_should_preserve_node_meta)r¢   Úsaveds     r+   Ú_preserve_node_seq_nrr§     s?   è è € õ '€Eð+Ø%4Ð"Øˆˆˆà%*Ð"Ð"Ð"ø UÐ"Ð*Ð*Ð*Ð*ó   ‹ •Ústackc                 ó�   — t           r>| rd                     | ¦  «        t          d<   d S t                               dd ¦  «         d S d S )NrM   Ústack_trace)rŸ   ri   r$   Úpop)r©   s    r+   r   r   *  sV   € õ !ð 2Øð 	2Ø*,¯'ª'°%©.¬.�L˜Ñ'Ð'Ð'õ ×Ò˜]¨DÑ1Ô1Ð1Ð1Ð1ð2ð 2r-   Úannotation_dictc              #   ót  K  — dt           v }t          j        t                                di ¦  «        ¦  «        }	 |s(t          t          t
          f         ¦   «         t           d<   t           d                              | ¦  «         dV — |r|t           d<   dS t           d= dS # |r|t           d<   nt           d= w xY w)aæ  
    Temporarily adds custom annotations to the current tracing context.
    The fx_node produced from this tracing context will have the
    custom annotations in node.metadata["custom"] field.

    This context manager allows you to insert arbitrary metadata into the PT2
    tracing system by updating the global `current_meta["custom"]` dictionary.
    The annotations are automatically reverted after the context exits.

    Gradient accumulation nodes will not be annotated.

    This is intended for advanced users who need to attach additional metadata to the fx nodes
    (e.g., for debugging, analysis, or external tooling) during export tracing.

    Note:
        This API is **not backward compatible** and may evolve in future releases.

    Note:
        This API is not compatible with fx.symbolic_trace or jit.trace. It's intended
        to be used with PT2 family of tracers, e.g. torch.export and dynamo.

    Args:
        annotation_dict (dict): A dictionary of custom key-value pairs to inject
            into the FX trace metadata.

    Example:
        After exiting the context, custom annotations are removed.

        >>> with annotate({"source": "custom_pass", "tag": 42}):
        ...     pass  # Your computation here
    ÚcustomN)r$   rW   r�   rƒ   rD   r   Úupdate)r­   Ú
has_customÚ
old_customs      r+   r   r   7  sÍ   è è € ðJ �\Ð)€JÝ”�<×+Ò+¨H°bÑ9Ô9Ñ:Ô:€Jð'Øð 	6Ý%)­#­s¨(¤^Ñ%5Ô%5�L˜Ñ"õ 	�XÔ×%Ò% oÑ6Ô6Ð6Øˆˆˆàð 	'à%/�L˜Ñ"Ð"Ð"å˜XÐ&Ð&Ð&øð	 ð 	'à%/�L˜Ñ"Ð"å˜XÐ&Ð&Ð&Ð&Ð&s   ºAB  Â B7Ú _region_activation_memory_budgetrN   c                 ó˜   — | j                              d¦  «        }t          |t          ¦  «        sdS |                     t          ¦  «        S )zý
    Read the ``region_activation_memory_budget`` annotation off an FX node,
    returning ``None`` if absent. The value is written only by
    ``torch.autograd.graph.region_activation_memory_budget``, which validates it
    and stores a ``float``.
    r¯   N)rV   r�   rP   rƒ   ÚMEMORY_BUDGET_ANNOTATION_KEY)rN   r¯   s     r+   Ú_get_memory_budget_annotationr¶   u  sA   € ð ŒY�]Š]˜8Ñ$Ô$€FÝ�f�dÑ#Ô#ð ØˆtØ�:Š:Õ2Ñ3Ô3Ð3r-   c                 ó˜   ‡ ‡‡— ddl mŠ ddlmŠ dt          t
          t          f         dt          t
          t          f         fˆˆ ˆfd„}|S )a&  
    A decorator that wraps a function with the annotate context manager.
    Use this when you want to annotate an entire function instead of a specific code block.

    Note:
        This API is **not backward compatible** and may evolve in future releases.

    Note:
        This API is not compatible with fx.symbolic_trace or jit.trace. It's intended
        to be used with PT2 family of tracers, e.g. torch.export and dynamo.

    Args:
        annotation_dict (dict): A dictionary of custom key-value pairs to inject
            into the FX trace metadata for all operations in the function.

    Example:
        All operations in my_function will have {"pp_stage": 1} in their metadata.

        >>> @annotate_fn({"pp_stage": 1})
        ... def my_function(x):
        ...     return x + 1
    r   )Úwraps)Ú_register_stack_trace_anchorÚfuncr)   c                 óz   •‡ —  ‰‰ ¦  «          ‰‰ ¦  «        dt           dt           dt           fˆˆ fd„¦   «         }|S )NÚargsÚkwargsr)   c                  óf   •— t          ‰¦  «        5   ‰| i |¤Žcd d d ¦  «         S # 1 swxY w Y   d S r@   )r   )r¼   r½   r­   rº   s     €€r+   Úwrapperz/annotate_fn.<locals>.decorator.<locals>.wrapper¨  s‰   ø€ õ ˜/Ñ*Ô*ð -ð -Ø�t˜TÐ, VÐ,Ð,ð-ð -ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð -ð -s   ‘&¦*­*)r   )rº   r¿   r¹   r­   r¸   s   ` €€€r+   Ú	decoratorzannotate_fn.<locals>.decorator   sh   øø€ ð 	%Ð$ TÑ*Ô*Ð*à	ˆˆt‰Œð	-�3ð 	-­#ð 	-µ#ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ñ 
Œð	-ð ˆr-   )Ú	functoolsr¸   Útorch.fx.proxyr¹   r   r   r   )r­   rÀ   r¹   r¸   s   ` @@r+   r   r   ‚  s{   øøø€ ð4  ÐÐÐÐÐà;Ð;Ð;Ð;Ð;Ð;ð�¥¥R Ô(ð ­Xµb½"°fÔ-=ð ð ð ð ð ð ð ð ð" Ðr-   c              #   óô   K  — dt           v }t                                dd¦  «        }| rt          ¦   «          	 d V — |r|t           d<   d S t          ¦   «          d S # |r|t           d<   w t          ¦   «          w xY w)NÚautograd_backwardF)r$   r�   Ú_mark_autograd_backwardÚ_reset_autograd_backward)r�   Úhad_autograd_backwardÚold_autograd_backwards      r+   Ú_set_autograd_backwardrÉ   ´  s¢   è è € ð 0µ<Ð?ÐÝ(×,Ò,Ð-@À%ÑHÔHÐàð "ÝÑ!Ô!Ð!ð'Øˆˆˆà ð 	'Ø0E�LÐ,Ñ-Ð-Ð-å$Ñ&Ô&Ð&Ð&Ð&øð !ð 	'Ø0E�LÐ,Ñ-Ð-å$Ñ&Ô&Ð&Ð&øøøs   ¸A ÁA7c                  ó   — dt           d<   d S )NTrÄ   ©r$   r8   r-   r+   rÅ   rÅ   Æ  s   € ð )-…LÐ$Ñ%Ð%Ð%r-   c                  ó<   — t                                dd ¦  «         d S )NrÄ   )r$   r¬   r8   r-   r+   rÆ   rÆ   Í  s!   € õ ×ÒÐ(¨$Ñ/Ô/Ð/Ð/Ð/r-   Úseq_nrc                 ó²   — t           rOt                               dg ¦  «        | gz   t          d<   t                               dd¦  «        dz   t          d<   d S d S )NÚgrad_fn_seq_nrÚ
in_grad_fnr   r   )rŸ   r$   r�   )rÍ   s    r+   r   r   Ô  sj   € õ !ð Kå)5×)9Ò)9Ð:JÈBÑ)OÔ)OØðS
ñ *
�Ð%Ñ&õ &2×%5Ò%5°lÀAÑ%FÔ%FÈÑ%J��\Ñ"Ð"Ð"ðKð Kr-   c                  ó  — t           rwt                               dd¦  «        } | dk    rt          d| › �¦  «        ‚| dk    rt          d= t          d= d S | dz
  t          d<   t          d         d d…         t          d<   d S d S )NrÐ   r   z Expected current_level > 0, got r   rÏ   r_   )rŸ   r$   r�   rR   )Úcurrent_levels    r+   r   r   à  s¡   € õ
 !ð 	QÝ$×(Ò(¨°qÑ9Ô9ˆØ˜AÒÐÝ Ð!SÀMÐ!SÐ!SÑTÔTÐTØ˜AÒÐÝ˜\Ð*ÝÐ-Ð.Ð.Ð.à)6¸Ñ):�L˜Ñ&Ý-9Ð:JÔ-KÈCÈRÈCÔ-P�LÐ)Ñ*Ð*Ð*ð	Qð 	Qr-   c                  ó¢   — t           rt                               dd¦  «        gS t          j        t          j        ¦   «         d d…         ¦  «        S )Nr«   rM   r_   )rŸ   r$   r�   Ú	tracebackÚformat_listÚextract_stackr8   r-   r+   r   r   ñ  sI   € å ð EÝ× Ò  °Ñ3Ô3Ð4Ð4õ Ô$¥YÔ%<Ñ%>Ô%>¸sÀ¸sÔ%CÑDÔDÐDr-   c                  ó   — t           S r@   )rŸ   r8   r-   r+   r   r   ú  s   € å$Ð$r-   c                  ó   — t           S r@   r¤   r8   r-   r+   Ú_is_preserving_node_seq_nrrÙ   ÿ  s   € Ý%Ð%r-   rM   rG   c              #   óÖ   K  — t           r[| j        rTt          }	 | j                             ¦   «         at	          | |t
          j        ¦  «        gt          d<   d V — |ad S # |aw xY wd V — d S )NrI   )rŸ   rV   r$   rW   r   r    r6   )rN   rG   Ú
saved_metas      r+   r   r     s‡   è è € õ !ð  T¤Yð Ý!ˆ
ð	&Øœ9Ÿ>š>Ñ+Ô+ˆLõ ˜4 Õ,<Ô,CÑDÔDð)�L˜Ñ%ð ˆEˆEˆEà%ˆLˆLˆLø˜:ˆLÐ%Ð%Ð%Ð%àˆˆˆˆˆs   ™AA ÁA"c                  ó   — t           S r@   rË   r8   r-   r+   r   r     s   € åÐr-   c              #   ó8   K  — t           }	 | a dV — |a dS # |a w xY w)zž
    Set the currently replay node. If `current_replay_node` is not None,
    then we're re-generating the `current_replay_node` in FunctionalTensorMode.
    N©r%   )rN   Úsaved_current_replay_nodes     r+   r"   r"     sA   è è € õ !4Ðð8Ø"ÐØˆˆˆà7ÐÐÐøÐ7ÐÐ7Ð7Ð7Ð7r¨   c                  ó   — t           S )z'
    Get the currently replay node
    rÞ   r8   r-   r+   r#   r#   0  s
   € õ
 Ðr-   r<   c              #   ó’   K  — t          t          dd¦  «        }	 | t          _        dV — |t          _        dS # |t          _        w xY w)a  
    Set the name of the subgraph currently being sub-compiled by regional
    inductor (a scooped-out region or an invoke_subgraph submodule). Used to
    tag trace_structured records so artifacts emitted from different
    sub-compiles within the same frame can be distinguished.
    ÚvalueN)ÚgetattrÚ$_regional_inductor_subgraph_name_tlsrâ   )r<   r¦   s     r+   Ú$_set_regional_inductor_subgraph_namerå   8  sU   è è € õ Õ8¸'À4ÑHÔH€Eð;Ø59Õ,Ô2Øˆˆˆà5:Õ,Ô2Ð2Ð2ø°UÕ,Ô2Ð:Ð:Ð:Ð:s	   š8 ¸Ac                  ó.   — t          t          dd¦  «        S )zf
    Get the name of the subgraph currently being sub-compiled by regional
    inductor, or None.
    râ   N)rã   rä   r8   r-   r+   Ú$_get_regional_inductor_subgraph_namerç   I  s   € õ Õ7¸À$ÑGÔGÐGr-   rU   c           	      ó"  — 	 i }| j         D ]7}|j        dk    r*d|j        v rd„ |j        d         D ¦   «         ng ||j        <   Œ8|S # t          $ r?}t          dddt          |¦  «        t          j        ¦   «         dœ¦  «         i cY d}~S d}~ww xY w)	za
    Given an fx.Graph, return a json that contains the provenance information of each node.
    Úcall_functionrI   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r8   ru   )rg   Úsources     r+   rh   z-get_graph_provenance_json.<locals>.<listcomp>\  s"   € ÐKÐKÐK¨&�V—^’^Ñ%Ô%ÐKÐKÐKr-   ÚinductorÚprovenance_tracking_errorr!   )ÚfunctionÚ	error_msgr«   N)	ÚnodesÚoprV   r<   Ú	Exceptionr   rD   rÔ   Ú
format_exc)rU   Úprovenance_tracking_jsonrN   Úes       r+   r!   r!   R  sÜ   € ð
Ø#%Ð Ø”Kð 	ð 	ˆDØŒw˜/Ò)Ð)ð # d¤iÐ/Ð/ð LÐK°D´I¸kÔ4JÐKÑKÔKÐKàð )¨¬Ñ3øð
 (Ð'øÝð ð ð õ 	ØØ'à7Ý  ™VœVÝ(Ô3Ñ5Ô5ðð ñ	
ô 	
ð 	
ð ˆ	ˆ	ˆ	ˆ	ˆ	ˆ	øøøøðøøøs   ‚AA Á
BÁ4B	ÂBÂ	BÚgmc                 óú   ‡— t          | t          ¦  «        st          dt          | ¦  «        › �¦  «        ‚dt          dt          t
                   fˆfd„Šd                     d„  ‰| ¦  «        D ¦   «         ¦  «        S )NzExpected GraphModule, got rö   r)   c           	      ó¢  •— g }| j         j        D ]¾}t          |d¦  «        rH|j                             dd ¦  «        r-|                     |j        |j        |j        d         f¦  «         |j        dk    rYt          t          | |j
        ¦  «        t          ¦  «        r1|                      ‰t          | |j
        ¦  «        ¦  «        ¦  «         Œ¿|S )NrV   r¯   Úget_attr)rU   rð   ÚhasattrrV   r�   r“   rñ   r<   rP   rã   r=   r   )rö   Úcustom_metadatarN   Úhelpers      €r+   rü   z$_get_custom_metadata.<locals>.helpert  sÕ   ø€ ØˆØ”H”Nð 		ð 		ˆDÝ�t˜VÑ$Ô$ð R¨¬¯ª°xÀÑ)FÔ)Fð RØ×&Ò&¨¬°´¸D¼IÀhÔ<OÐ'PÑQÔQÐQØŒw˜*Ò$Ð$­Ý˜˜DœKÑ(Ô(­+ñ*ô *Ð$ð  ×&Ò&à�F�7 2 t¤{Ñ3Ô3Ñ4Ô4ñô ð øð Ðr-   ú
c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r@   )rD   )rg   Úxs     r+   r�   z'_get_custom_metadata.<locals>.<genexpr>‚  s(   è è € Ð0Ð0 •S˜‘V”VÐ0Ð0Ð0Ð0Ð0Ð0r-   )rP   r   rR   rS   rQ   r   ri   )rö   rü   s    @r+   Ú_get_custom_metadatar   p  sŽ   ø€ Ý�b�+Ñ&Ô&ð FÝÐD½$¸r¹(¼(ÐDÐDÑEÔEÐEð•;ð ¥4­¤9ð ð ð ð ð ð ð �9Š9Ð0Ð0 V V¨B¡Z¤ZÐ0Ñ0Ô0Ñ0Ô0Ð0r-   c                 ór  ‡— t          | t          ¦  «        r| g}n| }t          t          ¦  «        Š|D ]X}|j        j        D ]I}|j        dk    r<|j                             d¦  «        }|� ‰|          	                    |j
        ¦  «         ŒJŒYˆfd„t          ‰                     ¦   «         ¦  «        D ¦   «         S )aå  
    Group call_function nodes by seq_nr, order by seq_nr value,
    and return a list of lists of node names (sorted alphabetically).

    Args:
        gm: A single GraphModule or a list of GraphModules to process.
            When a list is provided, nodes from all graphs are grouped together.

    Returns:
        A list of lists, where each inner list contains node names that share the same seq_nr,
        sorted alphabetically. The outer list is ordered by seq_nr value.
    ré   rÍ   Nc                 ó:   •— g | ]}t          ‰|         ¦  «        ‘ŒS r8   )r…   )rg   r~   Úseq_nr_dicts     €r+   rh   z._get_ordered_seq_nr_groups.<locals>.<listcomp>¢  s%   ø€ ÐGÐGÐG q�F�;˜q”>Ñ"Ô"ÐGÐGÐGr-   )rP   r   r   rQ   rU   rð   rñ   rV   r�   r“   r<   r…   Úkeys)rö   ÚgmsÚgraph_modulerN   rÍ   r  s        @r+   Ú_get_ordered_seq_nr_groupsr  …  sÎ   ø€ õ  �"•kÑ"Ô"ð Øˆdˆˆàˆå(3µDÑ(9Ô(9€KØð :ð :ˆØ Ô&Ô,ð 	:ð 	:ˆDØŒw˜/Ò)Ð)ØœŸš xÑ0Ô0�ØÐ%Ø Ô'×.Ò.¨t¬yÑ9Ô9Ð9øð		:ð HÐGÐGÐG­F°;×3CÒ3CÑ3EÔ3EÑ,FÔ,FÐGÑGÔGÐGr-   )T)r)   N)rM   )MrW   ÚloggingÚ	threadingrÔ   Úcollectionsr   Úcollections.abcr   r   Ú
contextlibr   Úenumr   Útypingr   r	   r
   r   r   Útorch._utils_internalr   Ú_compatibilityr   rU   r   r  r   rN   r   r   r   Ú	getLoggerr2   ÚlogÚ__all__r$   rƒ   rD   r˜   r%   Úlocalrä   rŸ   r¥   ÚGRADIENT_ACC_SPECIAL_STACKr&   r,   r    r   r›   r   r§   rQ   r   r   rµ   Úfloatr¶   r   rÉ   rÅ   rÆ   rE   r   r   r   r   rÙ   r   r   r"   r#   rå   rç   r!   r   r  r8   r-   r+   ú<module>r     s  ðØ €€€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;à 0Ð 0Ð 0Ð 0Ð 0Ð 0à )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð ð €Yˆt�_„_€Ø€WˆT�]„]€à€gÔ˜Ñ!Ô!€ðð ð €ð$  "€ˆd�3˜�8ŒnÐ !Ð !Ñ !Ø#'Ð �T˜D‘[Ð 'Ð 'Ñ 'ð (7 y¤Ñ'8Ô'8Ð $à!Ð à"Ð ð Cð ð 46Ð �t˜C  c¨3 h¤Ð/Ô0Ð 5Ð 5Ñ 5ð2 sð 2°d¸3À¸8´nð 2Èð 2ð 2ð 2ð 2ð € eÐ,Ñ,Ô,ðð ð ð ð �tñ ô ñ -Ô,ðð € eÐ,Ñ,Ô,ðmð mð mð mð mñ mô mñ -Ô,ðmð` € eÐ,Ñ,Ô,Øð*ð *˜tð *¨x¸¬~ð *ð *ð *ñ „ñ -Ô,ð*ð ð+ð +¨4ð +¸8ÀD¼>ð +ð +ð +ñ „ð+ð € eÐ,Ñ,Ô,ð	2˜4 œ9ð 	2¨ð 	2ð 	2ð 	2ñ -Ô,ð	2ð € eÐ,Ñ,Ô,Øð2'˜d 3¨ 8œnð 2'°¸$´ð 2'ð 2'ð 2'ñ „ñ -Ô,ð2'ðr  BÐ ð
4¨ð 
4°¸±ð 
4ð 
4ð 
4ð 
4ð € eÐ,Ñ,Ô,ð.Ø˜#˜s˜(”^ð.àˆx˜˜B˜ÔÐ  (¨2¨r¨6Ô"2Ð2Ô3ð.ð .ð .ñ -Ô,ð.ðb ð'ð ' 4ð '°8¸D´>ð 'ð 'ð 'ñ „ð'ð" € eÐ,Ñ,Ô,ð-ð -ð -ñ -Ô,ð-ð € eÐ,Ñ,Ô,ð0ð 0ð 0ñ -Ô,ð0ð € eÐ,Ñ,Ô,ðK˜sð K tð Kð Kð Kñ -Ô,ðKð € eÐ,Ñ,Ô,ðQð Qð Qñ -Ô,ðQð  € eÐ,Ñ,Ô,ðE�d˜3”ið Eð Eð Eñ -Ô,ðEð € eÐ,Ñ,Ô,ð% ð %ð %ð %ñ -Ô,ð%ð& Dð &ð &ð &ð &ð € eÐ,Ñ,Ô,Øðð ˜4ð ¨Cð ¸À$¼ð ð ð ñ „ñ -Ô,ðð* € eÐ,Ñ,Ô,ð˜$˜s C˜xœ.ð ð ð ñ -Ô,ðð € eÐ,Ñ,Ô,Øð8 $¨¡+ð 8°(¸4´.ð 8ð 8ð 8ñ „ñ -Ô,ð8ð € eÐ,Ñ,Ô,ð ¨¡ð ð ð ñ -Ô,ðð € eÐ,Ñ,Ô,Øð;¨s°T©zð ;¸hÀt¼nð ;ð ;ð ;ñ „ñ -Ô,ð;ð € eÐ,Ñ,Ô,ðH¨c°D©jð Hð Hð Hñ -Ô,ðHð € eÐ,Ñ,Ô,ð Uð ¨t°C¸°H¬~ð ð ð ñ -Ô,ðð:1˜[ð 1¨Sð 1ð 1ð 1ð 1ð*HØ�d˜;Ô'Ñ'ðHà	ˆ$ˆsŒ)„_ðHð Hð Hð Hð Hð Hr-   