Ë
    L²jò@  ã                  ó  — U d dl mZ d dlZ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
 d dlmZmZ d dlmZmZ d dlZd dlZd dlmZ d dlmZ d dlmc mZ d dlmZ d dlmZ d d	lmZ d
dl m!Z!m"Z"m#Z# d
dl$m%Z% d
dl&m'Z'm(Z(m)Z) erd dl*m+Z+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1  ed«      Z2 ed«      Z3 ejh                  e5«      Z6d&d„Z7ed'd„«       Z8e#d(d„«       Z9	 d)	 	 	 	 	 	 	 	 	 d*d„Z:	 	 	 	 d+d„Z;e#d,d„«       Z< G d„ dejz                  «      Z>e#	 	 	 	 	 	 d-d„«       Z?e#d.d„«       Z@d/d„ZAej„                  j†                  ZCeCjˆ                  eCjŠ                  eCjŒ                  eCjŽ                  eCj�                  eCj’                  eCj”                  eCj–                  eCj˜                  eCjš                  eCjœ                  eCjž                  eCj                   eCj¢                  j¤                  eCj¢                  j¦                  eCj¨                  eCjª                  eCj¬                  eCj®                  eCj°                  eCj²                  eCj´                  hZ[ ee[«      Z[e#d,d„«       Z\	 	 	 	 	 	 d0d„Z]	 	 	 	 	 	 d1d „Z^d a_d!e`d"<   d2d#„Za	 	 	 	 	 	 	 	 	 	 	 	 d3d$„Zb	 d4	 	 	 	 	 	 	 d5d%„Zcy)6é    )ÚannotationsN)Úcontextmanager)Úpartial)ÚAnyÚTYPE_CHECKING)Ú	ParamSpecÚTypeVar)ÚSymInt)Úget_decompositions)Úbind_symbolsé   )Úaot_functionÚ
aot_moduleÚmake_boxed_compiler)Ústrip_overloads)Údefault_partitionÚ
draw_graphÚ#min_cut_rematerialization_partition)ÚCallableÚ	GeneratorÚSequence)ÚNode)ÚIntLikeTypeÚ_PÚ_Rc                ó   — | j                   j                  dt        j                  j                  j
                  ¬«      D ]+  }t        j                  j                  j                  |_        Œ- | j                  «        | S )NÚcall_function©ÚopÚtarget)	ÚgraphÚ
