Ë
    ÃÓ^jí  ã                  ó€  — U d Z 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Zddl	Z	ddl
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mZ ddlmZ ddlZ	 ddlmZ ddlmZmZ dd	l m!Z! ejD                  Z#ddl%Z%ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; ddl<m=Z=m>Z>m?Z? ddl@mAZA ddlBmCZC ddlDmEZE ddlFmGZG ddlHmIZI ddlJmKZK ddlLmMZMmNZN ddlOmPZP ddlQmRZR 	 	 	 	 dHd„ZSerddlTmUZUmVZV dd lWmXZXmYZY dd!lZm[Z[ dd"l\m]Z]  ej¼                  e_«      Z` ed#«      Za	 	 	 	 dId$„Zb	 	 	 	 dJd%„Zcdd&œ	 	 	 	 	 	 	 dKd'„Zd eA«       Ze	 	 	 	 	 	 dLd(„ZfdMd)„ZgdNd*„Zhd+dd+d+d,œ	 	 	 	 	 	 	 	 	 	 	 	 	 dOd-„Zid+dd.dddd+d/œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dPd0„Zjdd1œ	 	 	 	 	 	 	 	 	 dQd2„Zk	 	 	 	 	 	 	 	 dRd3„Zl	 	 	 	 	 dS	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dTd4„Zm	 dU	 	 	 	 	 	 	 dVd5„Zn	 dUd+d+d6œ	 	 	 	 	 	 	 	 	 	 	 dWd7„Zo ejà                  e-d8¬9«      Zq	 	 	 	 	 	 	 	 dXd:„Zr	 	 	 	 	 	 	 	 dYd;„ZsdZd<„Zten ejà                  eod8d8¬6«      eod=œZud>evd?<   d[d@„Zwd[dA„Zxd[dB„Zy	 	 	 	 	 	 	 	 dYdC„Zzd[dD„Z{d.dEdddddFœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d\dG„Z|y# e$$ r,  G d
„ d«      Z G d„ d«      Z! G d„ d«      Z G d„ d«      Z#Y �Œ=w xY w)]a€  
Utilities for reproducing and debugging issues in PyTorch's Dynamo AOT compilation.

This module provides tools and infrastructure for:
1. Generating minimal reproducible test cases ("repros") from failing compilations
2. Analyzing accuracy issues between eager and compiled execution
3. Minifying large models/inputs to isolate problematic patterns
4. Debugging compiler errors and accuracy divergences

The main components include:
- Repro generation: Creates standalone Python files that reproduce compiler issues
- Minification: Reduces large graphs to minimal failing examples
- Accuracy analysis: Compares compiled vs eager execution, with fp64 reference
- Debug tools: Dumps graph state, tracks intermediates, analyzes divergences

This is primarily used by PyTorch developers and researchers to debug issues in
the Dynamo AOT compilation pipeline, particularly for the Inductor backend.
é    )ÚannotationsN)Úimport_module)ÚTemporaryFile)ÚAnyÚIOÚTYPE_CHECKING)ÚUnpack)Ú	AutotunerÚ
Heuristics)ÚJITFunctionc                  ó   — e Zd Zy)r
   N©Ú__name__Ú
__module__Ú__qualname__© ó    úh/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/repro/after_aot.pyr
   r
   3   ó   „ Ør   r
   c                  ó   — e Zd Zy)r   Nr   r   r   r   r   r   6   r   r   r   c                  ó   — e Zd Zy)r   Nr   r   r   r   r   r   9   r   r   r   c                  ó   — e Zd Zy)ÚTritonConstexprNr   r   r   r   r   r   <   r   r   r   )Ú_cuda_system_info_commentÚAccuracyErrorÚbackend_accuracy_failsÚBuckTargetWriterÚcast_to_fp64Ú
extra_depsÚextra_importsÚgenerate_config_stringÚgenerate_env_vars_stringÚhelper_for_dump_minifyÚInputReaderÚInputWriterÚMAX_CONSTANT_NUMEL_INLINEÚminifier_dirÚNNModuleToStringÚNopInputReaderÚsame_two_models)Úclone_inputsÚcountersÚsame)Ú	is_fbcode)Úkernel_side_table)Únormalize_path_separator)ÚFakeScriptObject)Ú
OpOverload)Úmake_fx)Úfx_placeholder_targetsÚhas_free_symbols)Útqdmé   )Úconfigc                óD  — g }| j                   j                  D �]  }|j                  dk7  s#dt        |j                  «      vs|j
                  sŒ7|j                  j                  d«      }|j
                  d   }t        |t        j                  j                  «      sŒ†t        |t        j                  j                  «      sŒ«|j                  dk(  sŒ»|j                  dk(  sŒË|j                  t        |j                  «      t        |j                  «      f«       �Œ |S )zé
    Find repeat_interleave operations with output_size constraints.

    Returns list of (repeats_placeholder_name, output_size_placeholder_name) pairs.
    These represent constraints where sum(repeats) must equal output_size.
    Úcall_functionÚrepeat_interleaveÚoutput_sizer   Úplaceholder)ÚgraphÚnodesÚopÚstrÚtargetÚargsÚkwargsÚgetÚ
isinstanceÚtorchÚfxÚNodeÚappend)ÚgmÚconstraintsÚnodeÚoutput_size_nodeÚrepeats_nodes        r   Ú#_find_repeat_interleave_constraintsrP   f   sÜ   € ð €KØ—‘—‘ó Yˆà�G‰G�Ò&Ø"¬#¨d¯k©kÓ*:Ñ:Ø—9’9ààŸ;™;Ÿ?™?¨=Ó9ÐØ—y‘y ‘|ˆô �|¤U§X¡X§]¡]Õ3ÜÐ+¬U¯X©X¯]©]Õ;Ø—‘ =Ó0Ø ×#Ñ# }Ó4à×Ñ¤ L×$7Ñ$7Ó 8¼#Ð>N×>UÑ>UÓ:VÐWÖXð%Yð( Ðr   )ÚCallableÚSequence)Ú_CompileFxCallableÚ_CompileFxKwargs)Ú
OutputCode)Ú	InputTypeztorch._inductor.configc                ó  — ddl m} ddlm} i }| j                  j
                  D ]å  }|j                  dk7  rŒt        |j                  t        «      sŒ.|j                  j                  dvrŒG ||j                  |j                  |j                  d¬«      }|€Œt|\  }}|j                  d«      }t        |t        «      sŒ›t        j                   ||«      }	|	|v rŒ¶dd	lm}
m}  |
|	«      } ||	«      }|j)                  «       }||d
œ||	<   Œç |S )zæ
    Extract process group information from distributed ops in the graph.

    Returns a dict mapping group names to dicts with 'size' and 'rank' keys.
    Example: {'tp': {'size': 4, 'rank': 0}, 'dp': {'size': 2, 'rank': 0}}
    r   )Ú	GroupName)Únormalize_functionr:   >   Úc10d_functionalÚ_c10d_functionalT)rC   rD   Únormalize_to_only_use_kwargsÚ
group_name)Ú_get_group_size_by_nameÚ_resolve_process_group)ÚsizeÚrank)Útorch.distributedrX   Útorch.fx.operator_schemasrY   r>   r?   r@   rF   rB   r2   Ú	namespacerC   rD   rE   rA   ÚtypingÚcastÚ"torch.distributed.distributed_c10dr^   r_   ra   )rK   rX   rY   Ú
group_inforM   Úopt_args_kwargsÚ_rD   Úgroup_name_r]   r^   r_   Ú
group_sizeÚpgra   s                  r   Ú_extract_distributed_inforn   •   s	  € õ ,Ý<à,.€Jà—‘—‘ò "DˆØ�7‰7�oÒ%ØÜ˜$Ÿ+™+¤zÔ2ØØ�;‰;× Ñ Ð(OÑOØá,Ø�K‰KØ—‘Ø—;‘;Ø)-ô	
ˆð Ð"ØØ#‰	ˆˆ6à—j‘j Ó.ˆÜ˜+¤sÔ+ØÜ—[‘[ ¨KÓ8ˆ
à˜Ñ#Ø÷	
ñ
 -¨ZÓ8ˆ
Ù# JÓ/ˆØ�w‰w‹yˆØ*4¸dÑ!Cˆ
�:ÒðE"DðH Ðr   c                ó¢  — ddl m} ddlm} | syt	        d„ | j                  «       D «       «      }d}| j                  «       D ]  }|d   |k(  sŒ|d   } n  |«       }|j                  d|||¬«       |j                  j                  «       }t        j                  j                  j                  «        | j                  «       D ]‰  \  }}|d   }	|	|k(  r+t        j                  j                  j                  ||«       Œ;t        t!        |	«      «      }
|j#                  |
«      }t        j                  j                  j                  ||«       Œ‹ y)	z–
    Set up fake process groups for repro execution.

    Args:
        group_info: dict mapping group_name -> {'size': group_size, 'rank': rank}
    r   N)Ú	FakeStorec              3  ó&   K  — | ]	  }|d    –— Œ y­w)r`   Nr   )Ú.0Úinfos     r   ú	<genexpr>z,setup_fake_process_groups.<locals>.<genexpr>Ù   s   è ø€ ÒB d�T˜&•\ÑBùs   ‚r`   ra   Úfake)Úbackendra   Ú
world_sizeÚstore)rb   ÚdistributedÚ+torch.testing._internal.distributed.fake_pgrp   ÚmaxÚvaluesÚinit_process_groupÚdistributed_c10dÚ_get_default_grouprG   Ú_CÚ_distributed_c10dÚ_unregister_all_process_groupsÚitemsÚ_register_process_groupÚlistÚrangeÚ	new_group)rh   Údistrp   rw   Úglobal_rankrs   rx   Ú
default_pgr]   rl   ÚranksÚnew_pgs               r   Úsetup_fake_process_groupsr�   Ê   s3  € õ %ÝEáØäÑB¨j×.?Ñ.?Ó.AÔBÓB€Jà€KØ×!Ñ!Ó#ò ˆØ�‰<˜:Ó%Ø˜v™,ˆKÙðñ
 ‹K€EØ×ÑØØØØð	 ô ð ×&Ñ&×9Ñ9Ó;€JÜ	‡H�H×Ñ×=Ñ=Ô?à&×,Ñ,Ó.ò 	SÑˆ
�DØ˜&‘\ˆ
Ø˜Ò#ä�H‰H×&Ñ&×>Ñ>¸zÈ:ÕVäœ˜zÓ*Ó+ˆEØ—^‘^ EÓ*ˆFä�H‰H×&Ñ&×>Ñ>¸zÈ6ÕRñ	Sr   )Ú	save_pathc               ó  — t        j                  «       }t        || |dd¬«       |j                  «       }|�<t	        |d«      5 }|j                  |«       ddd«       t        j                  d|«       |S # 1 sw Y   Œ!xY w)zB
    Generate a self-contained repro script from an FX graph.
    ÚinductorN)Úsave_dirÚwzSaved standalone repro to %s)ÚioÚStringIOÚsave_graph_reproÚgetvalueÚopenÚwriteÚlogrs   )rK   rC   rŽ   ÚbufÚreproÚfs         r   Úgenerate_standalone_repror�   ø   sp   € ô �+‰+‹-€CÜ�S˜"˜d J¸Õ>Ø�L‰L‹N€EàÐÜ�)˜SÓ!ð 	 QØ�G‰G�EŒN÷	ä�‰Ð/°Ô;à€L÷		ð 	ús   ÁA5Á5A>c                ó^   ‡ ‡— t        j                  ‰ «      	 d	 	 	 	 	 	 	 	 	 dˆˆ fd„«       }|S )a]  
    Minifier for Fx Graph modules after Aot Autograd has finished. We wrap both
    forward and backward call separately with the backend compiler_fn - like
    inductor or nvfuser. Intercepting after Aot Autograd presents neat
    abstraction, where all the params are lifted as graph inputs, making it easy
    to save the graph as a string.
    c                óÆ  •‡ ‡‡‡	‡
