ó
    Eñi_  ã                   ó®  • S r SSKrSSKrSSKrSSKJrJr  SSKJr  SSK	J
r
Jr  SSKJr  SSKrSSKJr  SSKJr  SS	KJrJrJr  SS
KJrJr  SSKJr  \R8                  " \5      r\
" S5      r\" S5      r  " S S5      r!S\S\!4S jr"S\#S\$\%\4   4S jr&S\\\'\   \/\ 4   S\4S jr(S\\   S\RR                  4S jr*S\\   S\RV                  4S jr,g)a†  
This module provides common utilities and base classes for TorchDynamo backends.

Key components:
- AotAutograd: Base class for implementing AOT (Ahead-of-Time) autograd backends
- Backend utilities for handling:
  - Fake tensor conversion
  - Device/dtype detection from inputs
  - Memory efficient fusion
  - Graph flattening
  - Common compiler configurations

The utilities here are used by various backend implementations to handle
common operations and provide consistent behavior across different backends.
AOT autograd functionality is particularly important as it enables ahead-of-time
optimization of both forward and backward passes.
é    N)ÚCallableÚIterable)ÚAny)Ú	ParamSpecÚTypeVar)Úpatch©Údisable)ÚTensorifyScalarRestartAnalysis)ÚcountersÚdefakeÚflatten_graph_inputs)Úaot_module_simplifiedÚSerializableAOTDispatchCompiler)Ú_disable_current_modesÚPÚRc            
       óx   • \ rS rSrS\SS4S jrS\R                  R                  S\	\   S\S\