find_nodesÚtorchÚopsÚatenÚ_to_copyÚtor    Ú	recompile)Úfx_gÚnodes     úY/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/_functorch/compilers.pyÚ_canonicalizer,   /   s`   € Ø—
‘
×%Ñ%Ø¤5§9¡9§>¡>×#:Ñ#:ð &ó ò (ˆô —i‘i—n‘n×'Ñ'ˆ�ð(ð 	‡N�NÔØ€Kó    c               #  óÚ   K  — t         j                  j                  d«      } 	 d –— t         j                  j                  | «       y # t         j                  j                  | «       w xY w­w)NF)r#   Ú_CÚ_jit_set_autocast_mode)Úold_jit_autocast_flags    r+   Ú_disable_jit_autocastr2   8   sM   è ø€ ô "ŸH™H×;Ñ;¸EÓBÐð?Ûô 	�‰×'Ñ'Ð(=Õ>øŒ�‰×'Ñ'Ð(=Õ>üs   ‚ A+£A § A+Á!A(Á(A+c                óD  — t        «       5  t        | «       | j                  j                  dt        j
                  j                  j                  ¬«      D ]l  }t        |j                  «      dk(  sŒt        |j                  «      dk(  sŒ5d|j                  v sŒDt        j
                  j                  j                  |_        Œn | j                  j                  D ]X  }i }|j                  j                  «       D ]0  \  }}t        |t        j                   «      r|j"                  }|||<   Œ2 ||_
        ŒZ | j                  j%                  «        | j'                  «        t        j(                  j+                  | «      }t        j,                  j/                  |j                  «       t        j(                  j1                  |j3                  «       «      }t        j(                  j5                  |«      }t7        d„ |D «       «      s ||Ž  ddd«       |S # 1 sw Y   S xY w)a  
    Compiles the :attr:`fx_g` with Torchscript compiler.

    .. warning::
        This API is experimental and likely to change.

    Args:
        fx_g(fx.GraphModule): The input Fx graph module to be compiled.

    Returns:
        Torch scripted model.
    r   r   r   Údtypec              3  ód   K  — | ](  }t        |t        j                  j                  «      –— Œ* y ­w©N)Ú
isinstancer#   Ú_subclassesÚ
FakeTensor)Ú.0Úts     r+   ú	<genexpr>zts_compile.<locals>.<genexpr>n   s#   è ø€ ÒMÀ1”:˜a¤×!2Ñ!2×!=Ñ!=×>ÑMùs   ‚.0N)r2   r   r!   r"   r#   r$   r%   r&   ÚlenÚargsÚkwargsr'   r    ÚnodesÚitemsr7   ÚdeviceÚtypeÚlintr(   ÚjitÚscriptr/   Ú_jit_pass_remove_mutationÚfreezeÚevalÚoptimize_for_inferenceÚany)r)   Úinpsr*   Ú
new_kwargsÚkÚvÚfs          r+   Ú
ts_compilerQ   C   sš  € ô 
Ó	 ñ Ü˜Ôà—J‘J×)Ñ)Ø¤u§y¡y§~¡~×'>Ñ'>ð *ó 
ò 	0ˆDô �4—9‘9‹~ Ó"¤s¨4¯;©;Ó'7¸1Ó'<ÀÈDÏKÉKÒAWÜ#Ÿi™iŸn™n×/Ñ/�•ð		0ð —J‘J×$Ñ$ò 	%ˆDØˆJØŸ™×)Ñ)Ó+ò "‘��1Ü˜a¤§¡Ô.ØŸ™�AØ !�
˜1’ð"ð %ˆD�Kð	%ð 	�
‰
�‰Ôà�‰Ôä�I‰I×Ñ˜TÓ"ˆô 	�‰×*Ñ*¨1¯7©7Ô3ä�I‰I×Ñ˜QŸV™V›XÓ&ˆÜ�I‰I×,Ñ,¨QÓ/ˆÜÑMÈÔMÔMÙˆt‰H÷;ð< €H÷=ð< €Hús   ‹A&HÁ2HÂHÂE1HÈHc                óL   — t        | j                  «       t        | ||¬«       | S )N)Ú
clear_meta)ÚprintÚcoder   )r)   Ú_ÚnamerS   s       r+   Ú_draw_graph_compilerX   s   s!   € ô 
ˆ$�)‰)ÔÜˆt�T jÕ1Ø€Kr-   c                ó6   — t        t        t        | ¬«      «      S )N©rW   )r   r   rX   rZ   s    r+   Údraw_graph_compiler[   {   s   € ô œwÔ':ÀÔFÓGÐGr-   c                ó   — | S )zÆ
    Returns the :attr:`fx_g` Fx graph module as it is. This is a no-op compiler
    and can be used to check accuracy.

    .. warning::
        This API is experimental and likely to change.

    © ©r)   rV   s     r+   Únopr_   �   s	   € ð €Kr-   c                  óB   ‡ — e Zd Zdddœ	 	 	 	 	 	 	 dˆ fd„Zdˆ fd„Zˆ xZS )ÚDebugInterpreterNT©Úinitial_envÚenable_io_processingc               óZ   •— t        | j                  g|¢­Ž | _        t        ‰| �  |||dœŽS )Nrb   )r   ÚmoduleÚsymbol_mappingÚsuperÚrun)Úselfrc   rd   r>   Ú	__class__s       €r+   ri   zDebugInterpreter.run�   s>   ø€ ô +à�K‰Kð
ð ò
ˆÔô
 ‰w‰{Ø˜{ÐAUò
ð 	
r-   c                ó  •‡ ‡
‡‡‡— dˆ fd„Šd	ˆfd„Šd
ˆfd„Š
dˆ
ˆfd„}t         ‰‰ �  |«      }d|j                  v rÇt        j                  |j                  d   «      \  }}t        j                  |«      \  }}t        |«      t        |«      k7  r"t        t        |«      › dt        |«      › �«      ‚t        t        t        |«      «      ||«      D ]/  \  Š}}	t        |	t        j                  «      sŒ" |||	ˆˆ fd„«       Œ1 |S )Nc                óö   •— t        | t        «      s| S t        j                  | j                  j
                  j                  ‰j                  «      «      }|j                  st        d|› �«      ‚t        |«      S )Nzexpected r to be a number, got )r7   r
   ÚsympyÚexpandr*   ÚexprÚxreplacerg   Ú	is_numberÚAssertionErrorÚint)ÚniÚrrj   s     €r+   Úsubst_symintz/DebugInterpreter.run_node.<locals>.subst_symintŸ   s\   ø€ Ü˜b¤&Ô)Ø�	Ü—‘˜RŸW™WŸ\™\×2Ñ2°4×3FÑ3FÓGÓHˆAØ—;’;Ü$Ð'FÀqÀcÐ%JÓKÐKÜ�q“6ˆMr-   c                ó,   •— t        ˆfd„| D «       «      S )Nc              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wr6   r]   )r:   ru   rw   s     €r+   r<   zHDebugInterpreter.run_node.<locals>.subst_symint_tuple.<locals>.<genexpr>¨   s   øè ø€ Ò8¨b™ b×)Ñ8ùs   ƒ)Útuple)Únisrw   s    €r+   Úsubst_symint_tuplez5DebugInterpreter.run_node.<locals>.subst_symint_tuple§   s   ø€ ÜÓ8°CÔ8Ó8Ð8r-   c                óø   •—  ‰| j                  «       «      dkD  r`t        | j                  «      D ]H  } ‰| j                  |«      «      |j                  |«      k7  sŒ- ‰| j	                  |«      «      dkD  sŒH y y)Nr   r   FT)ÚnumelÚrangeÚndimÚstrideÚsize)ÚaÚbÚidxrw   s      €r+   Úcheck_significant_stridesz<DebugInterpreter.run_node.<locals>.check_significant_stridesª   sg   ø€ Ù˜AŸG™G›IÓ&¨Ò*Ü  §¡›=ò %�Cá$ Q§X¡X¨c£]Ó3°q·x±xÀ³}ÓDÙ(¨¯©°«Ó5¸Ó9á$ð%ð r-   c           
     ód  •— t        |«      st        dt        |«      › �«      ‚| j                  |j                  k7  r,t         |«       › d| j                  › d|j                  › �«      ‚ ‰| j	                  «       «      |j	                  «       k7  rKt         |«       › d| j	                  «       › d ‰| j	                  «       «      › d|j	                  «       › �«      ‚ ‰| |«      }|sKt         |«       › d| j                  «       › d ‰| j                  «       «      › d|j                  «       › �«      ‚y )Nz"expected desc to be callable, got z: ú != z aka )Úcallablers   rC   r4   r‚   r�   )ÚnvÚrvÚdescÚsame_stridesr†   r|   s       €€r+   Úcheckz(DebugInterpreter.run_node.<locals>.check´   s  ø€ Ü˜D”>Ü$Ð'IÌ$ÈtË*ÈÐ%VÓWÐWØ�x‰x˜2Ÿ8™8Ò#Ü$©« x¨r°"·(±(°¸4ÀÇÁ¸zÐ%JÓKÐKÙ! "§'¡'£)Ó,°·±³	Ò9Ü$Ù“v�h˜b §¡£ ¨5Ñ1CÀBÇGÁGÃIÓ1NÐ0OÈtÐTV×T[ÑT[ÓT]ÐS^Ð_óð ñ 5°R¸Ó<ˆLÙÜ$Ù“v�h˜b §¡£ ¨UÑ3EÀbÇiÁiÃkÓ3RÐ2SÐSWÐXZ×XaÑXaÓXcÐWdÐeóð ð  r-   Úvalrˆ   c                 ó(   •— d‰ › d‰j                   › �S )Nzoutput z where )rg   )Úirj   s   €€r+   ú<lambda>z+DebugInterpreter.run_node.<locals>.<lambda>Ò   s   ø€ ¨°¨s°'¸$×:MÑ:MÐ9NÐ&O€ r-   )ru   r   Úreturnrt   )r{   ztuple[IntLikeType, ...]r“   ztuple[int, ...])rƒ   útorch.Tensorr„   r”   r“   Úbool)rŠ   r”   r‹   r”   rŒ   zCallable[[], str]r“   ÚNone)rh   Úrun_nodeÚmetaÚpytreeÚtree_flattenr=   rs   Úzipr   r7   r#   ÚTensor)rj   ÚnrŽ   rv   Ún_valsÚ_n_specÚr_valsÚ_r_specrŠ   r‹   r†   r‘   rw   r|   rk   s   `         @@@@€r+   r—   zDebugInterpreter.run_nodež   sá   ý€ õ	õ	9õ	ö	ô ‰GÑ˜QÓˆØ�A—F‘F‰?Ü$×1Ñ1°!·&±&¸±-Ó@‰OˆF�GÜ$×1Ñ1°!Ó4‰OˆF�Gô �6‹{œc &›kÒ)Ü$¬¨F« }°D¼¸V»¸Ð%FÓGÐGÜ ¤¤s¨6£{Ó!3°V¸VÓDò Q‘	��2�rÜ! "¤e§l¡lÔ3ØÙ�b˜"ÔOÕPðQð ˆr-   )r>   r   rc   zdict[Node, Any] | Nonerd   r•   r“   r   )r�   r   r“   r   )Ú__name__Ú
__module__Ú__qualname__ri   r—   Ú__classcell__)rk   s   @r+   ra   ra   Ž   s@   ø„ ð /3Ø%)ñ	
àð
ð ,ð
ð #ð	
ð
 