‡‡— ddl mŠ t        j                  ‰fd|i|¤Ž}ddlm}  |«       Š	t        j                  ‰ j                  «      Št        j                  dvrt        dt        j                  ›�«      ‚	  |‰ ‰«      Š
	 	 	 	 	 	 dˆ
ˆfd„}dˆˆˆˆ ˆ	ˆ
ˆfd„Št        j                  dk(  r|}d|_        |S ‰
S # t        $ r“ t        j                  dk(  r~t        j                  dk(  r"t        t        j                   ‰ ‰«      ‰‰«       n4t        j                  d	k(  r!t#        t        j                   ‰ ‰«      ‰‰«       t$        j'                  d
«       ‚ w xY w)Nr   )ÚFakeTensorModeÚcompile_region_name)Úget_aot_graph_name)ÚdynamoÚaotNz2repro_after must be 'dynamo', 'aot', or None, got r¤   é   r7   ÚCompilerErrorc                óø   •— |rt        d|› �«      ‚t        j                  dk7  r#t        ‰t        «      rt        d«      ‚ ‰| «      S t        j
                  d ¬«      5   ‰| «      cd d d «       S # 1 sw Y   y xY w)NzUnexpected kwargs: r¤   z(inner_compiled_fn should not be a string©Úrepro_after)ÚAssertionErrorr8   r©   rF   rA   Úpatch)Úreal_inputsÚ_kwargsÚinner_compiled_fnÚinner_debug_fns     €€r   Údeferred_for_real_inputszLwrap_compiler_debug.<locals>.debug_wrapper.<locals>.deferred_for_real_inputsS  st   ø€ ñ Ü$Ð':¸7¸)Ð%DÓEÐEÜ×!Ñ! UÒ*ÜÐ/´Ô5Ü(Ð)SÓTÐTÙ(¨Ó5Ð5Ü—‘¨$Ô/ñ 3Ù% kÓ2÷3÷ 3ò 3ús   ÁA0Á0A9c                ó  •—  ‰«       }| D �cg c]/  }t        |t        j                  «      r|j                  |«      n|‘Œ1 }}t        j
                  dk(  r!t        t        j                  ‰	‰«      | ‰«       t        j
                  dk(  r¢‰dk7  rt        d«      ‚t        ‰	‰| dt        j                  ¬«       }|rit        j                  d‰
«       t        t        j                  ‰	‰«      | ‰› d�«       t        t        j                  ‰	‰«      | ‰› d�«       t        d	«      ‚ ‰| «      S 	  ‰| «      }t!        d
„ ‰D «       «      r<t        j"                  j%                  «       rt        j"                  j'                  «        |S c c}w # t(        $ rk t        j
                  dk(  r"t        t        j                  ‰	‰«      |‰«       ‚ t        j
                  dk(  r!t        t        j                  ‰	‰«      |‰«       ‚ w xY w)ai  
            Aot Autograd fw_compiler and bw_compiler can have fake tensors. So,
            example_inputs can be fake tensors. We can call compiler_fn (which is
            inductor or nvfuser) with fake tensors but the actually compiled_fn
            should be called with real tensors. Therefore, the actual invocation
            is deferred.
            é   é   r�   z4Accuracy minification is supported for inductor onlyT©Úonly_fwdÚignore_non_fpz-Accuracy failed for the AOT Autograd graph %sÚ	_accuracyúBad accuracy detectedc              3  ó†   K  — | ]9  }t        |t        j                  «      xr |j                  j                  d k7  –— Œ; y­w©ÚcpuN©rF   rG   ÚTensorÚdeviceÚtype©rr   Úargs     r   rt   zUwrap_compiler_debug.<locals>.debug_wrapper.<locals>.inner_debug_fn.<locals>.<genexpr>�  s9   è ø€ ò à #ô ' s¬E¯L©LÓ9ÒV¸c¿j¹j¿o¹oÐQVÑ>VÓVñùó   ‚?Ar¥   r7   )rF   rG   r½   Úfrom_tensorr8   Úrepro_levelÚdump_to_minifyrH   ÚGraphModuleÚNotImplementedErrorr*   Úrepro_ignore_non_fpr™   ÚwarningÚdump_compiler_graph_stater   ÚanyÚacceleratorÚis_availableÚsynchronizeÚ	Exception)r¬   Ú	fake_modeÚxÚcopy_tensor_attrsÚfailedÚoutr    Úcompiler_nameÚexample_inputsrK   Ú
graph_namer®   Ú
orig_graphs         €€€€€€€r   r¯   zBwrap_compiler_debug.<locals>.debug_wrapper.<locals>.inner_debug_fnb  s  ø€ ñ 'Ó(ˆIð %ö!àô -7°q¼%¿,¹,Ô,G�	×%Ñ% aÔ(ÈQÑNð!Ðð !ô ×!Ñ! QÒ&äÜ—N‘N 2 zÓ2°KÀôô ×!Ñ! QÒ&Ø  JÒ.Ü-ØNóð ô -ØØ%ØØ!Ü"(×"<Ñ"<ôð �ñ Ü—K‘KØGÈôô .ÜŸ™ r¨:Ó6Ø#Ø(˜/¨Ð3ôô
 #ÜŸ™ r¨:Ó6Ø#Ø(˜/¨Ð3ôô
 (Ð(?Ó@Ð@ñ -¨[Ó9Ð9ðá+¨KÓ8�Cô ñ à'5ôô ô "×-Ñ-×:Ñ:Ô<ä×)Ñ)×5Ñ5Ô7Ø�Jùòm!øôn !ò Ü×)Ñ)¨QÒ.Ü1ÜŸN™N¨2¨zÓ:Ø-Ø)ôð ô  ×+Ñ+¨qÒ0Ü&ÜŸN™N¨2¨zÓ:Ø-Ø)ôð
 ðús   �4FÄ-AF
 Æ
A4G>T)r¬   úSequence[InputType]r­   ÚobjectÚreturnr   )r¬   rÙ   rÛ   r   )Útorch._subclassesr    Ú	functoolsÚpartialÚtorch._functorch.aot_autogradr¢   ÚcopyÚdeepcopyr>   r8   r©   rª   rÏ   rÄ   rÊ   rH   rÆ   rÅ   r™   ÚerrorÚ_boxed_call)rK   rÖ   r¡   rD   Úcompiler_fnr¢   r°   Úcompiled_fnr    r×   r®   r¯   rØ   rÕ   Úunconfigured_compiler_fns   ``      @@@@@€€r   Údebug_wrapperz*wrap_compiler_debug.<locals>.debug_wrapper   sl  ÿ€ õ 	5ä×'Ñ'Ø$ñ
à 3ð
ð ñ
ˆõ 	Eá'Ó)ˆ
ô —]‘] 2§8¡8Ó,ˆ
Ü×ÑÐ%<Ñ<Ü ØDÄV×EWÑEWÐDZÐ[óð ð	ñ !,¨B°Ó ?Ðð,	3Ø,ð	3Ø9?ð	3àö	3÷P	ó P	ôd ×Ñ Ò&Ø2ˆKØ&*ˆKÔ#ØÐà$Ð$øôw ò 	ô ×!Ñ! UÒ*Ü×%Ñ%¨Ò*Ü-ÜŸ™ r¨:Ó6Ø&Ø%õô
 ×'Ñ'¨1Ò,Ü"ÜŸ™ r¨:Ó6Ø&Ø%ôô
 —	‘	˜/Ô*Øð#	ús   Â	C ÃBE ©N)
rK   útorch.fx.GraphModulerÖ   rÙ   r¡   ú
str | NonerD   zUnpack[_CompileFxKwargs]rÛ   rU   )rÝ   Úwraps)ræ   rÕ   rç   s   `` r   Úwrap_compiler_debugrì     sd   ù€ ô ‡_�_Ð-Ó.ð +/ðX%Ø ðX%à+ðX%ð (ðX%ð +ð	X%ð
 
õX%ó /ðX%ðt Ðr   c                 ó¢   — t        «       r@dj                  t        D � cg c]  } d| › d�‘Œ
 c} «      }t        |«      dkD  rd|z   }d|› d�S yc c} w )Nú