S\4   4S	 jrS
rg)ÚAotAutogradé,   ÚkwargsÚreturnNc                 ó   • SU l         Xl        g )NÚcompiler_fn©Ú__name__r   )Úselfr   s     ÚZ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_dynamo/backends/common.pyÚ__init__ÚAotAutograd.__init__-   s   € Ø%ˆŒØ�ó    ÚgmÚexample_inputs.c                 óz  • U(       a  [         R                  SU5        [        S U 5       5      (       a  [        UUU 5      $ [	        U R
                  R                  S5      5      (       a!  U R
                  S   " 5       U R
                  S'   [        S   S==   S-  ss'   SnU(       a+  [         R                  S5        [        S   S	==   S-  ss'   U$ S
[        [        [        4   S[        S[        4   4S jnU R
                  R                  S5      =(       d    U R
                  S   n[        U[        5      (       a  U" UR                  5      Ul        O![        USS5      (       a  Xfl        OU" U5      nX`R
                  S'   U R
                  R                  S5      =(       d    U R
                  S   U R
                  S'   SSKJn  SSKJn  U R
                  R                  SS 5      UL a  [)        SS5      n	O[*        R,                  " 5       n	 U" 5          U	   [/        X40 U R
                  D6n
[        S   S==   S-  ss'   [1        U
SS9sS S S 5        sS S S 5        $ ! , (       d  f       O= fS S S 5        g ! , (       d  f       g = f! [2         a    e [4         a    [        S   S	==   S-  ss'   e f = f)Nz3aot_autograd-based backend ignoring extra kwargs %sc              3   óX   #   • U  H   n[        U[        [        [        45      v •  M"     g 7f©N)Ú
isinstanceÚlistÚtupleÚdict)Ú.0Úxs     r   Ú	<genexpr>Ú'AotAutograd.__call__.<locals>.<genexpr>7   s!   é € ÐJº>°aŒz˜!œd¤E¬4Ð0×1Ð1º>ùs   ‚(*ÚdecompositionsÚaot_autogradÚtotalé   Fz5Unable to use AOT Autograd because graph has mutationÚnot_okÚbw_compiler_fnr   .c                 ór   ^ • S[         R                  S[         R                  S[        4U 4S jjnSUl        U$ )NÚargsr   r   c                  ó4   >• [        [        TSS9" U 0 UD6SS9$ )Nz'do not trace backward compiler function©Úreasonz%do not trace generated backwards passr	   )r6   r   r4   s     €r   Ú_wrapped_bw_compilerÚLAotAutograd.__call__.<locals>.wrap_bw_compiler.<locals>._wrapped_bw_compilerM   s6   ø€ ô ÜØ&Ð/Xòàð'à%ñ'ð Cñ	ð r!   T)r   r6   r   r   Ú_is_wrapped_bw_compiler)r4   r:   s   ` r   Úwrap_bw_compilerÚ.AotAutograd.__call__.<locals>.wrap_bw_compilerL   s:   ø€ ð¬A¯F©Fð ¼a¿h¹hð Ì1÷ ð ð !Ô8ð (Ð'r!   Úbw_compilerÚfw_compilerr<   Úinference_compilerr   )Únop)Úenable_aot_loggingz%functorch.compile.config.debug_assertTÚokzdo not trace AOT-compiled graphr8   )ÚlogÚwarningÚanyr   Úcallabler   Úgetr   Údebugr   r   r   r'   r   r   ÚgetattrÚfunctorch.compilerB   Útorch._inductor.debugrC   r   Ú
contextlibÚnullcontextr   r
   r   Ú	Exception)r   r"   r#   r   Úuse_fallbackr=   r?   rB   rC   Úpatch_configÚcgs              r   Ú__call__ÚAotAutograd.__call__1   sK  € ö Ü�K‰KÐMÈvÔVäÑJ¹>ÓJ×JÑJÜ'ØØØóð ô �D—K‘K—O‘OÐ$4Ó5×6Ñ6Ø,0¯K©KÐ8HÒ,IÓ,KˆD�K‰KÐ(Ñ)ô 	�Ñ  Ó)¨QÑ.Ó)ØˆæÜ�I‰IÐMÔNÜ�^Ñ$ XÓ.°!Ñ3Ó.àˆIð	(¬X´a¼°d©^ð 	(ÄÈÌaÈÑ@Pô 	(ð& —k‘k—o‘o mÓ4×R¸¿¹ÀMÑ8Rˆä�kÔ#B×CÑCÙ&6°{×7NÑ7NÓ&OˆKÕ#Ü�[Ð";¸U×CÑCØ&1Õ#á*¨;Ó7ˆKà%0�‰�MÑ"à�K‰K�O‰OÐ0Ó1×O°T·[±[ÀÑ5Oð 	�‰Ð(Ñ)õ 	*Ý<ð �;‰;�?‰?˜=¨$Ó/°3Ò6ÜCHØ7¸óD‰Lô &×1Ò1Ó3ˆLð
	á#Õ%¢|Ü*¨2ÑMÀÇÁÑM�Ü˜Ñ(¨Ó.°!Ñ3Ó.Ü˜rÐ*KÑL÷ (4 |×%Ñ%§|¥|ú×%×%Ö%ûô .ó 	ØÜó 	Ü�^Ñ$ XÓ.°!Ñ3Ó.Øð	úsH   ÈJ ÈI?È4I%É	I?É	J É%
I3	É/I?É6J É?
JÊ	J ÊJ Ê*J:r   )r   Ú
__module__Ú__qualname__Ú__firstlineno__r   r   ÚtorchÚfxÚGraphModuler   r   rT   Ú__static_attributes__© r!   r   r   r   ,   sV   † ð ð ¨ô ðRØ—(‘(×&Ñ&ðRØ8@À¹ðRØQTðRà	�#�s�(Ñ	÷Rr!   r   r   r   c                  ó   • [        S0 U D6$ )Nr]   )r   )r   s    r   r0   r0   †   s   € ÜÑ ˜Ñ Ð r!   Úuse_decompsc                 ó<   • SSK JnJnJn  UUUS.nU (       a  XS'   U$ )Nr   )Údefault_decompositionsÚ#min_cut_rematerialization_partitionÚ
ts_compile)r@   r?   Úpartition_fnr/   )rL   ra   rb   rc   )r_   ra   rb   rc   r   s        r   Úmem_efficient_fusion_kwargsre   Š   s1   € ÷ñ ð "Ø!Ø;ñ	€Fö à#9ÐÑ à€Mr!   Úfnc           	      óz   ^ • [         R                  " T 5      S[        S[        S[        S[        4U 4S jj5       nU$ )z[
Decorator for backends that need real inputs.  We swap out fake
tensors for zero tensors.
ÚmodelÚinputsr   r   c                 ó’   >• [        5          [        [        [        U5      5      nT" X40 UD6sS S S 5        $ ! , (       d  f       g = fr&   )r   r(   Úmapr   )rh   ri   r   rf   s      €r   ÚwrapperÚ(fake_tensor_unsupported.<locals>.wrapper¥   s3   ø€ ä#Õ%Üœ#œf fÓ-Ó.ˆFÙ�eÑ. vÑ.÷ &×%×%ús	   Œ"8¸
A)Ú	functoolsÚwrapsr   )rf   rl   s   ` r   Úfake_tensor_unsupportedrp   Ÿ   sC   ø€ ô ‡_‚_�RÓð/”sð /¤Cð /´3ð /¼3ö /ó ð/ð
 €Nr!   r#   c                 ó~   • U  H"  n[        US5      (       d  M  UR                  s  $    [        R                  " S5      $ )NÚdeviceÚcpu)Úhasattrrr   rY   ©r#   r,   s     r   Údevice_from_inputsrv   ®   s3   € ÛˆÜ�1�h×ÓØ—8‘8ŠOñ ô �<Š<˜ÓÐr!   c                 ór   • U  H"  n[        US5      (       d  M  UR                  s  $    [        R                  $ )NÚdtype)rt   rx   rY   Úfloat32ru   s     r   Údtype_from_inputsrz   µ   s.   € ÛˆÜ�1�g×ÓØ—7‘7ŠNñ ô �=‰=Ðr!   )-Ú__doc__rN   rn   ÚloggingÚcollections.abcr   r   Útypingr   Útyping_extensionsr   r   Úunittest.mockr   rY   Útorch._dynamor
   Útorch._dynamo.excr   Útorch._dynamo.utilsr   r   r   Útorch._functorch.aot_autogradr   r   Útorch.utils._python_dispatchr   Ú	getLoggerr   rE   r   r   r   r0   Úboolr*   Ústrre   r(   rp   rr   rv   rx   rz   r]   r!   r   Ú<module>r‰      sø   ðñó$ Û Û ß .Ý ß 0Ý ã Ý !Ý <ß FÑ F÷õ @ð ×Ò˜Ó!€áˆcƒN€ÙˆCƒL€÷Wñ Wðt!˜3ð ! ;ô !ð¨Tð °d¸3À¸8±nô ð* ¨#¨t°C©y¸#Ð)>ÀÐ)AÑ Bð Àsô ð x°¡}ð ¸¿¹ô ð h¨s¡mð ¸¿¹õ r!   