õ
÷5ñ 5r-   ra   c                ó,   — t        | «      j                  S )z¨
    Returns a (slow) interpreter over the FX graph module that also checks
    various debugging properties (e.g., that tracing strides matched real
    strides.)
    )ra   ri   r^   s     r+   Ú	debug_nopr§   Ö   s   € ô ˜DÓ!×%Ñ%Ð%r-   c                ó´   — t        | «       t        j                  j                  | «      }t        j                  j	                  |j                  «       «      }|S r6   )r   r#   rE   rF   rH   rI   )r)   rV   rP   s      r+   Úsimple_ts_compiler©   â   s=   € ä�DÔÜ�	‰	×Ñ˜Ó€AÜ�	‰	×Ñ˜Ÿ™›Ó"€AØ€Hr-   c                ó"   — t        | t        «      S r6   )r   r©   )rP   s    r+   Únnc_jitr«   ê   s   € Ü˜Ô,Ó-Ð-r-   c                ó0   — t        | j                  «       | S r6   )rT   rU   r^   s     r+   Úprint_compiler­     s   € ä	ˆ$�)‰)ÔØ€Kr-   c                óÊ   — t         t         t        t        dœ}|j                  |«       t	        | t
        j                  j                  «      rt        | fi |¤ŽS t        | fi |¤ŽS )a~  
    Wrapper function over :func:`aot_function` and :func:`aot_module` to perform
    memory efficient fusion. It uses the
    :func:`min_cut_rematerialization_partition` partitioner to perform efficient
    recomputation. It uses NVFuser to compile the generated forward and backward
    graphs.

    .. warning::
        This API is experimental and likely to change.

    Args:
        fn (Union[Callable, nn.Module]): A Python function or a ``nn.Module``
            that takes one or more arguments. Must return one or more Tensors.
        **kwargs: Any other overrides you want to make to the settings

    Returns:
        Returns a ``Callable``  or ``nn.Module`` that retains the eager behavior
        of the original :attr:`fn`, but whose forward and backward graphs have
        gone through recomputation optimizations, and the graphs have been
        compiled with nvfuser.

    ©Úfw_compilerÚbw_compilerÚpartition_fnÚdecompositions)