z	        "z",r   a'  """
To run this script in fbcode:
- Create a directory (//scripts/{your_unixname}/repro)
- Put this file in scripts/{your_unixname}/repro/fx_graph_runnable.py
- Add a TARGETS file that looks like the following
- `buck2 run //scripts/{your_unixname}/repro:repro`

NOTE: you may need additional deps to actually be able to run the script.
```
# Contents of TARGETS file
load("@fbcode_macros//build_defs:python_binary.bzl", "python_binary")

python_binary(
    name = "repro",
    main_src = "fx_graph_runnable.py",
    deps = [
        "//caffe2:torch",z
    ],
)
```
"""
Ú )r.   Újoinr   Úlen)ÚdepÚextra_deps_formatteds     r   Úmaybe_fbcode_instructionsrô   Ã  sk   € Ü„{Ø#Ÿy™yÌÖ)TÀ#¨I°c°U¸"Ò*=Ò)TÓUÐÜÐ#Ó$ qÒ(Ø#'Ð*>Ñ#>Ð ðð" /Ð/ð 0ð#ð 	ð0 ùò7 *Us   žAc           
     ó  — d}t        | t        «      r¶t        | j                  t        «      r|dz  }|dz  }|S g }| j                  D ]D  }|j                  dt        |j                  «      › d|j                  › d|j                  › d�«       ŒF dj                  |«      }|t        j                  d	|› d
�«      j                  «       z  }t        | t        «      r| j                  n| j                  j                  }|dz  }||z  }|dz  }|S )Nrï   ú(ERROR: Repro will not work as intended, z?triton.runtime.autotuner.Heuristics is not currently supported
z#triton.Config(
                    z ,
                    num_warps=z!,
                    num_stages=z,
                )ú,zA
        @triton.autotune(
            configs=[
                z5
            ],
            key=[]
        )
        z
@triton.jit
rî   )rF   r
   Úfnr   ÚconfigsrJ   rA   rD   Ú	num_warpsÚ
num_stagesrð   ÚtextwrapÚdedentÚstripr   Úsrc)ÚkernelÚresÚconfig_strsÚkernel_configÚ
config_strÚsrc_codes         r   Úgenerate_custom_triton_kernelr  ã  s&  € Ø
€CÜ�&œ)Ô$ä�f—i‘i¤Ô,ØÐ=Ñ=ˆCØÐUÑUˆCØˆJàˆà#Ÿ^™^ò 	ˆMØ×Ñð $Ü˜×-Ñ-Ó.Ð/ð 0Ø,×6Ñ6Ð7ð 8 Ø -× 8Ñ 8Ð9ð :ð õ ð	ð —X‘X˜kÓ*ˆ
ØŒx�‰ð $ð �ð 	ð ó ÷ ‰U‹Wñ	ˆô (¨´Ô<ˆv�zŠzÀ&Ç)Á)Ç-Á-€HØÐÑ€CØˆ8�O€CØˆ4�K€Cà€Jr   F©Ústable_outputr‘   Ústable_hashÚhas_distributed_opsc               ó  ‡*‡+— |�t        |«      }d}|r#t        j                  d«      j                  «       }d}t	        t
        j                  «      dkD  r#t        j                  d«      j                  «       }t        j                  dt        |¬«      › d|› d|› dt        |¬«      › d	t        › dt        «       › d
�«      }|t        j                  d«      z  }|s¤|dt        j                  j                  › d�z  }t        t        j                  d«      r!|dt        j                  j                  › d�z  }t        t        j                  d«      r!|dt        j                  j                   › d�z  }|t#        «       z  }d}	d-d„Š*	 	 	 	 	 	 	 	 d.ˆ*ˆ+fd„Š+t%        «       }
t%        «       }||	› d�z  }t
        j                  D ]j  }t        j&                  |«      }	 | ‰+|||
«      z  } ‰*|«      }|› d|› �}t)        |«      }|j+                  d|› d�d|› d�d«      }||z  }||	› d|› d�z  }Œl t	        t
        j.                  «      dkD  r||	› dt
        j.                  › d�z  }|t1        j2                  | d¬ «      z  }t5        ||¬!«      }i }t7        | «      }t9        ||«      D �]�  \  }}t;        |t<        t        j>                  f«      r|jA                  ||«       n·t;        |t        jB                  «      r|jE                  ||«       nŠ|€|jG                  |«       nvt;        |tH        «      r|jK                  ||jL                  «       nIt;        |t        jN                  jP                  «      r|jS                  ||«       n|jU                  ||«       t;        |t        j>                  «      rrt;        |jV                  jX                  tZ        j\                  «      rD|jV                  j^                  �.|jV                  j^                  |ta        |jV                  «      <   �Œ}t;        |t        jB                  «      s�Œ™|jb                  D ]�  }t;        |t        j>                  «      sŒt;        |jV                  jX                  tZ        j\                  «      sŒM|jV                  j^                  €Œd|jV                  j^                  |ta        |jV                  «      <   Œ‘ |je                  «       D ]�  }t;        |t        j>                  «      sŒt;        |jV                  jX                  tZ        j\                  «      sŒM|jV                  j^                  €Œd|jV                  j^                  |ta        |jV                  «      <   Œ‘ |jg                  «       }|ji                  «       }t;        |t        j>                  «      s�Œ|jV                  jX                  }|jV                  jj                  }|jl                  D ]A  }ta        |«      }||vsŒ|€Œ|jn                  jq                  |«      }|€Œ4t=        |«      ||<   ŒC �Œ“ |r6djs                  d"„ tu        |jw                  «       «      D «       «      } | › d|› �}ty        | «      }!|!�r2t{        |«      D ��"ci c]  \  }}"|"|“Œ
 }#}}"|!D �]  \  }$}%|#jq                  |$«      }&|#jq                  |%«      }'|&€Œ,|'€Œ/|j|                  j                  d#«       |j|                  j                  d$«       |j|                  j                  d%|&› d&�«       |j|                  j                  d'|'› d&�«       |j|                  j                  d(«       |j|                  j                  d)«       |j|                  j                  d*«       |j|                  j                  d+«       �Œ |j�                  «       }(djs                  |(«      })||)dz   z  }|d,z  }|S # t,        $ r}|dz  }|d|› d�z  }Y d }~�Œ;d }~ww xY wc c}"}w )/Nrï   zl
import torch.distributed as dist
from torch.testing._internal.distributed.fake_pg import FakeStore
        r   z4
import triton
import triton.language as tl
        rî   )r  z¯
import torch
from torch import tensor, device
import torch.fx as fx
from torch._dynamo.testing import rand_strided
from math import inf
import torch._inductor.inductor_prims
z

z!

isolate_fails_code_str = None

z
     aŠ  
if "__compile_source__" in globals():
    import inspect as __after_aot_inspect
    import linecache as __after_aot_linecache
    __after_aot_filename = __after_aot_inspect.currentframe().f_code.co_filename
    __after_aot_linecache.cache[__after_aot_filename] = (
        len(__compile_source__),
        None,
        __compile_source__.splitlines(True),
        __after_aot_filename,
    )
z# torch version: Úcudaz# torch cuda version: Úgit_versionz# torch git version: z


z<torch._higher_order_ops.triton_kernel_wrap.kernel_side_tablec                óz   — t        | t        «      r| n| j                  }|j                  j	                  d«      d   S )Nú.éÿÿÿÿ)rF   r   rø   r   Úsplit)r   rø   s     r   Úget_fn_namez3generate_compiler_repro_string.<locals>.get_fn_nameV  s0   € Ü& v¬{Ô;‘&ÀÇÁˆØ�{‰{× Ñ  Ó% bÑ)Ð)r   c                ó°  •— d}t        | t        «      r| n| j                  }t        |dd«      rt        |dd«      s|S t        |j                  di «      }|j                  }|j                  «       j                  d«      r|nd|z   }t        «       }t        «       }	t        j                  t        j                  |«      «      D ]œ  }
t        |
t        j                  «      r|j                  |
j                  «       t        |
t        j                  «      sŒSt        |
j                  t        j                  «      sŒx|	j                  |
j                  j                  «       Œž |D ]‰  }||v rŒ|j!                  |«      }t        |t"        «      r#t        |dd«      r||› d|j$                  › d	�z  }n-t        |t&        t(        t*        t,        f«      r||› d
|›d�z  }nŒy|j                  |«       Œ‹ |	D ]a  }|j!                  |«      }t        |t        «      r||u rŒ) ‰|«      }||v rŒ6|j                  |«       | ‰|||«      z  }|t/        |«      z  }Œc |S )zBWrite out global tl.constexpr vars and nested kernel dependencies.rï   rø   Nrÿ   Ú__globals__údef Úvaluez = tl.constexpr(ú)
ú = rî   )rF   r   rø   Úgetattrrÿ   rþ   Ú
startswithÚsetÚastÚwalkÚparseÚNameÚaddÚidÚCallÚfuncrE   r   r  ÚintÚfloatrA   Úboolr  )r   Úwritten_constexpr_varsÚwritten_nested_kernelsÚresultÚjit_fnÚ
fn_globalsrÿ   Úfull_srcÚreferenced_namesÚcalled_namesrM   ÚnameÚvalÚnested_fn_namer  Úwrite_kernel_dependenciess                 €€r   r2  zAgenerate_compiler_repro_string.<locals>.write_kernel_dependenciesZ  s  ø€ ð ˆÜ% f¬kÔ:‘ÀÇ	Á	ˆÜ�v˜t TÔ*´'¸&À%ÈÔ2NØˆMä˜VŸY™Y¨°rÓ:ˆ
Ø�j‰jˆØŸ)™)›+×0Ñ0°Ô8‘3¸fÀs¹lˆä%(£UÐÜ!$£ˆÜ—H‘HœSŸY™Y xÓ0Ó1ò 	/ˆDÜ˜$¤§¡Ô)Ø ×$Ñ$ T§W¡WÔ-Ü˜$¤§¡Õ)¬j¸¿¹ÄCÇHÁHÕ.MØ× Ñ  §¡§¡Õ.ð		/ð %ò 	-ˆDØÐ-Ñ-ØØ—.‘. Ó&ˆCä˜#œÔ/´G¸CÀÈ$Ô4OØ˜T˜FÐ"2°3·9±9°+¸SÐAÑA‘Ü˜C¤#¤u¬c´4Ð!8Ô9Ø˜T˜F # c W¨BÐ/Ñ/‘àØ"×&Ñ& tÕ,ð	-ð !ò 	9ˆDØ—.‘. Ó&ˆCÜ˜c¤;Ô/°3¸&±=ØÙ(¨Ó-ˆNØÐ!7Ñ7Øà"×&Ñ& ~Ô6ØÑ/ØÐ+Ð-Cóñ ˆFð Ô3°CÓ8Ñ8‰Fð	9ð ˆr   z.reset_table()
rj   r  ú(r¥   z.add_kernel(r  rö   z&User defined triton kernel exception: z.constant_args=T)Úallow_unsafe_repr©r	  c              3  ó0   K  — | ]  \  }}|› d |› �–— Œ y­w)r  Nr   )rr   r/  Úhints      r   rt   z1generate_compiler_repro_string.<locals>.<genexpr>î  s$   è ø€ ò 
Ù#- 4¨ˆtˆf�C˜�vÔñ
ùó   ‚zA# Fixup: ensure sum(repeats) == output_size for repeat_interleavezif hasattr(reader, 'args'):z    _repeats = reader.args[ú]z    _output_size = reader.args[zL    if isinstance(_repeats, torch.Tensor) and _repeats.dtype == torch.int64:z        _n = _repeats.numel()z*        _repeats.fill_(_output_size // _n)z)        _repeats[:_output_size % _n] += 1zmod = Repro()
©r   r   rÛ   rA   )r   r   r'  úset[str]r(  r;  rÛ   rA   )Ar0   rü   rý   rþ   rñ   r/   Úid_to_kernelr"   r!   r    rô   rG   ÚversionÚ__version__Úhasattrr  r  r   r  Ú
get_kernelr  ÚreplaceÚAttributeErrorÚconstant_argsr(   Úconvertr%   r4   ÚziprF   r$  ÚSymIntÚsymintr½   ÚtensorÚconstr1   ÚopaqueÚscript_class_namer€   Ú	GeneratorÚ	generatorÚunsupportedrM   ÚexprÚsympyÚSymbolr7  rA   ÚshapeÚstrideÚuntyped_storageÚnbytesÚ	shape_envÚfree_symbolsÚbacked_var_to_valrE   rð   Úsortedrƒ   rP   Ú	enumerateÚ_linesrJ   Úlines),rK   rC   r  r‘   r	  r
  Údistributed_importsÚtriton_importsÚ	model_strÚkernel_side_table_prefixr(  r'  Úidxr   Úfn_nameÚunique_nameÚkernel_codeÚeÚwriterÚ	used_symsÚplaceholder_targetsr=   rÁ   ÚdimrS  ÚstoragerU  rO  rV  ÚsymÚsym_namer7  Ú
hint_linesrL   r/  Úplaceholder_to_idxÚrepeats_nameÚoutput_size_nameÚrepeats_idxÚoutput_size_idxÚload_args_linesÚload_args_coder  r2  s,                                             @@r   Úgenerate_compiler_repro_stringru    sz  ù€ ð ÐÜ+¨HÓ5ˆàÐÙÜ&Ÿo™oðó
÷
 ‰%‹'ð 	ð €Nä
Ô×)Ñ)Ó*¨QÒ.Ü!Ÿ™ðó
÷
 ‰%‹'ð 	ô —‘ðÜ¨Ô6Ð 7ð 8ð Ð ð ØÐ ð ä mÔ4Ð 5ð 6ô €ð äÓÐ ð ð#		ó€Ið* ”—‘ð	óñ €Iñ ØÐ(¬¯©×)BÑ)BÐ(CÀ2ÐFÑFˆ	Ü”5—=‘= &Ô)ØÐ1´%·-±-×2DÑ2DÐ1EÀRÐHÑHˆIÜ”5—=‘= -Ô0ØÐ0´·±×1JÑ1JÐ0KÈ6ÐRÑRˆIØÔ.Ó0Ñ0ˆ	ð 	Gð ó*ð4Øð4à (ð4ð !)ð4ð 
ö	4ôl (+£uÐÜ'*£uÐàÐ,Ð-Ð-=Ð>Ñ>€Iä ×-Ñ-ò HˆÜ"×-Ñ-¨cÓ2ˆð	HØÑ2ØÐ.Ð0Fóñ ˆIñ " &Ó)ˆGà$˜I Q s eÐ,ˆKä7¸Ó?ˆKØ%×-Ñ-Ø�w�i˜qÐ! T¨+¨°aÐ#8¸!óˆKð ˜Ñ$ˆIØÐ4Ð5°\À+ÀÈcÐRÑR‰Ið!Hô* Ô×*Ñ*Ó+¨aÒ/ØÐ0Ð1°ÔAR×A`ÑA`Ð@aÐacÐdÑdˆ	ð Ô!×)Ñ)¨"ÀÔEÑE€Iä˜¨{Ô;€Fà€Iô 1°Ó4ÐÜÐ 3°TÓ:ó 4<Ñˆ�SÜ�cœC¤§¡Ð.Ô/Ø�M‰M˜+ sÕ+Ü˜œUŸ\™\Ô*à�M‰M˜+ sÕ+Øˆ[Ø�L‰L˜Õ%Ü˜Ô-Ô.Ø�M‰M˜+ s×'<Ñ'<Õ=Ü˜œUŸX™X×/Ñ/Ô0Ø×Ñ˜[¨#Õ.à×Ñ˜{¨CÔ0ô
 �sœEŸL™LÔ)ô ˜3Ÿ8™8Ÿ=™=¬%¯,©,Ô7Ø—‘—‘Ð)à'*§x¡x§}¡}ˆI”c˜#Ÿ(™(“mÓ$Ü˜œUŸ\™\Ö*à—y‘yò =�ä˜s¤E§L¡LÕ1Ü" 3§8¡8§=¡=´%·,±,Õ?ØŸ™Ÿ™Ñ1à/2¯x©x¯}©}�Iœc #§(¡(›mÒ,ð=ð Ÿ*™*›,ò C�ä˜v¤u§|¡|Õ4Ü" 6§;¡;×#3Ñ#3´U·\±\ÕBØŸ™×(Ñ(Ñ4à28·+±+×2BÑ2B�Iœc &§+¡+Ó.Ò/ðCð ×)Ñ)Ó+ˆGØ—^‘^Ó%ˆFÜ˜&¤%§,¡,Ö/Ø—{‘{×'Ñ'�Ø"ŸK™K×1Ñ1�	Ø×,Ñ,ò <�CÜ" 3›x�HØ yÒ0°YÑ5JØ(×:Ñ:×>Ñ>¸sÓC˜ØÑ+Ü25°d³)˜I hÒ/ò<ð_4<ñl Ø—Y‘Yñ 
Ü17¸	¿¹Ó8IÓ1Jô
ó 
ˆ
ð "�l $ y kÐ2ˆ	ô
 6°bÓ9€KÚÜ9BÐCVÓ9W×X©I¨C°˜d C™iÐXÐÑXØ.9ó 	RÑ*ˆLÐ*Ø,×0Ñ0°Ó>ˆKØ0×4Ñ4Ð5EÓFˆOØÑ&¨?Ñ+Fà—‘×$Ñ$ØWôð —‘×$Ñ$Ð%BÔCØ—‘×$Ñ$Ð'BÀ;À-ÈqÐ%QÔRØ—‘×$Ñ$Ø5°oÐ5FÀaÐHôð —‘×$Ñ$Øbôð —‘×$Ñ$Ð%DÔEØ—‘×$Ñ$Ð%QÔRØ—‘×$Ñ$Ð%PÖQð%	Rð( —l‘l“n€OØ—Y‘Y˜Ó/€NØ� $Ñ&Ñ&€IàÐ"Ñ"€IØÐøôY ò 	HØÐCÑCˆIØÐAÀ!ÀÀBÐGÑGŽIûð	Hüód Ys   ÇA_Ú	`ß	_?ß&_:ß:_?Úrun)r  r‘   ÚcommandÚaccuracyÚtracing_modeÚ	check_strr	  c               ó*  — t        d„ |D «       «      r| j                  d«       y |�t        |«      }t        |«      }t	        |«      dkD  }| j                  t        |||||
|¬«      «       |€d|v }|€d}t        d„ |D «       «      rd}| j                  d	«       | j                  d
«       |r&| j                  d«       | j                  d|›d�«       | j                  d|›d|›d|›d|›d|	›d|›d|›d|›d|	›d�«       |r| j                  d«       y y )Nc              3  óŒ   K  — | ]<  }t        |t        j                  j                  j                  j
                  «      –— Œ> y ­wrè   )rF   rG   rH   ÚexperimentalÚ_backward_stateÚBackwardStaterÀ   s     r   rt   z#save_graph_repro.<locals>.<genexpr>#  s5   è ø€ ò àô 	�3œŸ™×-Ñ-×=Ñ=×KÑK×Lñùs   ‚AAzGRepro is not generated due to existence of BackwardState in graph inputr   r  r·   Úrealc              3  óT   K  — | ]   }t        |t        «      rŒt        |«      –— Œ" y ­wrè   )rF   r1   r5   )rr   Úas     r   rt   z#save_graph_repro.<locals>.<genexpr>A  s%   è ø€ ò 
Ø$%´ZÀÔCSÕ5TÔ˜Q×ñ
ùs   ‚(˜(Úsymboliczif __name__ == '__main__':
z8    from torch._dynamo.repro.after_aot import run_repro
zH    from torch._dynamo.repro.after_aot import setup_fake_process_groups
z    setup_fake_process_groups(r  zE    with torch.no_grad():
        run_repro(mod, load_args, accuracy=z
, command=z, save_dir=z, tracing_mode=z, check_str=z_)
        # To run it separately, do 
        # mod, args = run_repro(mod, load_args, accuracy=z, command='get_args', save_dir=z)
        # mod(*args)z"
    dist.destroy_process_group()
)rË   r˜   r0   rn   rñ   ru  )ÚfdrK   rC   rÕ   r  r‘   rw  rx  ry  rz  r	  Údistributed_infor
  s                r   r•   r•     s~  € ô ñ àôô ð 	�‰ØUô	
ð 	àÐÜ+¨HÓ5ˆô 1°Ó4ÐÜÐ.Ó/°!Ñ3Ðà‡H�HÜ&ØØØ'ØØ#Ø 3ô	
ô	ð ÐØ -Ð/ˆØÐØˆÜñ 
Ø)-ô
ô 
ð &ˆLØ‡H�HÐ+Ô,Ø‡H�HÐHÔIñ Ø
�‰ØWô	
ð 	�‰Ð1Ð2BÐ1EÀSÐIÔJà‡H�Hð6Ø6>°\ÀÈGÈ;ð WØ�<˜¨|Ð.>¸lÈ9È-ð XDàDLÀ<ð PØ�<˜¨|Ð.>¸lÈ9È-ð Xð	 ôñ Ø
�‰Ð7Õ8ð r   )rx  c          	     óX  — t         j                  j                  t        «       d«      }t         j                  j	                  |«      st        j
                  |d¬«       t         j                  j                  |t        | j                  j                  «      › d�«      }t        j                  dt        | j                  j                  «      |«       t        |d«      5 }t        || ||||¬«       d d d «       t        j                  «       }t         j                  j                  |d«      }	 t        j                  ||«       t        j                  d	|«       t         rt#        |«      j%                  «        y y # 1 sw Y   Œ‹xY w# t&        $ r t        j                  d
|«       Y y w xY w)NÚcheckpointsT©Úexist_okú.pyz&Writing checkpoint with %s nodes to %sr’   )r‘   rx  zrepro.pyz(Copying repro file for convenience to %szNo write permissions for %s)ÚosÚpathrð   r'   ÚexistsÚmakedirsrñ   r>   r?   r™   rÉ   r—   r•   ÚgetcwdÚshutilÚcopyfileÚuse_buckr   r˜   ÚOSError)	rK   rC   rÕ   rx  ÚsubdirÚ	file_namer„  ÚcurdirÚ
repro_paths	            r   rÊ   rÊ   ^  s4  € ô �W‰W�\‰\œ,›.¨-Ó8€FÜ�7‰7�>‰>˜&Ô!Ü
�‰�F TÕ*Ü—‘—‘˜V¬¨B¯H©H¯N©NÓ(;Ð'<¸CÐ%@ÓA€IÜ‡K�KØ0´#°b·h±h·n±nÓ2EÀyôô 
ˆi˜Ó	ð 
 ÜØ��D˜-°&À8õ	
÷
ô �Y‰Y‹[€FÜ—‘—‘˜f jÓ1€Jð?Ü�‰˜	 :Ô.Ü�‰Ð>À
ÔKÝÜ˜YÓ'×-Ñ-Õ/ð ÷
ð 
ûô ò ?Ü�‰Ð1°:Ö>ð?ús   ÃE;Ä.AF Å;FÆF)Æ(F)c                ó:  — t        j                  «       }t        j                  j	                  t        «       d«      }t        j                  j                  |«      st        j                  |d¬«       t        || |||d¬«       t        |j                  «       «      S )Nr‡  Trˆ  Úminify)r‘   rw  )r“   r”   r‹  rŒ  rð   r'   r�  rŽ  r•   r#   r–   )rK   rC   rÕ   rÔ   r”  s        r   rÅ   rÅ   €  sf   € ô �+‰+‹-€Cä�W‰W�\‰\œ,›.¨-Ó8€FÜ�7‰7�>‰>˜&Ô!Ü
�‰�F TÕ*Ü�S˜"˜d M¸FÈHÕUÜ! #§,¡,£.Ó1Ð1r   c                ó2  — |€i }t         j                  j                  t        j                  «       d«      }t         j                  j	                  |«      st        j
                  |d¬«       t         j                  j                  |t        t        j                  «       «      d d › d�«      }	t        |	d«      5 }
t        |
| |||d|||¬«	       d d d «       t         j                  j                  «       }i |¥|¥}t        rt        |	«      j                  d	¬
«      }nt         j"                  |	g}t%        «       5 }t%        «       5 }t'        j(                  |||||¬«      5 }|j+                  «        |j-                  d«       |j-                  d«       t/        t1        j2                  |j5                  «       j7                  d«      d¬«      t         j8                  ¬«       t/        t1        j2                  |j5                  «       j7                  d«      d¬«      t         j:                  ¬«       |j<                  dk7  cd d d «       cd d d «       cd d d «       S # 1 sw Y   �Œ‰xY w# 1 sw Y   nxY wd d d «       n# 1 sw Y   nxY wd d d «       y # 1 sw Y   y xY w)NÚisolateTrˆ  é   rŠ  r’   úminifier-query)r‘   rw  rx  ry  rz  F)Ú	print_msg)ÚcwdÚstdoutÚstderrÚenvr   zutf-8z>>  )Úprefix)Úfile)r‹  rŒ  rð   r�  r�  rŽ  rA   ÚuuidÚuuid4r—   r•   Úenvironrà   r’  r   r˜   ÚsysÚ
executabler   Ú
subprocessÚPopenÚwaitÚseekÚprintrü   ÚindentÚreadÚdecoder   r¡  Ú
returncode)Úfx_grC   rÕ   r¢  r‘   rx  ry  rz  r”  r•  r„  Únew_envÚcmdr   r¡  Úps                   r   Úisolate_failsr·  Œ  s  € ð €{ØˆÜ�W‰W�\‰\œ"Ÿ)™)›+ yÓ1€FÜ�7‰7�>‰>˜&Ô!Ü
�‰�F TÕ*Ü—‘—‘˜V¬¬D¯J©J«LÓ(9¸"¸1Ð(=Ð'>¸cÐ%BÓC€IÜ	ˆi˜Ó	ð 
 ÜØØØØØØ$ØØ%Øõ
	
÷
ô �j‰j�o‰oÓ€GØ �Ð ˜CÐ €GÝÜ˜yÓ)×/Ñ/¸%Ð/Ó@‰ä�~‰~˜yÐ)ˆä‹ð!Ø!Ü‹ð!à!Ü×ÑØØØØØô	
ð!ð à	�‰Œà�‰�AŒØ�‰�AŒÜÜ�O‰O˜FŸK™K›M×0Ñ0°Ó9À&ÔIÜ—‘õ	
ô 	Ü�O‰O˜FŸK™K›M×0Ñ0°Ó9À&ÔIÜ—‘õ	
ð
 �|‰|˜qÑ ÷1!÷ !÷ !ó !÷)
ñ 
ú÷(!ð !ú÷ !÷ !ñ !ú÷ !÷ !ñ !úsO   Â:IÄ9JÅI8ÅCI#È:	I8É	JÉI É#I,É(I8É/	JÉ8J	É=JÊJc                ó  ‡	— t        d„ |D «       «      Š	dˆ	fd„}ddlm} 	  | |Ž }t        |t        t
        f«      st        dt        |«      › �«      ‚t        d„ |D «       «      rt        d«      ‚	  |«        	 t        | |«      } || |«      }t        |t        «      rt        d	«      ‚ ||«        |«        y# t        $ r Y yw xY w# t        $ r2}|�|t        |«      vrY d }~yt        t        |«      «       Y d }~y
d }~ww xY w)Nc              3  ó†   K  — | ]9  }t        |t        j                  «      xr |j                  j                  d k7  –— Œ; y­wrº   r¼   rÀ   s     r   rt   z!inductor_fails.<locals>.<genexpr>Ó  s5   è ø€ ò ØGJŒ
�3œŸ™Ó%ÒB¨#¯*©*¯/©/¸UÑ*BÓBñùrÂ   c                 ó†   •— ‰ r>t         j                  j                  «       rt         j                  j                  «        y y y rè   )rG   rÌ   rÍ   rÎ   )Úhas_gpus   €r   Úsynczinductor_fails.<locals>.sync×  s0   ø€ Ù”u×(Ñ(×5Ñ5Ô7ä×Ñ×)Ñ)Õ+ð 8ˆ7r   r   ©Úcompile_fx_innerz+Expected result to be a tuple or list, got c              3  óH   K  — | ]  }t        |t        t        f«      –— Œ y ­wrè   )rF   Útupler…   )rr   rÑ   s     r   rt   z!inductor_fails.<locals>.<genexpr>ä  s   è ø€ Ò<°Œz˜!œe¤T˜]×+Ñ<ùs   ‚ "z0Result should not contain nested tuples or listsFú+compile_fx_inner should not return a stringT)rÛ   ÚNone)rË   Útorch._inductor.compile_fxr¾  rF   rÀ  r…   rª   r¿   rÏ   Ú_get_compile_argsrA   Úreprr®  )
r³  rC   rz  r¼  r¾  r)  Úcompile_argsÚcompile_modre  r»  s
            @r   Úinductor_failsrÈ  Ð  s  ø€ ô ñ ØNRôó €Gõ,õ
 <ð	Ù�t�ˆÜ˜&¤5¬$ -Ô0Ü Ø=¼dÀ6»l¸^ÐLóð ô Ñ<°VÔ<Ô<Ü Ð!SÓTÐTð =ñ
 	„FðÜ(¨¨tÓ4ˆÙ& t¨\Ó:ˆÜ�k¤3Ô'Ü Ð!NÓOÐOÙ�DÔÙŒð øô# ò Ùðûô ò ØÐ  Y´d¸1³gÑ%=ÜÜŒd�1‹gŒÜûð	ús0   ¡AB9 Á9?C Â9	CÃCÃ	DÃC>Ã%C>Ã>D©Úrequire_fp64r¶   c               óH   ‡— ddl mŠ 	 	 	 	 	 	 dˆfd„}t        | ||||¬«      S )Nr   r½  c                ó*   •—  ‰| t        | |«      «      S rè   )rÄ  )rK   Úinputsr¾  s     €r   Ú_compile_with_symbolic_argsz<inductor_accuracy_fails.<locals>._compile_with_symbolic_args  s   ø€ ñ   Ô$5°b¸&Ó$AÓBÐBr   rÉ  )rK   ré   rÍ  ú	list[Any]rÛ   ré   )rÃ  r¾  Úbackend_aot_accuracy_fails)r³  rC   rz  rÊ  r¶   rÎ  r¾  s         @r   Úinductor_accuracy_failsrÑ  ú  sG   ø€ õ <ðCØ ðCØ*3ðCà	õCô
 &ØØØ#Ø!Ø#ôð r   T)rµ   c                óŒ  ‡‡‡‡‡‡— ddl }|j                  d«      }i Ši Š|j                  «       D ]!  \  }}|j                  |«      r|‰|<   Œ|‰|<   Œ# ‰syt	        ‰j                  «       «      Š‰D �cg c]  }‰|   ‘Œ	 c}Š‰j                  «       D ��ci c]  \  }}|t        |d|› d�d«      “Œ c}}Št        |«      Š G ˆˆˆˆˆˆfd„dt        j                  «      }g }	‰D ]›  }t        ||   t        «      st        ||   «      n||   }
d	}|D ]7  }t        |t        j                  «      sŒ|j                  sŒ+|j                  } n |	j                  t        j                   |
t        j"                  |¬
«      «       Œ� t%        |«      D ]   \  }}|‰vsŒ|‰vsŒ|	j                  |«       Œ"  || «      |	fS c c}w c c}}w )a¥  Build a wrapper module that preserves symbolic relationships.

    Returns (wrapper_module, wrapper_args) where wrapper_args has carrier
    tensors in place of free-symbol symints, and the wrapper's forward()
    extracts SymInts from carrier.size(0), computes derived expressions,
    and delegates to the inner module.

    Returns None if the expressions don't contain free/derived structure
    (nothing to do).
    r   Nz^s\d+$z<derived arg ú>Úevalc                  ó8   •‡ — e Zd Zdˆ fd„Zdˆˆˆˆˆˆfd„Zˆ xZS )ú/_build_symbolic_wrapper.<locals>._SymIntWrapperc                ó0   •— t         ‰| �  «        || _        y rè   )ÚsuperÚ__init__Úinner)ÚselfrÚ  Ú	__class__s     €r   rÙ  z8_build_symbolic_wrapper.<locals>._SymIntWrapper.__init__E  s   ø€ Ü‰GÑÔØˆD�Jr   c                ó  •— |d t        ‰«       }|t        ‰«      d  }i }t        ‰«      D ]  \  }}||   j                  d«      ||<   Œ t        ‰j	                  «       «      D ]  \  }}‰|    t        |di i|«      |d|› �<   Œ! t        |«      }	g }
t        ‰«      D ]T  }|‰v r|
j                  |‰|      «       Œ|‰v r|
j                  |d|› �   «       Œ;|
j                  t        |	«      «       ŒV  | j                  |
Ž S )Nr   Ú__builtins__Ú	_derived_)rñ   rZ  r`   rY  rƒ   rÔ  Úiterr†   rJ   ÚnextrÚ  )rÛ  Ú	flat_argsÚcarriersÚotherÚsymsÚirl  ra  ÚcodeÚ
other_iterÚrebuiltÚderived_compiledÚderived_positionsÚ
free_orderÚfree_positionsÚfree_sym_namesÚn_argss              €€€€€€r   Úforwardz7_build_symbolic_wrapper.<locals>._SymIntWrapper.forwardI  s,  ø€ Ø Ð!2¤3 z£?Ð3ˆHØœc *›oÐ/Ð0ˆEà#%ˆDÜ(¨Ó8ò 5‘��8Ø!)¨!¡×!1Ñ!1°!Ó!4��X’ð5ô $Ð$4×$:Ñ$:Ó$<Ó=ò Q‘	��TØ! #Ò&Ü*.¨t°nÀbÐ5IÈ4Ó*P��y  Ð&Ò'ðQô ˜e›ˆJØˆGÜ˜6“]ò 5�Ø˜Ñ&Ø—N‘N 4¨°qÑ(9Ñ#:Õ;ØÐ+Ñ+Ø—N‘N 4¨)°A°3¨Ñ#8Õ9à—N‘N¤4¨
Ó#3Õ4ð5ð �4—:‘:˜wÐ'Ð'r   )rÚ  ú	nn.ModulerÛ   rÂ  )râ  r   rÛ   r   )r   r   r   rÙ  rð  Ú__classcell__)rÜ  rê  rë  rì  rí  rî  rï  s   @€€€€€€r   Ú_SymIntWrapperrÖ  D  s   ù„ õ	÷	(ö 	(r   ró  r»   )Údtyper¾   )ÚreÚcompilerƒ   Ú	fullmatchrY  Úkeysrñ   ÚnnÚModulerF   r$  rG   r½   Úis_cudar¾   rJ   ÚemptyÚint8rZ  )ÚmodrC   Úsymint_exprsrõ  Úfree_sym_rera  Úexpr_strræ  ró  Úwrapper_argsr7  r¾   r‚  rÁ   rê  rë  rì  rí  rî  rï  s                 @@@@@@r   Ú_build_symbolic_wrapperr    sÒ  ý€ ó à—*‘*˜YÓ'€KØ%'€NØ(*Ðà%×+Ñ+Ó-ò .‰ˆˆXØ× Ñ  Ô*Ø"*ˆN˜3Òà%-Ð˜cÒ"ð	.ñ Øô ˜×+Ñ+Ó-Ó.€JØ1;Ö<¨A�n QÓ'Ò<€Nð
 /×4Ñ4Ó6÷áˆC�ð 	ŒW�X ¨s¨e°1Ð5°vÓ>Ñ>óÐô
 �‹Y€F÷(ó (œŸ™ô (ð< !€LØò PˆÜ#-¨d°1©g´sÔ#;Œs�4˜‘7Œ|ÀÀaÁˆØˆØò 	ˆAÜ˜!œUŸ\™\Õ*¨q¯y«yØŸ™�Ùð	ð 	×ÑœEŸK™K¨´E·J±JÀvÔNÕOðPô ˜D“/ò %‰ˆˆ3Ø�NÒ" qÐ0AÒ'AØ×Ñ Õ$ð%ñ ˜#Ó Ð,Ð,ùòm =ùós   Á4F;ÂG c                óÄ  — t        |j                  «       «      rt        d«      ‚|j                  «       D ]3  \  }}|j	                  «       t
        kD  sŒt        j                  d|«       Œ5 t        |d«      st        j                  d«       n/|j                  dkD  r t        j                  d|j                  «       t        «       } ||«       t        d|j                  ¬«      5 }t        | j                  |¬	«      } ||«       |j                  }d d d «        t!        || j"                  ¬
«      Ž }dt$        j&                  j(                  _        ||fS # 1 sw Y   ŒFxY w)Nz*Repro graph should not have any parametersz¥Constant %s was not serialized, generated random data instead. If you think this is affecting you, please comment on https://github.com/pytorch/pytorch/issues/100468Ú_versionzzload_args does not have a _version attribute, please file a bug to PyTorch and describe how you generate this repro scriptr   z¾load_args is version %s, but this version of PyTorch only supports version 0.  We will try to run it anyway but there may be an incompatibility; if so, try upgrading your version of PyTorch.zLoading inputs©ÚdescÚtotal)r‘   Úpbar)ry  T)rË   Únamed_parametersrª   Únamed_buffersÚnumelr&   r™   rÉ   r?  r  r)   r6   r  r$   r‘   rC   r3   ry  rG   Ú	_inductorr8   Úgenerate_intermediate_hooks)	Úoptionsrþ  Ú	load_argsÚnÚbÚ
nop_readerr	  Úinput_readerrC   s	            r   Úrepro_commonr  s  sE  € ô ˆ3×ÑÓ!Ô"ÜÐIÓJÐJØ×!Ñ!Ó#ò ‰ˆˆ1Ø�7‰7‹9Ô0Ó0Ü�K‰KðCð õ	ðô �9˜jÔ)Ü�‰ð>õ	
ð
 ×Ñ Ò!Ü�K‰Kð@ð ×"Ñ"ô	ô  Ó!€JÙˆjÔä	Ð#¨:×+;Ñ+;Ô	<ð !ÀÜ"¨G×,<Ñ,<À4ÔHˆÙ�,ÔØ× Ñ ˆ÷!ð :Œ'�# G×$8Ñ$8Ô
9¸4Ð
@€Cð :>„E‡O�O×ÑÔ6à�ˆ9Ð÷#!ð !ús   Ã%,EÅEc                ó$  — | j                   j                  D �cg c]  }|j                  dk(  sŒ|‘Œ }}|s|S t        d„ |D «       «      }|s|S t	        ||«      D ��cg c]!  \  }}|j
                  j                  d|«      ‘Œ# c}}S c c}w c c}}w )uÅ  Extract FakeTensor/SymInt args from the traced graph for compilation.

    When repro_common traces with tracing_mode='symbolic', the resulting
    GraphModule's placeholder nodes carry FakeTensor/SymInt metadata.
    compile_fx_inner needs these (not the concrete args) so that Inductor
    generates proper symbolic-size bindings in the output code.

    For tracing_mode='real', concrete args are fine â€” we must NOT extract
    FakeTensor metadata because different nodes may have FakeTensors from
    different FakeTensorModes, causing a FakeTensorMode mismatch assertion
    in Inductor.  We detect symbolic tracing by checking for SymInt values,
    which only exist when tracing_mode='symbolic'.
    r=   c              3  ó‚   K  — | ]7  }t        |j                  j                  d «      t        j                  «      –— Œ9 y­w)r0  N)rF   ÚmetarE   rG   rF  )rr   r  s     r   rt   z$_get_compile_args.<locals>.<genexpr>¼  s(   è ø€ ÒWÀQ”Z §¡§
¡
¨5Ó 1´5·<±<×@ÑWùs   ‚=?r0  )r>   r?   r@   rË   rE  r  rE   )rþ  rC   r  ÚplaceholdersÚ
has_symintr‚  s         r   rÄ  rÄ  §  sƒ   € ð  #Ÿy™yŸ™ÖH˜!°!·$±$¸-Ó2G’AÐH€LÐHÙØˆô
 ÑWÈ,ÔWÓW€JÙØˆÜ-0°¸tÓ-D×E¡T Q¨ˆA�F‰F�J‰J�u˜aÕ ÓEÐEùò Iùó Fs   ™B®BÁ&B)rï   rx  Ústrict_accuracyz6dict[str, Callable[[torch.fx.GraphModule, Any], bool]]ÚACCURACY_FAILSc                óð   — t        | ||«      \  }}t        j                  t        | j                     | j
                  ¬«      } |||«      rt        j                  d«       y t        j                  d«       y )N©rz  r¥   r   )r  rÝ   rÞ   r  rx  rz  r¨  Úexit)r  rþ  r  rC   Úfail_fns        r   Úrepro_minifier_queryr!  Ï  s]   € Ü˜W c¨9Ó5�I€CˆÜ×ÑÜ�w×'Ñ'Ñ(Ø×#Ñ#ô€Gñ ˆs�DÔÜ�‰��ä�‰��r   c                óÀ  — ddl m} t        | ||«      \  }}| j                  dk7  rdnd}t        j
                  j                  «       dk\  rdnd}dt        |«      i}| j                  r>t        j                  t        ||| j                  | j                  | j                  ¬	«      }nt        | j                     }t        j                   d ¬
«      5   |||t        j                  || j"                  ¬«      t        j                  t$        |¬«      | j                  | j&                  | j(                  | j*                  | j,                  ¬«	       d d d «       y # 1 sw Y   y xY w)Nr   )Úminifierrï   Úinductor_accuracyr�   r7   r¥   ÚCUDA_VISIBLE_DEVICES)r¢  rÕ   r‘   rx  ry  r¨   r  )rÕ   )Úmodule_failsÚ
dump_stater‘   Úoffload_to_diskÚskip_offloadÚskip_sanityÚmax_granularity)Úfunctorch.compiler#  r  rx  rG   r  Údevice_countrA   r›  rÝ   rÞ   r·  r‘   ry  r  r8   r«   rz  rÊ   r(  Úskip_saving_eager_intermediatesr*  r+  )	r  rþ  r  r#  rC   rÕ   Úfavored_deviceÚenv_variablesr&  s	            r   Úrepro_minifyr1  Û  s,  € Ý*ä˜W c¨9Ó5�I€CˆØ+2×+;Ñ+;¸rÒ+AÑ'Àz€MäŸ*™*×1Ñ1Ó3°qÒ8‘Q¸a€NØ+¬S°Ó-@ÐA€Mð ‡‚Ü ×(Ñ(ÜØØ'Ø×%Ñ%Ø×%Ñ%Ø ×-Ñ-ô
‰ô & g×&6Ñ&6Ñ7ˆä	�‰ $Ô	'ñ 
ÙØØÜ"×*Ñ*¨<À7×CTÑCTÔUÜ ×(Ñ(Ü)¸ôð ×%Ñ%Ø#×3Ñ3Ø ×@Ñ@Ø×+Ñ+Ø#×3Ñ3õ	
÷
÷ 
ñ 
ús   ÃA<EÅEc                ó*  ‡ ‡‡‡‡‡— ddl m} ddlm} t	        ‰ ||«      \  }}t        j                  |«      }t        ||«      }t        d¬«      5   |||«      }d d d «       t        d   d   }	t        «       Šdˆˆ ˆˆfd„}
t        j                  j                  j                  ‰ j                  ‰ j                   ¬	«      Št        j                  j                  j#                  ‰ j                  «      Št%        |«      } ||
«      5  t        d
|	¬«      5 Št'        t(        «      rt+        d«      ‚ ||«       |rt+        d«      ‚	 d d d «       d d d «       dd„Šdˆˆˆˆfd„}‰ j,                  sHt%        |«      } ||«      5  t        d|	¬«      5 Š |«       |rt+        d«      ‚	 d d d «       d d d «        G ˆˆˆfd„dt.        j0                  «      }‰ j2                  sft5        t        j                  |«      t%        |«      «      \  }}t        d|	¬«      5 Š ||d«      j7                  |«       d d d «       |rt+        d«      ‚ G ˆˆˆˆˆfd„dt.        j0                  «      }‰ j,                  sft5        t        j                  |«      t%        |«      «      \  }}t        d|	¬«      5 Š ||«      j7                  |«       |rt+        d«      ‚	 d d d «        G ˆˆˆfd„dt.        j0                  «      }t        d|	¬«      5 Š ||«      j7                  |«       d d d «       |rt+        d«      ‚y # 1 sw Y   �Œ×xY w# 1 sw Y   �ŒøxY w# 1 sw Y   �ŒýxY w# 1 sw Y   �Œ±xY w# 1 sw Y   �Œ¶xY w# 1 sw Y   �ŒAxY w# 1 sw Y   Œ¯xY w# 1 sw Y   ŒqxY w)Nr   r½  )Úintermediate_hookÚ	Compiling)r  r�   Úintermediate_hooksc                óÂ   •— ‰j                  | «       ‰j                  s0‰j                  t        j                  j                  d| «      |«       ‰j                  d«       y )Nr�   r¥   )r   Ú"skip_saving_inductor_intermediatesÚwrite_tensorr‹  rŒ  rð   Úupdate)r/  r0  Úknown_namesr  r	  rf  s     €€€€r   Ú	save_hookz repro_analyze.<locals>.save_hook  sB   ø€ Ø�‰˜ÔØ×9Ò9Ø×Ñ¤§¡§¡¨Z¸Ó >ÀÔDØ�‰�A�r   r5  zSaving inductor intermediatesr  rÁ  z.new_args should be empty after compiled() callc                óÔ   — t        t        | «      «      D �cg c]  }| |   ||   k7  sŒ|‘Œ }}|D �cg c]  }| |   ||   f‘Œ }}|sy dj                  d„ |D «       «      S c c}w c c}w )Nz and c              3  ó0   K  — | ]  \  }}|› d |› �–— Œ y­w)z != Nr   )rr   r‚  r  s      r   rt   z8repro_analyze.<locals>.compare_tuples.<locals>.<genexpr>2  s   è ø€ ÒF±$°!°Q 1 # T¨!¨¤ÑFùr8  )r†   rñ   rð   )Útuple1Útuple2ræ  Údiff_indicesÚdiff_valuess        r   Úcompare_tuplesz%repro_analyze.<locals>.compare_tuples+  sq   € Ü#(¬¨V«Ó#5ÖP˜a¸À¹ÀfÈQÁiÓ9OšÐPˆÐPØ7CÖD°!˜˜q™	 6¨!¡9Ò-ÐDˆÐDáØà—<‘<ÑF¸+ÔFÓFÐFùò QùÚDs   —A ¨A ²A%c                óî   •— ‰j                  |«      }‰j                  t        j                  j	                  d| «      «      } ‰||«      }|�‰j                  d| › d|› d�«       ‰j                  d«       y )Nr�   zNONDETERMINISTIC INDUCTOR at ú (ú)r¥   )Úcompute_tensor_metadataÚread_tensor_metadatar‹  rŒ  rð   r˜   r9  )	r/  r0  r  Úmeta2ÚreasonrB  r	  Úreaderrf  s	        €€€€r   Ú
check_hookz!repro_analyze.<locals>.check_hook4  sk   ø€ Ø×-Ñ-¨cÓ2ˆØ×+Ñ+¬B¯G©G¯L©L¸ÀTÓ,JÓKˆÙ  eÓ,ˆØÐØ�J‰JÐ6°t°f¸B¸v¸hÀaÐHÔIØ�‰�A�r   zChecking inductor determinismc                  ó4   •‡ — e Zd Zdˆ fd„Zdˆ ˆˆˆfd„Zˆ xZS )ú#repro_analyze.<locals>.WriterInterpc                ó2   •— t         ‰| �  |«       || _        y rè   )rØ  rÙ  r”  )rÛ  rþ  r”  rÜ  s      €r   rÙ  z,repro_analyze.<locals>.WriterInterp.__init__G  s   ø€ Ü‰GÑ˜SÔ!Ø ˆD�Kr   c                óÜ   •— t         ‰| �  |«      }|j                  }|‰v rK‰j                  d«       ‰j	                  t
        j                  j                  | j                  |«      |«       |S )Nr¥   )	rØ  Úrun_noder/  r9  r8  r‹  rŒ  rð   r”  )rÛ  r  Úrr/  rÜ  r:  r	  rf  s       €€€€r   rP  z,repro_analyze.<locals>.WriterInterp.run_nodeK  sV   ø€ Ü‘Ñ  Ó#ˆAØ—6‘6ˆDØ�{Ñ"Ø—‘˜A”Ø×#Ñ#¤B§G¡G§L¡L°·±¸dÓ$CÀQÔGØˆHr   )rþ  ztorch.nn.Moduler”  rA   rÛ   rÂ  ©r  ztorch.fx.NoderÛ   r   )r   r   r   rÙ  rP  rò  )rÜ  r:  r	  rf  s   @€€€r   ÚWriterInterprM  F  s   ù„ õ	!÷	ô 	r   rS  zSaving float64 intermediatesÚfloat64z/new_args should be empty after boxed_run() callc                  ó,   •‡ — e Zd Zdˆ ˆˆˆˆˆfd„Zˆ xZS )ú(repro_analyze.<locals>.ExactReaderInterpc                ó.  •— t         ‰| �  |«      }|j                  }|‰	v rt‰j                  |«      }‰j	                  t
        j                  j                  d|«      «      } ‰||«      }|�‰
j                  d|› d|› d�«       ‰
j                  d«       |S )NrT  zNONDETERMINISTIC FLOAT64 at rD  rE  r¥   )
rØ  rP  r/  rF  rG  r‹  rŒ  rð   r˜   r9  )rÛ  r  rQ  r/  r  rH  rI  rÜ  rB  r:  r	  rJ  rf  s          €€€€€€r   rP  z1repro_analyze.<locals>.ExactReaderInterp.run_node]  s�   ø€ Ü‘Ñ  Ó#ˆAØ—6‘6ˆDØ�{Ñ"Ø×5Ñ5°aÓ8�Ø×3Ñ3´B·G±G·L±LÀÈDÓ4QÓR�Ù'¨¨eÓ4�ØÐ%Ø—J‘JÐ!=¸d¸VÀ2ÀfÀXÈQÐOÔPØ—‘˜A”ØˆHr   rR  ©r   r   r   rP  rò  )rÜ  rB  r:  r	  rJ  rf  s   @€€€€€r   ÚExactReaderInterprV  \  s   ù„ ÷
	ö 
	r   rY  zChecking float64 determinismc                  ó(   •‡ — e Zd Zdˆ ˆˆˆfd„Zˆ xZS )ú#repro_analyze.<locals>.ReaderInterpc                ó¼  •‡‡— t         ‰| �  |«      }|j                  Š‰‰	v r¹‰j                  t        j
                  j                  d‰«      «      }‰j                  t        j
                  j                  d‰«      «      }dŠd	ˆˆˆ
fd„}t        |||t        j                  j                  j                  d|¬«      s‰st        d«      ‚‰
j                  d«       |S )
Nr�   rT  Fc                ó>   •— dŠ‰j                  d‰› d| |z  › �«       y )NTzDIVERGED at z: )r˜   )ÚmsgrC   Úloggedr/  r	  s     €€€r   Ú	log_errorz?repro_analyze.<locals>.ReaderInterp.run_node.<locals>.log_error}  s%   ø€ à!�FØ—J‘J ¨d¨V°2°c¸D±j°\ÐBÕCr   T)ÚtolÚ	equal_nanr`  z"Divergence detected but not loggedr¥   )r^  rA   rC   r   rÛ   rÂ  )rØ  rP  r/  Úread_tensorr‹  rŒ  rð   r-   rG   Ú_dynamor8   Úrepro_tolerancerª   r9  )rÛ  r  rQ  r�   rT  r`  r_  r/  rÜ  r:  r	  rJ  s         @@€€€€r   rP  z,repro_analyze.<locals>.ReaderInterp.run_nodeu  s¹   ú€ Ü‘Ñ  Ó#ˆAØ—6‘6ˆDØ�{Ñ"Ø!×-Ñ-¬b¯g©g¯l©l¸:ÀtÓ.LÓM�Ø ×,Ñ,¬R¯W©W¯\©\¸)ÀTÓ-JÓK�Ø�÷Dô
 ØØØÜŸ™×,Ñ,×<Ñ<Ø"Ø'õñ "Ü,Ð-QÓRÐRØ—‘˜A”ØˆHr   rR  rX  )rÜ  r:  r	  rJ  s   @€€€r   ÚReaderInterpr[  t  s   ù„ ÷	ô 	r   rf  zChecking divergencez+args should be empty after boxed_run() call)r/  rA   r0  r   rÛ   rÂ  )r>  ú
tuple[Any]r?  rg  rÛ   rê   )rÃ  r¾  Útorch._inductor.hooksr3  r  rà   rá   rÄ  r6   r,   r  rG   ÚutilsÚ_content_storeÚContentStoreWriterr‘   r	  ÚContentStoreReaderr+   rF   rA   rª   Úskip_check_deterministicrH   ÚInterpreterÚ!skip_saving_float64_intermediatesr   Ú	boxed_run)r  rþ  r  r¾  r3  rC   rÇ  rÆ  Úcompiledr  r;  Únew_argsrK  rS  Únew_modrY  rf  rB  r:  r	  rJ  rf  s   `                @@@@@r   Úrepro_analyzert    sY  ý€ Ý;Ý7ä˜W c¨9Ó5�I€Cˆô —-‘- Ó$€KÜ$ [°$Ó7€LÜ	�;Ô	ñ ?Ù# K°Ó>ˆ÷?ä�ZÑ Ð!5Ñ6€Eä“%€K÷ð ô �[‰[×'Ñ'×:Ñ:Ø×Ñ g×&9Ñ&9ð ;ó €Fô �[‰[×'Ñ'×:Ñ:¸7×;KÑ;KÓL€Fä˜DÓ!€Há˜)Ó$ñSäÐ1¸Ô?ðSàCGä�h¤Ô$Ü Ð!NÓOÐOÙ�ÔÙÜ Ð!QÓRÐRð ÷S÷ SóG÷ð ð ×+Ò+Ü Ó%ˆá˜jÓ)ñ	WäÐ5¸UÔCð	WàGKá�XÔÙÜ$Ð%UÓVÐVð ÷	W÷ 	W÷ð ”r—~‘~ô ð ×4Ò4Ü(¬¯©°sÓ);¼\È$Ó=OÓPÑˆ�ÜÐ5¸UÔCð 	AÀtÙ˜ )Ó,×6Ñ6°xÔ@÷	AáÜ Ð!RÓSÐS÷ò œBŸN™Nô ð ×+Ò+Ü(¬¯©°sÓ);¼\È$Ó=OÓPÑˆ�ÜÐ5¸UÔCð 	XÀtÙ˜gÓ&×0Ñ0°Ô:ÙÜ$Ð%VÓWÐWð ÷	X÷ð ”r—~‘~ô ô6 
Ð(°Ô	6ð *¸$Ù�SÓ×#Ñ# DÔ)÷*áÜÐJÓKÐKð ÷E?ñ ?ú÷$Sñ Sú÷ Sñ Sú÷:	Wñ 	Wú÷ 	Wñ 	Wú÷2	Añ 	Aú÷,	Xð 	Xú÷D*ð *úsx   Á
L/ÄM	Ä1L<ÅM	ÆM#ÆMÆ'M#ÈM0Ê)%M=ÌN	Ì/L9Ì<M	ÍM	Í	MÍM 	ÍM#Í#M-Í0M:Í=NÎ	Nc                ó*   — t        | ||«      \  }}||fS rè   )r  )r  rþ  r  rC   s       r   Úrepro_get_argsrv  •  s    € ô ˜W c¨9Ó5�I€CˆØ�ˆ9Ðr   c                óî  — ddl m} t        | ||«      \  }}t        j                  |«      }t        ||«      } |||«      }t        |t        «      rt        d«      ‚| j                  dk7  r*t        |||dt        j                  ¬«      st        d«      ‚y  |t        |«      «       t        d„ |D «       «      r>t         j"                  j%                  «       rt         j"                  j'                  «        y y y )	Nr   r½  rÁ  rï   Tr´   r¸   c              3  ó†   K  — | ]9  }t        |t        j                  «      xr |j                  j                  d k7  –— Œ; y­wrº   r¼   rÀ   s     r   rt   zrepro_run.<locals>.<genexpr>µ  s8   è ø€ ò àô ˜3¤§¡Ó-ÒJ°#·*±*·/±/ÀUÑ2JÓJñùrÂ   )rÃ  r¾  r  rà   rá   rÄ  rF   rA   rª   rx  r*   r8   rÈ   r   r…   rË   rG   rÌ   rÍ   rÎ   )r  rþ  r  r¾  rC   rÇ  rÆ  rq  s           r   Ú	repro_runry  œ  sæ   € Ý;ä˜W c¨9Ó5�I€Cˆä—-‘- Ó$€KÜ$ [°$Ó7€LÙ ¨\Ó:€HÜ�(œCÔ ÜÐJÓKÐKà×Ñ˜2Òô ØØØØÜ ×4Ñ4õ
ô  Ð 7Ó8Ð8ð
ñ 	”�d“Ôäñ àôô ô ×!Ñ!×.Ñ.Ô0ä×Ñ×)Ñ)Õ+ð 1ð	r   rï   )rw  rx  r‘   ry  Ú
patch_coderz  c               óN  ‡‡‡— |D ]  }	t         j                  d|	«       Œ ‰du rdŠn‰du rdŠ|�t         j                  d«       t        j                  d|› d|› d	‰›d
‰›d‰›d|›d�t        j                  ¬«      }
d<ˆˆˆfd„}|
j                  ddd¬«      }|j                  dd¬«      } ||«       |j                  dd¬«      } ||«       |j                  dd¬«      } ||«       |j                  «       }|j                  dddd¬«       |j                  ddd d!¬"«       |j                  d#dd$¬%«       |j                  d&dd'¬%«       |j                  d(dd)¬%«       |j                  d*t        d d+¬,«       |j                  d-t        |d.¬,«       |j                  d/d0¬«      } ||«       |j                  d1dd2¬%«       |j                  d3dd4¬%«       |j                  d5dd6¬%«       |j                  d7dd8¬%«       |j                  d9«      } ||«       |j                  d-t        |d.¬,«       d }t        t        j                  «      d:k  r|gt        j                  d:d  ¢}|
j                  |«      }t        t         t"        t$        t&        d;œ} ||j(                     || |«      S )=NzPUnrecognized kwarg %s; perhaps this repro was made on a newer version of PyTorchTrx  Frï   zHpatch_code no longer works on this version of PyTorch, silently ignoringzˆAn after_aot repro script, typically triggering a bug in PyTorch Inductor.
When run with no arguments, this script defaults to running 'z8'.
Extra flags may be available; to find out more, try 'zr --help'.
There are also alternate subcommands available, see below.

default settings on this script:
  accuracy=z
  tracing_mode=z
  save_dir=z
  check_str=rî   )ÚdescriptionÚformatter_classc                óB  •— | j                  «       }|j                  dddd‰d¬«       |j                  ddd‰d¬	«       |j                  d
ddd‰d¬«       | j                  dt        ‰dd¬«       | j                  dddd d¬«       | j                  dt        d‰d¬«       y )Nz--no-accuracyrx  Ústore_constrï   z>do not test accuracy, just run the module and see if it errors)ÚdestÚactionrI  ÚdefaultÚhelpz
--accuracyaÿ  test if the RMSE between the compiled module and the fp64 reference is greater
than eager and the fp64 reference. This is usually more reliable than the
standard allclose test, as we expect numeric differences from compiling, often
improving accuracy over eager.  RMSE test allows for compiled module to
diverge greatly from eager, as long as this divergence moves it closer to the
'true' mathematical value of the network.  Caveats: (1) double precision can
still suffer from rounding error, so it is not a perfect reference (see for
example 'Herbie: Automatically Improving Floating Point Accuracy') for
approaches that detect the necessary working precision and compute it in
arbitrary precision floating point; unfortunately, this is not practical for
tensor computation; (2) if there are not enough samples in the output being
compared, we may get unlucky and have an unlucky greater RMSE than eager; this
could be overcome by applying a more rigorous statistical test at some
p-value, which we leave for future work.
)r�  rI  r‚  rƒ  z--strict-accuracyr  až  by default, when doing accuracy minification we will reject reductions which
change the divergence from a floating point divergence to an integral/boolean
divergence.  This is because some operations like ReLU involve temporarily
sharp boundaries that smooth out again afterwards; without requiring
divergence on floating point, the minifier will often fixate on divergent
boolean tensor even though this is not the true source of the divergence.
However, rejecting these reductions makes it more difficult for the minifier
to make progress.  Using this option will let the minifier progress for ALL
divergences--you just might not end up with a useful repro in the end.z
--save-dirÚDIRz!directory where saved inputs live)r¿   r‚  Úmetavarrƒ  z--no-save-dirr‘   z(don't use any directory for saved inputs)r€  r�  rI  rƒ  z--tracing-modez{real,fake,symbolic}z>how to trace the repro module into a GraphModule with metadata)r¿   r…  r‚  rƒ  )Úadd_mutually_exclusive_groupÚadd_argumentrA   )ÚparserÚaccuracy_grouprx  r‘   ry  s     €€€r   Úcommon_flagszrun_repro.<locals>.common_flagsë  sò   ø€ Ø×<Ñ<Ó>ˆØ×#Ñ#ØØØ ØØØQð 	$ô 	
ð 	×#Ñ#ØØ ØØðð 	$ô 	
ð, 	×#Ñ#ØØØ Ø#Øð	Jð 	$ô 	
ð$ 	×ÑØÜØØØ4ð 	ô 	
ð 	×ÑØØØ ØØ;ð 	ô 	
ð 	×ÑØÜØ*Ø ØQð 	õ 	
r   rw  z{run,minify,analyze})r€  r…  Úrequiredrv  zjust run the repro)rƒ  r™  zrun the minifier on the reproÚget_argszget the argsz	--isolateÚ
store_truez9run in separate processes to avoid interference (default))r�  r‚  rƒ  z--no-isolater›  Ústore_falsez3speed up by running all compilation in same process)r€  r�  rƒ  z!--skip-saving-eager-intermediatesz+skip saving eager intermediates on --minify)r�  rƒ  z--offload-to-diskzYduring minification, offload delta debugging intermediates to disk.  Use if you're OOMingz--skip-sanityz@skip sanity check at beginning of minification on original graphz--max-granularityz;start at this granularity and work down; must be power of 2)r¿   r‚  rƒ  z--check-strzBrequire minified program to fail with error containing this stringÚanalyzez&run the accuracy analyzer on the reproz$--skip-saving-inductor-intermediatesz/skip saving inductor intermediates on --analyzez#--skip-saving-float64-intermediatesz!skip saving float64 intermediatesz--skip-check-deterministicz/skip checking that the network is deterministicz--stable-hashz>use SHA-1 checksum instead of fast (but possibly unsound) hashr�  r¥   )r™  r�  r�  rv  rŒ  )rˆ  zargparse.ArgumentParserrÛ   rÂ  )r™   rÉ   ÚargparseÚArgumentParserÚRawTextHelpFormatterÚadd_subparsersÚ
add_parserr†  r‡  r$  rA   rñ   r¨  ÚargvÚ
parse_argsr1  rt  r!  ry  rv  rw  )rþ  r  rw  rx  r‘   ry  rz  rz  rD   Úkrˆ  rŠ  Ú
subparsersÚ
parser_runÚparser_minifyÚparser_get_argsÚparser_minify_isolateÚparser_analyzeÚparser_minifier_queryrC   r  ÚCOMMAND_FNSs      ```                r   Ú	run_repror   ¿  s„  ú€ ð ò 
ˆÜ�‰Ø^Øõ	
ð
ð �4ÑØ‰Ø	�UÑ	ØˆàÐÜ�‰ØVô	
ô ×$Ñ$ð>à>E¸Yð G6Ø6=°Yð ?ð €+ð Ø€/ð Ø€+ð Ø€,ð ðô !×5Ñ5ô€F÷ F
ðP ×&Ñ&ØÐ 6Àð 'ó €Jð ×&Ñ&ØØ!ð 'ó €Jñ �Ôà×)Ñ)ØÐ6ð *ó €Mñ �ÔØ ×+Ñ+¨J¸^Ð+ÓL€OÙ�Ô!Ø)×FÑFÓHÐØ×&Ñ&ØØØØHð	 'ô ð ×&Ñ&ØØØØBð	 'ô ð ×ÑØ+ØØ:ð ô ð ×ÑØØØhð ô ð
 ×ÑØØØOð ô ð
 ×ÑØÜØØJð	 ô ð ×ÑØÜØØQð	 ô ð  ×*Ñ*ØÐ@ð +ó €Nñ �Ô Ø×ÑØ.ØØ>ð  ô ð
 ×ÑØ-ØØ0ð  ô ð
 ×ÑØ$ØØ>ð  ô ð
 ×ÑØØØMð  ô ð '×1Ñ1ØóÐñ Ð&Ô'Ø×&Ñ&ØÜØØQð	 'ô ð €DÜ
Œ3�8‰8ƒ}˜ÒØÐ'œ#Ÿ(™( 1 2˜,Ð'ˆà×Ñ Ó%€GäÜ Ü.ÜÜ"ñ€Kð (ˆ;�w—‘Ñ'¨°°iÓ@Ð@r   )rK   ré   rÛ   zlist[tuple[str, str]])rK   ré   rÛ   údict[str, dict[str, int]])rh   r¡  rÛ   rÂ  )rK   ré   rC   úSequence[Any]rŽ   rê   rÛ   rA   )ræ   rS   rÕ   rA   rÛ   rS   )rÛ   rA   r:  )rK   ré   rC   r¢  r  r&  r‘   rê   r	  r&  r
  r&  rÛ   rA   )r„  zIO[Any]rK   ré   rC   r¢  rÕ   rA   r  r&  r‘   rê   rw  rA   rx  ústr | bool | Nonery  rê   rz  rê   r	  r&  rÛ   rÂ  )
rK   ré   rC   r¢  rÕ   rA   rx  r£  rÛ   rÂ  )rK   ré   rC   r¢  rÕ   rA   rÛ   rÂ  )NNNNN)r³  ré   rC   r¢  rÕ   rA   r¢  zdict[str, Any] | Noner‘   rê   rx  zbool | str | Nonery  rê   rz  rê   rÛ   r&  rè   )r³  ré   rC   r¢  rz  rê   rÛ   r&  )r³  ré   rC   r¢  rz  rê   rÊ  r&  r¶   r&  rÛ   r&  )rþ  rñ  rC   rÏ  rÿ  zdict[int, str]rÛ   z"tuple[nn.Module, list[Any]] | None)r  r   rþ  rñ  r  r   rÛ   z&tuple[torch.fx.GraphModule, list[Any]])rþ  ré   rC   r¢  rÛ   r¢  )r  r   rþ  rñ  r  r   rÛ   rÂ  )rþ  rñ  r  r   rw  rA   rx  z
bool | strr‘   rê   ry  rê   rz  rê   rz  rê   rD   r   rÛ   r   )}Ú__doc__Ú
__future__r   r�  r  rà   rÝ   r“   Úloggingr‹  r�  rª  r¨  rü   re   r¥  Ú	importlibr   Útempfiler   r   r   r   Útyping_extensionsr	   rP  Útriton.languageÚlanguageÚtlÚtriton.runtime.autotunerr
   r   Útriton.runtime.jitr   Ú	constexprr   ÚImportErrorrG   Útorch.fxrH   Útorch.nnrù  Útorch._dynamo.debug_utilsr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   Útorch._dynamo.utilsr+   r,   r-   Útorch._environmentr.   Ú*torch._higher_order_ops.triton_kernel_wrapr/   Útorch._inductor.cpp_builderr0   Ú"torch._library.fake_class_registryr1   Ú
torch._opsr2   Ú"torch.fx.experimental.proxy_tensorr3   Ú%torch.fx.experimental.symbolic_shapesr4   r5   Ú	torch.hubr6   rï   r8   rP   Úcollections.abcrQ   rR   rÃ  rS   rT   Útorch._inductor.output_coderU   Útorch._inductor.utilsrV   Ú	getLoggerr   r™   Úinductor_configrn   r�   r�   r’  rì   rô   r  ru  r•   rÊ   rÅ   r·  rÈ  rÑ  rÞ   rÐ  r  r  rÄ  r  Ú__annotations__r!  r1  rt  rv  ry  r   r   r   r   ú<module>rÃ     sy  ðòõ& #ã Û 
Û Û Û 	Û Û 	Û Û Û 
Û Û Û Ý #Ý "ß )Ñ )Ý $ã ðÝ ß>Ý.à—l‘l€Oó  Ý Ý ÷÷ ÷ ÷ õ ÷& =Ñ <Ý (Ý HÝ @Ý ?Ý !Ý 6÷õ å ðØðàóñB ß2çOÝ6Ý/ð €g×Ñ˜Ó!€ñ  Ð 8Ó9€ð2Øð2àó2ðj+SØ)ð+Sà	ó+Sðd !ñ	Øðà
ðð ð	ð
 	óñ* ‹;€ðgØ0ðgàðgð ógó^ó@"ðR  ØØØ %ñJØðJà
ðJð ð	Jð
 ðJð ðJð ðJð 	óJðf  ØØØ"&Ø#Ø ØñF9ØðF9àðF9ð ðF9ð ð	F9ð ðF9ð ðF9ð ðF9ð  ðF9ð ðF9ð ðF9ð ðF9ð 
óF9ð\ #'ñ?Øð?à
ð?ð ð?ð
  ð?ð 
ó?ðD	2Øð	2Ø$1ð	2ØBEð	2à	ó	2ð  "&ØØ"&Ø#Ø ð<!Ø
ð<!à
ð<!ð ð<!ð 
ð	<!ð
 ð<!ð  ð<!ð ð<!ð ð<!ð 
ó<!ðJ NRð'Ø
ð'Ø&3ð'Ø@Jð'à	ó'ðZ !ðð
 ØñØ
ðà
ðð ðð
 ðð ðð 
óð0 /˜Y×.Ñ.Ð/EÐPTÔUÐ ðV-Ø	ðV-à
ðV-ð !ðV-ð (ó	V-ðr1Øð1Ø ð1Ø-0ð1à+ó1óhFð8 	ð
 "�	×!Ñ!Ø¨dÀ$ôð /ñ
J€ÐFó 
ó	ó#
óLQLðhØðØ ðØ-0ðà+óó,ðN ØØØ#Ø!Ø ñ_AØ	ð_Aàð_Að ð	_Að
 ð_Að ð_Að ð_Að ð_Að ð_Að ð_Að 	ô_Aøð], ò ÷ñ ÷ñ ÷ñ ÷ô ðús   Á J Ê-J=Ê<J=