rQ   r   Údefault_decompositionsÚupdater7   r#   ÚnnÚModuler   r   )Úfnr?   Úconfigs      r+   Úmemory_efficient_fusionrº     sW   € ô6 "Ü!Ü;Ü0ñ	€Fð ‡M�M�&ÔÜ�"”e—h‘h—o‘oÔ&Ü˜"Ñ' Ñ'Ð'ä˜BÑ) &Ñ)Ð)r-   c                óè   — | j                  d«       t        d|D �cg c]  }|j                  |j                  f‘Œ c}› d�«       ddlm}   |«       j                  «       |Ž  t        | |«      S c c}w )NÚfooaQ  
##############################################################
# To minimize FX graph, copy and paste the below and run it  #
##############################################################

import torch
import torch.fx as fx
from functorch.compile import minifier, check_nvfuser_subprocess, check_nvfuser_correctness_subprocess

inps = a?  
inps = [torch.ones(shape, dtype=dtype, device='cuda') for (shape, dtype) in inps]
from foo import FxModule
mod = FxModule().cuda()

with torch.jit.fuser("fuser2"):
  # check_nvfuser_subprocess can be replaced with check_nvfuser_correctness_subprocess
  minifier(fx.symbolic_trace(mod), inps, check_nvfuser_subprocess)
r   )ÚFxModule)Ú	to_folderrT   Úshaper4   r¼   r½   ÚcudarQ   )r)   rL   r‘   r½   s       r+   Údebug_compilerÁ   9  sq   € ð 	‡N�N�5ÔÜ	ð	ð &*Ö* ˆ!�'‰'�1—7‘7Ò	Ò*Ð+ð ,ð	ôõ* à�HƒJ‡O�OÓ�tÑä�d˜DÓ!Ð!ùò 	+s   œA/
rt   Úgraph_indexc                óJ  — g }t        | d«      5 }t        j                  |«      }g }|D ]á  }t        |«      dk(  r|} |t	        j                  «       «      }n£|\  }}}}	}
|	t
        j                  t
        j                  t
        j                  t
        j                  t
        j                  t
        j                  t        t        hv rt        j                  dd||	|
¬«      }nt        j                  ||	|
¬«      }|j                  |«       Œã 	 ddd«       |S # 1 sw Y   |S xY w)zZ
    Return a random input for the given inputs meta generated from _save_fx_default.
    Úrbr   r   )r4   rB   N)ÚopenÚpickleÚloadr=   Úrandomr#   rt   Úint32Úint64r•   Úuint8ÚfloatÚrandintÚrandÚappend)Úinput_data_pathÚinputsrP   Úinputs_metar˜   rC   Úinput_r¿   Ú_strider4   rB   s              r+   Ú
get_inputsrÕ   \  s÷   € ð "$€FÜ	ˆo˜tÓ	$ð "¨Ü—k‘k !“nˆØˆØò 	"ˆDÜ�4‹y˜AŠ~Ø�ÙœfŸm™m›oÓ.‘à6:Ñ3��e˜W e¨VØÜ—I‘IÜ—K‘KÜ—K‘KÜ—J‘JÜ—I‘IÜ—K‘KÜÜð	ñ 	ô #Ÿ]™]¨1¨a°¸eÈFÔS‘Fä"ŸZ™Z¨°UÀ6ÔJ�FØ�M‰M˜&Õ!ñ'	"÷"ð. €M÷/"ð. €Mús   �C>DÄD"c                ó²   ‡ ‡‡‡	‡
— ddl m} d	ˆ	fd„Š		 	 	 	 	 	 	 	 d
ˆ ˆˆˆ	fd„Š
	 	 	 	 	 	 dˆ
fd„}	 	 	 	 	 	 dˆ
fd„}	 	 	 	 	 	 dˆ
fd„} ||||||t        ¬«      S )aO  
    The forward, backward, and joint computation graph will be stored in
    {folder_name}/{current_name}/{current_name}_forward_{graph_index},
    {folder_name}/{current_name}/{current_name}_backward_{graph_index}, and
    {folder_name}/{current_name}/{current_name}_joint_{graph_index} respectively.
    The input shape of the graphs will be stored in the .input files.
    These files can be loaded with pickle,
    and is a list of format (type, shape, stride, dtype, device).
    In the case of type = int or float, it is just (type,).
    For joint graph input, it is a nested list [[],[]]
    where the two inner lists have the same format.
    If dump_example_input is True, example_inputs will be stored in .pt file.
    Since each function might produce multiple graphs,
    the graph_index is used to distinguish difference graphs
    r   )Úaot_module_simplifiedc                óª  •— g }t        | «      dkD  r1t        | d   t        «      r| ‰| d   «      z  }| ‰| d   «      z  }|S | D ]‹  }t        |«      t        u st        |«      t
        u r|j                  t        |«      f«       ŒA|j                  t        |«      |j                  |j                  «       |j                  |j                  f«       Œ� |S )Nr   r   )r=   r7   rz   rC   rt   rÌ   rÏ   r¿   r�   r4   rB   )r>   Ú
input_metaÚargÚget_input_metas      €r+   rÛ   z(_save_fx_default.<locals>.get_input_meta“  sÀ   ø€ Øˆ
Üˆt‹9�qŠ=œZ¨¨Q©´Ô7Ø™.¨¨a©Ó1Ñ1ˆJØ™.¨¨a©Ó1Ñ1ˆJØÐØò 	ˆCÜ�C‹yœCÑ¤4¨£9´Ñ#5Ø×!Ñ!¤4¨£9 ,Õ/à×!Ñ!Ü˜#“Y §	¡	¨3¯:©:«<¸¿¹ÀCÇJÁJÐOõð		ð Ðr-   c                ó  •— t        | j                  j                  «      dk(  r,t        j                  t        j
                  d‰|t        «       y t        j                  | «      }|j                  j                  t        j                  j                  j                  «       «       |j                  «         ‰	|«      }t        j                  ‰› d‰› �d¬«       |j!                  ‰› d‰› d‰› d|› dt        › �	«       t#        ‰› d‰› d‰› d|› dt        › d‰› d|› dt        › d�d«      5 }t%        j&                  ||«       d d d «       ‰r7t        j(                  |‰› d‰› d‰› d|› dt        › d‰› d|› dt        › d	�«       y y # 1 sw Y   ŒCxY w)
Nr   z!No nodes in graph {%s}_{%s}_{%s}.ú/T)Úexist_okrV   z.inputÚwbz.pt)r=   r!   r@   ÚlogÚloggingÚWARNINGrÂ   ÚcopyÚdeepcopyÚset_codegenr#   ÚfxÚCodeGenr(   ÚosÚmakedirsr¾   rÅ   rÆ   ÚdumpÚsave)
Ú
gm_to_saver>   Ú	type_nameÚgmrÙ   rP   Úcurrent_nameÚdump_example_inputÚfolder_namerÛ   s
         €€€€r+   Úgraph_saver_helperz,_save_fx_default.<locals>.graph_saver_helper¢  s§  ø€ ô ˆz×Ñ×%Ñ%Ó&¨!Ò+Ü�G‰GÜ—‘Ø3ØØÜôð ä�]‰]˜:Ó&ˆØ
�‰×ÑœUŸX™XŸ^™^×3Ñ3Ó5Ô6Ø
�‰Œá# DÓ)ˆ
ä
�‰�{�m 1 \ NÐ3¸dÕCØ
�‰Øˆm˜1˜\˜N¨!¨L¨>¸¸9¸+ÀQÄ{ÀmÐTô	
ô Øˆm˜1˜\˜N¨!¨L¨>¸¸9¸+ÀQÄ{ÀmÐSTÐUaÐTbÐbcÐdmÐcnÐnoÔp{Ðo|ð  }Cð  DØó
ð 	'ð Ü�K‰K˜
 AÔ&÷		'ñ
 Ü�J‰JØØ�-˜q  ¨a°¨~¸Q¸y¸kÈÌ;È-ÐWXÐYeÐXfÐfgÐhqÐgrÐrsÔtð  tAð  ADð  Eõð ÷	'ð 	'ús   Ä)FÆFc                ó   •—  ‰| |d«       | S )NÚforwardr]   ©rî   Úexample_inputsrò   s     €r+   Úgraph_saver_forwardz-_save_fx_default.<locals>.graph_saver_forwardÅ  s   ø€ ñ 	˜2˜~¨yÔ9Øˆ	r-   c                ó.   •—  ‰| |d«       t         dz  a | S )NÚbackwardr   )rÂ   rõ   s     €r+   Úgraph_saver_backwardz._save_fx_default.<locals>.graph_saver_backwardË  s    ø€ ñ 	˜2˜~¨zÔ:ä�qÑˆØˆ	r-   c                ó0   •—  ‰| |d«       t        | |«      S )NÚjoint)r   )rî   Ú
joint_argsrò   s     €r+   Úgraph_saver_jointz+_save_fx_default.<locals>.graph_saver_jointÓ  s   ø€ ñ 	˜2˜z¨7Ô3Ü   ZÓ0Ð0r-   r¯   )r>   r   r“   z	list[Any])rì   úfx.GraphModuler>   r   rí   Ústrr“   r–   )rî   rÿ   rö   úlist[torch.Tensor]r“   rÿ   )rî   rÿ   rý   r  r“   z%tuple[fx.GraphModule, fx.GraphModule])Úfunctorch.compiler×   r´   )rï   rñ   rð   rî   rö   r×   r÷   rú   rþ   rÛ   rò   s   ```      @@r+   Ú_save_fx_defaultr  {  s°   ü€ õ, 8õð!Ø"ð!Ø*-ð!Ø:=ð!à	÷!ð !ðFØðØ,>ðà	õðØðØ,>ðà	õð1Øð1Ø(:ð1à	.õ1ñ !Ø
ØØ'Ø(Ø&Ü-ôð r-   c                ó*   — da t        t        | ||«      S )as  
    Dump the forward, backward, and joint computation graph.
    Example Usage:
    save_fx_func = graph_dumper_aot(current_name, folder_name, dump_example_input = False)
    optimize_ctx = torchdynamo.optimize(
        save_fx_func
    )
    with torch.enable_grad():
        with optimize_ctx:
            result = forward_and_backward_pass(model, example_inputs)
    r   )rÂ   r   r  )rï   rñ   rð   s      r+   Úgraph_dumper_aotr  å  s   € ð €KÜÔ# \°;Ð@RÓSÐSr-   )r)   rÿ   r“   rÿ   )r“   zGenerator[None, None, None])r)   rÿ   rL   zSequence[Any]r“   útorch.jit.ScriptModule)T)
r)   rÿ   rV   r   rW   r   rS   r•   r“   rÿ   )rW   r   r“   z5Callable[[fx.GraphModule, list[Any]], fx.GraphModule])r)   rÿ   rV   r   r“   rÿ   )r)   rÿ   rV   r   r“   zDCallable[[DebugInterpreter, Any, dict[Node, Any] | None, bool], Any])r)   rÿ   rV   r   r“   r  )rP   úCallable[..., Any]r“   r  )r¸   úCallable[_P, _R] | nn.Moduler?   r   r“   r  )r)   rÿ   rL   zSequence[torch.Tensor]r“   r  )rÐ   r   r“   r  )rï   r   rñ   r   rð   r•   rî   ztorch.fx.GraphModulerö   r  r“   z	nn.Module)F)rï   r   rñ   r   rð   r•   r“   z Callable[[bool, nn.Module], Any])dÚ
__future__r   rã   rá   rè   rÆ   rÈ   Ú
contextlibr   Ú	functoolsr   Útypingr   r   Útyping_extensionsr   r	   rn   r#   Útorch.fxræ   Útorch.nnr¶   Útorch.utils._pytreeÚutilsÚ_pytreer™   r
   Útorch._decompr   Ú%torch.fx.experimental.symbolic_shapesr   Úaot_autogradr   r   r   Úcompile_utilsr   Úpartitionersr   r   r   Úcollections.abcr   r   r   Útorch.fx.noder   Útorch.typesr   r   r   Ú	getLoggerr¢   rà   r,   r2   rQ   rX   r[   r_   ÚInterpreterra   r§   r©   r«   r$   r%   ÚdetachÚgelu_backwardÚleaky_relu_backwardÚsigmoid_backwardÚthreshold_backwardÚhardtanh_backwardÚhardsigmoid_backwardÚhardswish_backwardÚtanh_backwardÚsilu_backwardÚelu_backwardÚcudnn_batch_normÚcudnn_batch_norm_backwardÚmasked_fillÚScalarrœ   ÚeluÚ
leaky_reluÚhardtanhÚ	hardswishÚhardsigmoidÚconj_physicalÚis_same_sizer´   r­   rº   rÁ   rÂ   Ú__annotations__rÕ   r  r  r]   r-   r+   ú<module>r4     s4  ðÞ "ã Û Û 	Û Û Ý %Ý ß %ß 0ã ã Ý Ý ß $Ð $Ý Ý ,Ý >ç GÑ GÝ *÷ñ ñ ß=Ñ=å"Ý'ñ ˆtƒ_€ÙˆTƒ]€à€g×Ñ˜Ó!€ó
ð ò?ó ð?ð ò,ó ð,ð` AEðØ
ðØ ðØ(+ðØ9=ðàóðHØ
ðHà:óHð ò	ó ð	ôE�r—~‘~ô EðP ð&Ø
ð&Ø ð&àIò&ó ð&ð òó ðó.ð ‡y�y‡~�~€à‡K�KØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×"Ñ"Ø×Ñ×ÑØ×Ñ×ÑØ‡H�HØ‡O�OØ‡M�MØ‡N�NØ×ÑØ×ÑØ×Ñð-Ð ñ4 ,Ð,BÓCÐ ð òó ðð
$*Ø$ð$*àð$*ð "ó$*ðN"Ø
ð"Ø 6ð"àó"ð@ €ˆSÓ óð>fØðfàðfð ðfð 	ð	fð
 'ðfð ófðV EJðTØðTØ$'ðTØ=AðTà%ôTr-   