Ë
    øÿæig¦  ã            	       ó8  — d 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ZddlZddlZddlmZmZmZ ddlmZ ddlmZmZmZmZmZ ddlmZ ddlZddlm Z  ddl!m"Z" dd	l#m$Z$ d
dl%m&Z& d
dl'm(Z(m)Z)m*Z*  e
jV                  e,«      Z-erd
dl.m/Z/m0Z0  e$«       Z1dedef   dedef   fd„Z2 ejf                  d¬«       G d„ d«      «       Z4ejf                   G d„ d«      «       Z5de6defd„Z7dddejp                  deddfd„Z9 ede:«      Z; ed e:«      Z< ejf                  d¬«       G d!„ d"«      «       Z=ej|                  d#ej~                  de:fd$„«       Z@ejf                   G d%„ d&«      «       ZAejf                   G d'„ d(«      «       ZBd)eBdejp                  fd*„ZCd+ejp                  d,edefd-„ZDd+ejp                  deEe:e:f   fd.„ZF ejf                  d¬«       G d/„ d0«      «       ZGejf                   G d1„ d2«      «       ZHdd3lImJZJmKZKmLZL eKjš                   G d4„ d5eJ«      «       ZNejf                   G d6„ d7«      «       ZOd8e:de:fd9„ZPd:ej~                  d;eQd<eQdeRe:   fd=„ZSd:ej~                  d;eQd<eQde:fd>„ZTd+ejp                  dejª                  d   fd?„ZV G d@„ dA«      ZWeXe;ef   ZY G dB„ dCej´                  «      Z[ G dD„ dEe[«      Z\ G dF„ dGe[«      Z] G dH„ dIe]«      Z^de:fdJ„Z_ e^ejÀ                  jÃ                   e_«       dK«      «      Zby)La  
This module provides the infrastructure for creating and managing compile package
for torch.compile. We mainly have two abstractions here:
  - CompilePackage: Overarching data structure for store and lookup a list of compiled codes.
  - CodeCacheEntry: Data structure for a single code being compiled by torch.compile.
The caching behavior is always under user control explicitly so that a stronger guarantee can
be provided about cache hit for a specific compiled model. Users can load the compile package
from a different process or host.
é    N)ÚCallableÚ	GeneratorÚIterator)Únullcontext)ÚAnyÚNewTypeÚOptionalÚTYPE_CHECKINGÚUnion)ÚNever©ÚPackageError)Ú_graph_device_type)ÚWeakIdKeyDictionaryé   )Úget_code_keys)ÚcountersÚdynamo_timedÚincrement_frame)ÚGuardManagerWrapperÚGuardsStateÚfn.Úreturnc                 ó’   ‡ — dt         t           dt        dt        j                  f   dt        dt        j                  f   fˆ fd„}|S )NÚclsÚcodeÚSerializedCoder   c                 óN   •— |t         v r	t         |   S  ‰| |«      }|t         |<   |S ©N)Ú_CODE_CACHE)r   r   Úresr   s      €új/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/torch/_dynamo/package.pyÚ_z_code_cache.<locals>._4   s2   ø€ ð ”;ÑÜ˜tÑ$Ð$Ù��d‹mˆØŒ�DÑØˆ
ó    )Útyper   r   ÚtypesÚCodeType)r   r#   s   ` r"   Ú_code_cacher(   3   sI   ø€ ðÜ”#‰YðÜ#Ð$4´e·n±nÐ$DÑEðä	Ð¤§¡Ð/Ñ	0õð €Hr$   T)Úfrozenc                   ó–  — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eedf   ed	<   eedf   ed
<   eedf   ed<   eed<   eed<   eed<   eedf   ed<   eedf   ed<   dZ	e
e   ed<   dZe
e   ed<   dZe
e   ed<   dZe
e   ed<   eedej"                  dd fd„«       «       Zeedd dej"                  fd„«       «       Zy)r   Úco_argcountÚco_posonlyargcountÚco_kwonlyargcountÚ
co_nlocalsÚco_stacksizeÚco_flagsÚco_code.Ú	co_constsÚco_namesÚco_varnamesÚco_filenameÚco_nameÚco_firstlinenoÚco_cellvarsÚco_freevarsNÚco_linetableÚco_qualnameÚco_exceptiontableÚ	co_lnotabr   r   c                 ó–   ‡ — t        «       D �ci c]  }|t        ||«      “Œ }}t        ˆ fd„|d   D «       «      |d<    ‰ di |¤ŽS c c}w )Nc              3   óx   •K  — | ]1  }t        |t        j                  «      r‰j                  |«      n|–— Œ3 y ­wr   )Ú
isinstancer&   r'   Úfrom_code_object©Ú.0Úcr   s     €r"   Ú	<genexpr>z2SerializedCode.from_code_object.<locals>.<genexpr>Z   s6   øè ø€ ð $
á(�ô (2°!´U·^±^Ô'DˆC× Ñ  Ô#È!ÓKÙ(ùs   ƒ7:r2   © )r   ÚgetattrÚtuple)r   r   ÚkeyÚkwargss   `   r"   rA   zSerializedCode.from_code_objectV   s]   ø€ ô 6C´_ÓE±_¨c�#”w˜t SÓ)Ñ)°_ˆÐEÜ#ó $
à˜KÒ(ó$
ó 
ˆˆ{Ññ ‰}�V‰}Ðùò Fs   ŽAÚserialized_codec                 óÆ   ‡ — t        «       D �ci c]  }|t        ||«      “Œ }}t        ˆ fd„|d   D «       «      |d<   t        j                  |j                  «       Ž S c c}w )Nc              3   ód   •K  — | ]'  }t        |t        «      r‰j                  |«      n|–— Œ) y ­wr   )r@   r   Úto_code_objectrB   s     €r"   rE   z0SerializedCode.to_code_object.<locals>.<genexpr>d   s2   øè ø€ ð $
á(�ô &0°´>Ô%BˆC×Ñ˜qÔ!ÈÓIÙ(ùs   ƒ-0r2   )r   rG   rH   r&   r'   Úvalues)r   rK   rI   rJ   s   `   r"   rN   zSerializedCode.to_code_object`   sl   ø€ ô ANÄÓPÁ¸�#”w˜°Ó4Ñ4ÀˆÐPÜ#ó $
à˜KÒ(ó$
ó 
ˆˆ{Ñô �~‰~Ø�]‰]‹_ð
ð 	
ùò Qs   ŽA)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__ÚbytesrH   r   Ústrr:   r	   r;   r<   r=   Úclassmethodr(   r&   r'   rA   rN   rF   r$   r"   r   r   @   s  … àÓØÓØÓØƒOØÓØƒMØƒNØ�S˜#�X‰ÓØ�C˜�H‰oÓØ�s˜C�x‘Ó ØÓØƒLØÓØ�s˜C�x‘Ó Ø�s˜C�x‘Ó Ø$(€L�(˜5‘/Ó(Ø!%€K�˜#‘Ó%Ø)-Ð�x ‘Ó-Ø#€Iˆx˜‰}Ó#àØð E§N¡Nð Ð7Gò ó ó ðð Øð
Ð-=ð 
À%Ç.Á.ò 
ó ó ñ
r$   r   c                   ó&   — e Zd ZU dZeed<   eed<   y)Ú_GuardedCodeCacheEntrya  
    Contains the serializable information associated with a single compilation in dynamo.
    To restore an execution of compiled code, we will need to serialize the following data:
      - Dynamo bytecode for mapping Python inputs/outputs.
      - Dynamo guards.
    Úguards_stateÚdynamo_codeN)rP   rQ   rR   Ú__doc__rU   rT   r   rF   r$   r"   rY   rY   m   s   … ñð ÓØÔr$   rY   rZ   c                 óÎ   — 	 dd l mc mc mc m} |j	                  «       }|5  t        j                  | «      cd d d «       S # t
        $ r t        «       }Y Œ6w xY w# 1 sw Y   y xY w)Nr   )	Ú0torch.distributed.fsdp._fully_shard._fully_shardÚdistributedÚfsdpÚ_fully_shardÚdisable_fsdp_module_new_initÚImportErrorr   ÚpickleÚloads)rZ   ra   Úctxs      r"   Úload_guards_staterg   z   sQ   € ðßOÖOà×7Ñ7Ó9ˆò 
Ü�|‰|˜LÓ)÷ 
‰øô ò Ü‹mŠðúç	ˆús   ‚A £AÁAÁAÁA$r   Útarget_codeÚruntime_global_scoper   c                 ó°   — ddl m} t        j                  j                  j                  | || j                   «      | j                  |¬«      j                  S )Nr   )ÚOutputGraphCommon)Úshape_code_partsri   )Úoutput_graphrk   ÚtorchÚ_dynamoÚguardsÚCheckFunctionManagerrl   Úguard_manager)rZ   rh   ri   rk   s       r"   Úload_guard_managerrs   …   sM   € õ
 0ä�=‰=×Ñ×4Ñ4ØÙ˜,×3Ñ3Ó4Ø%×6Ñ6Ø1ð	 5ó ÷
 �mðr$   Ú
_BackendIdÚ_FunctionIdc                   ó@   — e Zd ZU eed<   eed<   eed<   eed<   eed<   y)ÚInlinedSourceÚmoduleÚfirstlinenoÚ
lastlinenoÚchecksumÚcontentN)rP   rQ   rR   rV   rT   rS   rF   r$   r"   rw   rw   ˜   s   … àƒKØÓØƒOØƒMØ„Lr$   rw   rx   c                 ó,   — t        j                  | «      S r   )ÚinspectÚ	getsource)rx   s    r"   Ú_get_module_contentr€   ¡   s   € ä×Ñ˜VÓ$Ð$r$   c                   óB   — e Zd ZU ee   ed<   dej                  ddfd„Zy)Ú
SourceInfoÚinlined_sourcesr   r   Nc                 ón  — t        j                  |«      }|€y t        j                  |«      \  }}|t        |«      z   }dj	                  |«      }|dj	                  t        |||«      «      k(  sJ ‚| j                  j                  t        |j                  ||t        |«      t        |«      ¬«      «       y )NÚ )rx   ry   rz   r{   r|   )r~   Ú	getmoduleÚgetsourcelinesÚlenÚjoinÚ_get_sourcelinesrƒ   Úaddrw   rP   Ú_hash_sourcer€   )Úselfr   rx   Úsourcelinesry   rz   Úsources          r"   Úadd_codezSourceInfo.add_codeª   s¦   € Ü×"Ñ" 4Ó(ˆØˆ>ØÜ#*×#9Ñ#9¸$Ó#?Ñ ˆ�[Ø ¤3 {Ó#3Ñ3ˆ
Ø—‘˜Ó%ˆØ˜Ÿ™Ô!1°&¸+ÀzÓ!RÓSÒSÐSÐSØ×Ñ× Ñ ÜØ—‘Ø'Ø%Ü% fÓ-Ü+¨FÓ3ôõ	
r$   )	rP   rQ   rR   Úsetrw   rT   r&   r'   r�   rF   r$   r"   r‚   r‚   ¦   s$   … à˜Ñ'Ó'ð
˜UŸ^™^ð 
°ô 
r$   r‚   c                   ó    — e Zd ZU dZeed<   eed<   ee   ed<   ee	   ed<   e
eef   ed<   ee   ed<   ee   ed<   eed	<   d
Zeed<   d
Zeed<   y)Ú_DynamoCodeCacheEntrya  
    Contains the serializable information associated with a single code object
    in dynamo. To restore an execution of compiled code, we will need the following
    ingredients:
      1. The "original" code object, which serves as the entry point for eager
         execution, i.e. the code only executed when there's no cache entry hit.
      2. The python module name this code object belongs to, for identifying the
         enclosing global scope to inject compiled and resume functions.
      3. A list of function names that pointing to this code object. There could be
         multiple function objects pointing to the same code such as recursive functions.
      4. A list of guarded code that eval frame dispatches to.
      5. A list of imported module objects unioned from all compiled branches.
      6. A list of "backends" (compiled fx graph) unioned from all compield branches.
      7. A string path used to access the original code object users defined.
         A code object can be accessed by "{python_module}.{function_name}.{code_source}" .
      8. A boolean flag indicating whether the function is installed to global scope.
      9. A boolean flag indicating whether the function has a compile id.
      10. Whether or not this code entry was bypassed
    Úpython_codeÚpython_moduleÚfunction_namesÚguarded_codesÚimport_sourcesÚbackend_idsÚcode_sourceÚinstall_to_globalFÚhas_compile_idÚbypassedN)rP   rQ   rR   r\   r   rT   rV   Úlistru   rY   Údictrt   r	   Úboolrœ   r�   rF   r$   r"   r“   r“   ½   si   … ñð(  ÓØÓØ˜Ñ%Ó%ØÐ.Ñ/Ó/Ø˜˜c˜‘NÓ"Ø�jÑ!Ó!Ø˜#‘ÓØÓØ €N�DÓ Ø€HˆdÔr$   r“   Úentryc                 ó�  — t        | j                  «      dk(  sJ ‚t        j                  | j                     }| j                  d   j                  d«      }|D ]  }t        ||«      }Œ | j                  r§| j                  j                  d«      }|D ]†  }|j                  d«      rg|j                  d«      }t        |t        «      r|dk\  sJ ‚t        ||d | d «      }|€t        d| › �«      ‚|t        j                  ||dz   d «         }Œ{t        ||«      }Œˆ nt        d| › �«      ‚t        |t        j                   «      sJ ‚|S )Nr   r   Ú.Ú]Ú[z"Cannot find source for code entry éÿÿÿÿ)rˆ   r–   ÚsysÚmodulesr•   ÚsplitrG   rš   ÚendswithÚrfindr@   rS   r   ÚastÚliteral_evalr&   r'   )r¡   r   ÚpartsÚpartÚindex_beginÚattrs         r"   Ú_lookup_coder²   ß   s@  € Üˆu×#Ñ#Ó$¨Ò)Ð)Ð)Ü�k‰k˜%×-Ñ-Ñ.€BØ× Ñ  Ñ#×)Ñ)¨#Ó.€EÛˆÜ�R˜Ó‰ð à×ÒØ×!Ñ!×'Ñ'¨Ó,ˆÛˆDØ�}‰}˜SÔ!Ø"Ÿj™j¨›o�Ü! +¬sÔ3¸ÀqÒ8HÐHÐHÜ˜r 4¨¨Ð#5°tÓ<�Ø�<Ü&Ð)KÈEÈ7Ð'SÓTÐTØœ#×*Ñ*¨4°¸a±À"Ð+EÓFÑG‘ä˜R Ó&‘ñ ô Ð?À¸wÐGÓHÐHÜ�bœ%Ÿ.™.Ô)Ð)Ð)Ø€Ir$   r   Úscopec                 ó$   — t        d| › d|› �«      ‚)Nz*Cannot resolve a fully qualified name for z. Lookup scope: r   )r   r³   s     r"   Ú_raise_resolution_errorrµ   ÷   s    € Ü
Ø
4°T°FÐ:JÈ5È'ÐRóð r$   c                 óê  ‡ ‡‡‡— t        j                  ‰ «      }|€t        d‰ › �«      ‚|Št        j                  dk\  r]‰ j
                  j                  d«      }|D ]=  }t        ‰|«      st        ‰ ‰«       t        ‰|«      Št        j                  ‰«      sŒ= n t        «       Šdt        dt        t           fˆˆ ˆˆfd„Š ‰‰«      }|€t        ‰ ‰«       ‰j                  |j!                  d«      fS )aS  
    Given a code object, return a fully qualified name which will be used as
    a serialized handle to access the code object from the new process.
    This is normally a straightforward process, but there are some corner cases:
    1. When a function is defined with decorator, then this function will be captured
       inside a closure with the wrapper object.
    2. When a function is defined as a nested function, then the code object will be
       stored on the co_consts field of the parent code object by Python compiler.
    This function handles all of the corner cases above.
    úCannot find module for code ©é   é   r£   Úobjr   c                 óf  •— | ‰
v ry ‰
j                  | «       t        j                  | «      r6| ‰	u ryt        | j                  «      D ]  \  }} ‰|«      x}€Œd|› d|› �c S  t        j
                  | «      r’ ‰| j                  «      x}�| Šd|› �S | j                  �kt        | j                  «      D ]S  \  }}	 |j                  }t        j
                  |«      st        j                  |«      sŒ> ‰|«      x}€ŒI| Šd|› d|› �c S  t        j                  dk  �rt        j                  | «      rX| j                  j                  «       D ];  }t        j
                  |«      st        j                  |«      sŒ. ‰|«      x}€Œ9|c S  t        j                  | «      r‚| j                  j!                  «       D ]e  \  }}t#        | |«      }t        j
                  |«      st        j                  |«      sŒ= ‰|«      x}€ŒH|j$                  |k7  rt'        ‰	‰«       |c S  y # t        $ r Y �Œ{w xY w)Nr…   z.co_consts[r¤   z	.__code__z.__closure__[z].cell_contentsr¸   )r‹   r~   ÚiscodeÚ	enumerater2   Ú
isfunctionÚ__code__Ú__closure__Úcell_contentsÚ
ValueErrorr§   Úversion_infoÚismoduleÚ__dict__rO   ÚisclassÚitemsrG   rP   rµ   )r»   ÚiÚconstr!   ÚcellrÂ   ÚvalueÚnameÚ_find_code_sourcer   ÚseenÚtoplevels           €€€€r"   rÎ   z+_get_code_source.<locals>._find_code_source  s  ø€ ð �$‰;Øà�‰�Œä�>‰>˜#ÔØ�d‰{Øä% c§m¡mÖ4‘��5Ù,¨UÓ3Ð3�CÑ@Ø(¨¨¨1¨S¨EÐ2Ò2ð 5ô ×Ñ˜cÔ"Ù(¨¯©Ó6Ð6�ÐCØ�Ø" 3 %Ð(Ð(Ø�‰Ð*Ü(¨¯©Ö9‘G�A�tð!Ø(,×(:Ñ(:˜ô  ×*Ñ*¨=Ô9Ü"Ÿ>™>¨-Ô8à Ù0°Ó?Ð?˜ÑLØ#&˜Ø!.¨q¨c°ÀÀÐFÒFð  :ô ×Ñ˜gÓ%Ü×Ñ Ô$Ø Ÿ\™\×0Ñ0Ö2�EÜ#×.Ñ.¨uÔ5¼¿¹ÈÔ9OØ Ù0°Ó7Ð7˜ÑDØ"š
ð	 3ô �‰˜sÔ#Ø#&§<¡<×#5Ñ#5Ö#7‘K�D˜%Ü# C¨Ó.�EÜ#×.Ñ.¨uÔ5¼¿¹ÈÔ9OØ Ù0°Ó7Ð7˜ÑDØ Ÿ>™>¨TÒ1Ü3°D¸(ÔCØ"š
ð $8ð øô9 &ò !Ú ð!ús   Â;H#È#	H0È/H0)r~   r†   r   r§   rÄ   r;   r©   Úhasattrrµ   rG   r¿   r‘   r   r	   rV   rR   Ústrip)r   rx   r®   r¯   rš   rÎ   rÏ   rÐ   s   `    @@@r"   Ú_get_code_sourcerÓ   ý   sï   û€ ô ×Ñ˜tÓ$€FØ€~ÜÐ9¸$¸Ð@ÓAÐAà€HÜ
×Ñ˜7Ò"Ø× Ñ ×&Ñ& sÓ+ˆãˆDÜ˜8 TÔ*Ü'¨¨hÔ7Ü˜x¨Ó.ˆHÜ×!Ñ! (Õ+Ùð ô ‹5€Dð4œsð 4¤x´¡}÷ 4ð 4ñl $ HÓ-€KØÐÜ  hÔ/à× Ñ  +×"3Ñ"3°CÓ"8Ð8Ð8r$   c                   óŽ   — e Zd ZU dZeed<   eed<   ee   ed<   eeeef      ed<   ee   ed<   dZ	e
dd	„«       Z	 dd
d deddfd„Zy)Ú
SystemInfozÀ
    System information including Python, PyTorch, and GPU details.
    This information is used to ensure compiled artifacts can only be loaded
    with compatible system configurations.
    Úpython_versionÚtorch_versionÚtoolkit_versionÚtriton_versionÚgpu_name)ÚcudaÚxpur   c                 ót  — d}ddl m} d\  }}| j                  D ][  }t        t        |«      j                  «       sŒ"	 t        t        |«      j                  «       }t        t        j                  |«      } n  | t        j                  «       t        j                  | |d«      |¬«      S # t        $ r Y Œœw xY w)z=Create a SystemInfo instance with current system information.Nr   )Úget_triton_version)NN©r   r   )rÖ   r×   rØ   rÙ   rÚ   )Útorch.utils._tritonrÞ   Ú
CHECK_GPUSrG   rn   Úis_availableÚget_device_nameÚversionÚ	ExceptionÚplatformrÖ   Ú__version__)r   rÚ   rÞ   rØ   Údevice_types        r"   ÚcurrentzSystemInfo.currente  sª   € ð ˆÝ:à$.Ñ!ˆ�/ØŸ>œ>ˆKÜ”u˜kÓ*×7Ñ7Õ9ðÜ&¤u¨kÓ:×JÑJÓL�HÜ&-¬e¯m©m¸[Ó&I�OÙð *ñ Ü#×2Ñ2Ó4Ü×+Ñ+Ø+Ù-¨fÓ5Øô
ð 	
øô !ò Ùðús   ½8B+Â+	B7Â6B7Úotherrè   Nc                 ó¶  — | j                   |j                   k7  rt        d| j                   › �«      ‚| j                  |j                  k7  rt        d| j                  › �«      ‚|| j                  v rét	        t
        |«      j                  «       st        |› d�«      ‚| j                  |j                  k7  rt        d| j                  › �«      ‚|j                  dk7  r1| j                  |j                  k7  rt        d| j                  › �«      ‚|j                  �?| j                  |j                  k7  r%t        d| j                  › d	|j                  › �«      ‚yyy)
z~
        Check if this SystemInfo is compatible with another SystemInfo.
        Raises RuntimeError if incompatible.
        z=Compile package was created with a different Python version: z>Compile package was created with a different PyTorch version: z is not availablez>Compile package was created with a different toolkit version: rß   z=Compile package was created with a different Triton version: Nz7Compile package was created with different GPU: cached=z
, current=)
rÖ   ÚRuntimeErrorr×   rá   rG   rn   râ   rØ   rÙ   rÚ   )r�   rê   rè   s      r"   Úcheck_compatibilityzSystemInfo.check_compatibility~  sk  € ð ×Ñ %×"6Ñ"6Ò6ÜØOÐPT×PcÑPcÐOdÐeóð ð ×Ñ ×!4Ñ!4Ò4ÜØPÐQU×QcÑQcÐPdÐeóð ð ˜$Ÿ/™/Ñ)Üœ5 +Ó.×;Ñ;Ô=Ü" k ]Ð2CÐ#DÓEÐEà×#Ñ# u×'<Ñ'<Ò<Ü"ØTÐUY×UiÑUiÐTjÐkóð ð
 ×$Ñ$¨Ò.Ø×'Ñ'¨5×+?Ñ+?Ò?ä"ØSÐTX×TgÑTgÐShÐióð ð
 �~‰~Ð)¨d¯m©m¸u¿~¹~Ò.MÜ"ðØ"Ÿm™m˜_¨J°u·~±~Ð6FðHóð ð /NÐ)ð% *r$   )r   rÕ   )Úcpu)rP   rQ   rR   r\   rV   rT   r	   rH   rS   rá   rW   ré   rí   rF   r$   r"   rÕ   rÕ   V  su   … ñð ÓØÓØ˜c‘]Ó"Ø˜U 3¨ 8™_Ñ-Ó-Ø�s‰mÓØ €Jàò
ó ð
ð2 7<ñ&Ø!ð&Ø03ð&à	ô&r$   rÕ   c                   óØ   — e Zd ZU ee   ed<   eed<   eed<    ej                  e
j                  ¬«      Ze
ed<   dZee   ed<   dZee   ed<   ed	ee   fd
„«       Zdd„Zd	eeef   fd„Zy)Ú_DynamoCacheEntryÚcodesÚsource_inforè   )Údefault_factoryÚsystem_infoNÚfn_nameÚfn_first_linenor   c                 óh   — | j                   D ��ch c]  }|j                  D ]  }|’Œ Œ c}}S c c}}w r   )rñ   r™   )r�   r   Ú
backend_ids      r"   r™   z_DynamoCacheEntry.backend_ids°  s-   € à'+§z¢zÔU¡z˜tÀD×DTÔDT°j’
ÐDT�
 zÒUÐUùÓUs   �.c                 óx   — t         j                  «       }| j                  j                  || j                  «       y)zZCheck if the current system is compatible with the system used to create this cache entry.N)rÕ   ré   rô   rí   rè   )r�   Úcurrent_system_infos     r"   Úcheck_versionsz _DynamoCacheEntry.check_versions´  s.   € ä(×0Ñ0Ó2ÐØ×Ñ×,Ñ,Ð-@À$×BRÑBRÕSr$   c                 óà   — t        | j                  «      dkD  sJ ‚t        t        | j                  «      «      | j                  | j                  | j
                  t        | j                  «      dœS )Nr   )Ú	num_codesrõ   rö   rè   r™   )rˆ   rñ   rV   rõ   rö   rè   rž   r™   ©r�   s    r"   Ú
debug_infoz_DynamoCacheEntry.debug_info¹  sY   € Ü�4—:‘:‹ Ò"Ð"Ð"äœS §¡›_Ó-Ø—|‘|Ø#×3Ñ3Ø×+Ñ+Ü × 0Ñ 0Ó1ñ
ð 	
r$   ©r   N)rP   rQ   rR   rž   r“   rT   r‚   rV   ÚdataclassesÚfieldrÕ   ré   rô   rõ   r	   rö   Úpropertyr‘   rt   r™   rû   rŸ   r   rÿ   rF   r$   r"   rð   rð   §  s�   … àÐ%Ñ&Ó&ØÓØÓØ/˜k×/Ñ/À
×@RÑ@RÔS€K�ÓSØ!€GˆX�c‰]Ó!Ø%)€O�X˜c‘]Ó)àðV˜S ™_ò Vó ðVóTð

˜D  c ™Nô 
r$   rð   )ÚCacheArtifactÚCacheArtifactFactoryÚCacheArtifactManagerc                   ó*   — e Zd Zdd„Zedefd„«       Zy)ÚPrecompileCacheArtifactr   Nc                 óX   — t         j                  | j                  | j                  «       y r   )ÚDynamoCacheÚ_write_to_local_cacher|   rI   rþ   s    r"   Úpopulate_cachez&PrecompileCacheArtifact.populate_cacheÍ  s   € Ü×)Ñ)¨$¯,©,¸¿¹ÕAr$   c                   ó   — y)NÚ
precompilerF   rF   r$   r"   r%   zPrecompileCacheArtifact.typeÐ  s   € àr$   r   )rP   rQ   rR   r  ÚstaticmethodrV   r%   rF   r$   r"   r  r  Ë  s#   „ óBð ð�#ò ó ñr$   r  c                   ó^   — e Zd ZU dZeed<   eeef   ed<   e	dedeeef   de
d    fd„«       Zy)ÚPrecompileCacheEntrya2  
    A full cache entry for caching precompile, for a toplevel torch.compile.
    Consists of a _DynamoCacheEntry, which contains all the dynamo related contents,
    and a set of backends content. In general, the backend content here will always
    be of type precompile_context.BackendCacheArtifact
    ÚdynamoÚbackendsÚcache_entryr   c                 óT  ‡— i }| j                   D ]Š  }|j                  D ]y  }||vrkt        j                  d«       t	        j
                  | j                  «       |dœ«      Št        j                  j                  dd„ ˆfd„d¬«       d|_
         Œ�||   ||<   Œ{ ŒŒ t        | |¬	«      S )
NzBackend not found)r¡   Úmissing_backendÚartifactc                  ó   — dddœS )NÚdynamo_cache_bypassÚjson)rÍ   ÚencodingrF   rF   r$   r"   Ú<lambda>z7PrecompileCacheEntry.from_cache_entry.<locals>.<lambda>ó  s   € Ø$9Ø(.ò-r$   c                  ó   •— ‰ S r   rF   )Ú	debug_strs   €r"   r  z7PrecompileCacheEntry.from_cache_entry.<locals>.<lambda>÷  s   ø€ ©9r$   F)Úmetadata_fnÚ
payload_fnÚexpect_trace_idT)r  r  )rñ   r™   ÚloggerÚwarningr  Údumpsrÿ   rn   Ú_loggingÚtrace_structuredr�   r  )r  r  Úbackend_contentr   rø   r  s        @r"   Úfrom_cache_entryz%PrecompileCacheEntry.from_cache_entryá  s´   ø€ ð 24ˆà×%Ô%ˆDØ"×.Ô.�
Ø XÑ-Ü—N‘NÐ#6Ô7Ü $§
¡
à%0×%;Ñ%;Ó%=Ø/9ñó!�Iô —N‘N×3Ñ3Ø"ñ%ó $5Ø(-ð 4ô ð %)�D”MÙà2:¸:Ñ2F�O JÒ/ñ+ /ð &ô0 $¨;ÀÔQÐQr$   N)rP   rQ   rR   r\   rð   rT   rŸ   rt   r   r  r	   r(  rF   r$   r"   r  r  Õ  s\   … ñð ÓØ�:˜s�?Ñ#Ó#àðRØ&ðRØ26°zÀ3°Ñ2GðRà	Ð(Ñ	)òRó ñRr$   r  r�   c                 óˆ   — t        j                  «       }|j                  | j                  «       «       |j	                  «       S r   )ÚhashlibÚsha256ÚupdateÚencodeÚ	hexdigest)r�   Úsha256_hashs     r"   rŒ   rŒ     s1   € Ü—.‘.Ó"€KØ×Ñ�v—}‘}“Ô'Ø× Ñ Ó"Ð"r$   Úmry   rz   c                 óD   — t        j                  | «      d   |dz
  |dz
   S )Nr   r   )r~   r‡   ©r0  ry   rz   s      r"   rŠ   rŠ     s)   € ô ×!Ñ! !Ó$ QÑ'¨°a©¸*Àq¹.ÐIÐIr$   c           	      óL   — t        dj                  t        | ||«      «      «      S )Nr…   )rŒ   r‰   rŠ   r2  s      r"   Ú_hash_sourcelinesr4    s    € Ü˜Ÿ™Ô 0°°KÀÓ LÓMÓNÐNr$   c                 ó†   ‡ ‡‡‡‡— ddl mŠmŠ ddlmŠmŠ t        j                  dt        d    fˆˆ ˆˆˆfd„«       } |«       S )Nr   )Úget_compile_idÚlog_dynamo_start)Úcompile_contextÚCompileContextr   c               3   óv  •K  — t        «         ‰i ¬«      }  ‰ ‰| «      «      5  t        dddt        t        j                  j
                  j                  «      ‰j                  ‰j                  ‰j                  dœ¬«      5   ‰‰«       d –— d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w­w)N)Úframe_statez_compile.compile_innerÚentire_frame_compileÚ!dynamo_cumulative_compile_time_us)Ú	frame_keyr6   r5   r7   )Ú
phase_nameÚdynamo_compile_column_usÚmetadata)
r   r   rV   rn   ro   ÚutilsÚ
curr_framer6   r5   r7   )Ú
compile_idr9  r   r8  r6  r7  s    €€€€€r"   Ú_ctxz$_compile_frame_context.<locals>._ctx  sš   øè ø€ äÔÙ#°Ô3ˆ
á™N¨:Ó6Õ7ÜØ(Ø1Ø)Lô "%¤U§]¡]×%8Ñ%8×%CÑ%CÓ!DØ#Ÿ|™|Ø#'×#3Ñ#3Ø&*×&9Ñ&9ñ	öñ ˜TÔ"Û÷÷ 8Ð7÷ð ú÷ 8Ð7üs5   ƒ"B9¥AB-ÂB!ÂB-Â	B9Â!B*	Â&B-Â-B6Â2B9)	Útorch._dynamo.convert_framer6  r7  Útorch._guardsr8  r9  Ú
contextlibÚcontextmanagerr   )r   rE  r9  r8  r6  r7  s   ` @@@@r"   Ú_compile_frame_contextrJ    s?   ü€ ÷ Mß=ô ×Ñð”(˜4‘.÷ ð ó ðñ* ‹6€Mr$   c                   óò  — e Zd ZdZ	 	 d0deedef      dee   deddfd„Z	defd	„Z
	 	 d0dedee   deddfd
„Z	 	 	 d1dej                  dedee   dee   deddfd„Zedeeef   fd„«       Zej,                  defd„«       Zdej                  ddfd„Zej4                  dej                  ded   fd„«       Zdedej                  ddfd„Zdeej                     ddfd„Z dee!jD                  jF                     ddfd„Z$d2d„Z%dej                  dedee   ddfd„Z&d ed!eddfd"„Z'd3d#ed$ee   ddfd%„Z(d2d&„Z)d'ejT                  d(ed)eddfd*„Z+d2d+„Z,d,eeef   ddfd-„Z-defd.„Z.e/dedef   defd/„«       Z0y)4ÚCompilePackagea   
    CompilePackage is considered a low level component and should not be directly exposed to
    end users. It has the following interface:

    1. `CompilePackage.__init__()` which optionally takes previously serialized dynamo states.
        a. when `dynamo` argument is None, it will construct a brand new CompilePackage object.
        b. when `dynamo` argument is not None, it will load a pre-compiled dynamo state.
    2. `package.save()` which dumps the dynamo and backend states to a DynamoCacheEntry object.
    3. `package.install(backends) which will handle all the side-effectful global scope
        updates with compiled functions and resume functions.
    Nr   .r  Úignore_inlined_sourcesr   c                 ó"  — d | _         i | _        d | _        i | _        d| _        i | _        t        t        «       ¬«      | _        t        «       | _	        d| _
        |�4| j                  |||«       | j                  «        | j                  «        y y )Nrî   ©rƒ   F)Ú_innermost_fnÚ_codesÚ_current_entryÚ_installed_globalsÚ_device_typeÚ_cached_backendsr‚   r‘   Ú_source_infoÚ_resume_codesÚ_initializedÚ
initializeÚ	uninstallÚvalidate)r�   r   r  rM  s       r"   Ú__init__zCompilePackage.__init__C  s„   € ð "ˆÔØCEˆŒà?CˆÔØEGˆÔà!ˆÔð 8:ˆÔÜ(2Ä3Ã5Ô(IˆÔÜ25³%ˆÔØ!ˆÔØˆ>Ø�O‰O˜B Ð(>Ô?Ø�N‰NÔØ�M‰M�Oð r$   c                 ó   — | j                   S r   )rX  rþ   s    r"   Úis_initializedzCompilePackage.is_initialized[  ó   € Ø× Ñ Ð r$   c           
      óŒ  — ddl m} | j                  rJ ‚t        t	        «       ¬«      | _         ||«      | _        | j                  €J ‚|��8t        |t        «      sJ ‚|j                  «        |s®|j                  j                  D ]„  }t        j                  |j                  «      }t        ||j                   |j"                  «      }||j$                  k7  sŒSt'        d|j                  › d|j                   › d|j"                  › d�«      ‚ |j                  | _        |j(                  ^}}	| j                  j*                  |i| _        |	D ].  }|| j,                  t.        j1                  |j2                  «      <   Œ0 d| _        y | j5                  | j                  j*                  | j                  j6                  «       d| _        y )	Nr   ©Úinnermost_fnrO  z!Source code changes detected for z (line z - line Ú)T)Ú
eval_framerb  rX  r‚   r‘   rV  rP  r@   rð   rû   rò   rƒ   Ú	importlibÚimport_modulerx   r4  ry   rz   r{   rì   rñ   rÀ   rQ  r   rN   r”   Ú_add_functionrQ   )
r�   r   r  rM  rb  r   r0  r{   Úmainrñ   s
             r"   rY  zCompilePackage.initialize^  s•  € õ 	-à×$Ò$Ð$Ð$Ü&´s³uÔ=ˆÔÙ)¨"Ó-ˆÔØ×!Ñ!Ð-Ð-Ð-ØÑÜ˜fÔ&7Ô8Ð8Ð8Ø×!Ñ!Ô#Ù)Ø"×.Ñ.×>Ô>�DÜ!×/Ñ/°·±Ó<�AÜ0°°D×4DÑ4DÀdÇoÁoÓV�HØ 4§=¡=Ó0Ü*Ø?ÀÇÁ¸}ÈGÐTX×TdÑTdÐSeÐemÐnr×n}Ñn}Ðm~Ð~ð  Aóð ð	 ?ð %+×$6Ñ$6�Ô!à!Ÿ<™<ˆLˆD�5à×-Ñ-×6Ñ6¸Ð=ˆDŒKÛ�ØOS�—‘œN×9Ñ9¸$×:JÑ:JÓKÒLð ð !ˆÕð	 ×ÑØ×"Ñ"×+Ñ+¨T×-?Ñ-?×-JÑ-Jôð !ˆÕr$   r”   r•   Úfunction_namerš   r›   c           
      óL  — || j                   vr6t        t        j                  |«      |g g i g ||¬«      }|| j                   |<   nB| j                   |   }|j                  |k(  sJ ‚|j
                  |k(  sJ ‚|j                  |k(  sJ ‚|�|j                  j                  |«       y y )N)r”   r•   r–   r—   r˜   r™   rš   r›   )	rQ  r“   r   rA   r•   r›   rš   r–   Úappend)r�   r”   r•   ri  rš   r›   r   s          r"   rg  zCompilePackage._add_function…  s·   € ð ˜dŸk™kÑ)Ü(Ü*×;Ñ;¸KÓHØ+Ø!Ø Ø!ØØ'Ø"3ô	ˆDð (,ˆD�K‰K˜Ò$à—;‘;˜{Ñ+ˆDØ×%Ñ%¨Ò6Ð6Ð6Ø×)Ñ)Ð->Ò>Ð>Ð>Ø×#Ñ# {Ò2Ð2Ð2àÐ$Ø×Ñ×&Ñ& }Õ5ð %r$   c                 ó   — | j                   S r   )rU  rþ   s    r"   Úcached_backendszCompilePackage.cached_backends¢  s   € à×$Ñ$Ð$r$   c                 ó\   — | j                   €J ‚t        j                  | j                   «      S r   )rP  rL  Úsource_id_from_fnrþ   s    r"   Ú	source_idzCompilePackage.source_id¦  s+   € à×!Ñ!Ð-Ð-Ð-Ü×/Ñ/°×0BÑ0BÓCÐCr$   r   c                 óº   — t        |«      \  }}t        j                  |«      }|€t        d|› �«      ‚| j	                  ||j
                  t        |«      |¬«       y )Nr·   )ri  rš   )rÓ   r~   r†   r   rg  rP   ru   )r�   r   ri  rš   rx   s        r"   Ú_add_user_functionz!CompilePackage._add_user_function«  sa   € Ü%5°dÓ%;Ñ"ˆ�{Ü×"Ñ" 4Ó(ˆØˆ>ÜÐ!=¸d¸VÐDÓEÐEØ×ÑØØ�O‰OÜ% mÓ4Ø#ð	 	õ 	
r$   )NNNc              #   óÞ   K  — | j                   �J ‚|| j                  vr| j                  |«       | j                  |   }|| _         	 d –— d|_        d | _         y # d|_        d | _         w xY w­w©NT)rR  rQ  rr  rœ   )r�   r   r¡   s      r"   Úcode_contextzCompilePackage.code_context·  su   è ø€ à×"Ñ"Ð*Ð*Ð*ð �t—{‘{Ñ"Ø×#Ñ# DÔ)à—‘˜DÑ!ˆØ#ˆÔð	'Ûà#'ˆEÔ Ø"&ˆDÕøð $(ˆEÔ Ø"&ˆDÕüs   ‚AA-ÁA ÁA-ÁA*Á*A-rZ   r[   c                 óØ   — | j                   €J ‚| j                   j                  ry t        |t        j	                  |«      ¬«      }| j                   j
                  j                  |«       y )N)rZ   r[   )rR  r�   rY   r   rA   r—   rk  )r�   rZ   r[   Úguarded_code_entrys       r"   Úadd_guarded_codezCompilePackage.add_guarded_codeÈ  sa   € ð
 ×"Ñ"Ð.Ð.Ð.Ø×Ñ×'Ò'ØÜ3Ø%Ü&×7Ñ7¸ÓDô
Ðð 	×Ñ×)Ñ)×0Ñ0Ð1CÕDr$   Úsourcesc                 ó°   — | j                   €J ‚| j                   j                  ry |D ],  }|| j                  v rŒ| j                  j	                  |«       Œ. y r   )rR  r�   rW  rV  r�   )r�   ry  r   s      r"   Úadd_inlined_sourcez!CompilePackage.add_inlined_sourceÖ  sU   € Ø×"Ñ"Ð.Ð.Ð.Ø×Ñ×'Ò'ØÛˆDØ�t×)Ñ)Ñ)ØØ×Ñ×&Ñ& tÕ,ñ r$   Úgraphc                 ó$   — t        |«      | _        y r   )r   rT  )r�   r|  s     r"   Úupdate_device_typez!CompilePackage.update_device_typeß  s   € Ü.¨uÓ5ˆÕr$   c                 óB   — | j                   €J ‚d| j                   _        y rt  )rR  r�   rþ   s    r"   Úbypass_current_entryz#CompilePackage.bypass_current_entryâ  s"   € Ø×"Ñ"Ð.Ð.Ð.Ø'+ˆ×ÑÕ$r$   c                 ó~   — | j                  |||rt        |«      nd d¬«       | j                  j                  |«       y )NT)ri  r›   )rg  ru   rW  r‹   )r�   r”   r•   ri  s       r"   Úadd_resume_functionz"CompilePackage.add_resume_functionæ  sB   € ð 	×ÑØØÙ8Eœ+ mÔ4È4Ø"ð	 	ô 	
ð 	×Ñ×Ñ˜{Õ+r$   ÚaliasÚmodule_namec                 óR   — | j                   €J ‚|| j                   j                  |<   y r   )rR  r˜   )r�   rƒ  r„  s      r"   Úadd_import_sourcez CompilePackage.add_import_sourceô  s*   € Ø×"Ñ"Ð.Ð.Ð.Ø4?ˆ×Ñ×*Ñ*¨5Ò1r$   rø   Úbackendc                 óÊ   — | j                   €J ‚|j                  d«      sJ ‚t        |«      }| j                   j                  j	                  |«       |�|| j
                  |<   y y )NÚ__compiled_fn_)rR  Ú
startswithrt   r™   rk  rU  )r�   rø   r‡  s      r"   Úadd_backend_idzCompilePackage.add_backend_idø  sh   € Ø×"Ñ"Ð.Ð.Ð.Ø×$Ñ$Ð%5Ô6Ð6Ð6Ü 
Ó+ˆ
Ø×Ñ×'Ñ'×.Ñ.¨zÔ:ØÐØ07ˆD×!Ñ! *Ò-ð r$   c                 óÄ   — | j                   �J ‚| j                  €J ‚| j                  sJ ‚t        t	        | j
                  «      «      | j                  j                  u sJ ‚y r   )rR  rP  rX  ÚnextÚiterrQ  rÀ   rþ   s    r"   r[  zCompilePackage.validate   s]   € Ø×"Ñ"Ð*Ð*Ð*Ø×!Ñ!Ð-Ð-Ð-Ø× Ò Ð Ð Ü”D˜Ÿ™Ó%Ó&¨$×*<Ñ*<×*EÑ*EÑEÐEÑEr$   rx   rÍ   rÌ   c                 óx   — ||j                   |<   | j                  j                  |g «      j                  |«       y r   )rÆ   rS  Ú
setdefaultrk  )r�   rx   rÍ   rÌ   s       r"   Ú_install_globalzCompilePackage._install_global  s1   € Ø %ˆ�‰˜ÑØ×Ñ×*Ñ*¨6°2Ó6×=Ñ=¸dÕCr$   c                 óú   — ddl m} | j                  €J ‚| j                  j	                  «       D ]'  \  }}|D ]  }|j
                  j                  |«       Œ Œ) i | _         || j                  j                  «       y )Nr   )Ú_reset_precompile_entries)Útorch._C._dynamo.eval_framer“  rP  rS  rÈ   rÆ   ÚpoprÀ   )r�   r“  rx   ÚnamesrÍ   s        r"   rZ  zCompilePackage.uninstall
  sn   € ÝIà×!Ñ!Ð-Ð-Ð-Ø!×4Ñ4×:Ñ:Ö<‰MˆF�EÛ�Ø—‘×#Ñ# DÕ)ñ ð =ð
 #%ˆÔá! $×"4Ñ"4×"=Ñ"=Õ>r$   r  c                 ó´  — ddl m} ddlm} | j	                  «        | j
                  j                  «       D �]ì  \  }}|j                  rt        |«      nt        j                  «       }|5  t        j                  |j                     }|j                  j                  «       D ]+  \  }}	| j                  ||t!        j"                  |	«      «       Œ- |}
|j$                  rE|j&                  D ]6  }t)        j*                  ||j,                  |«      }| j                  |||«       Œ8 |j.                  rt1        |«      }
|j2                  r	 ddd«       �Œ|j4                  D ]n  }||vrt7        d|› d�«      ‚t9        dd	¬
«      5  ||   j;                  «       }| j                  ||t<        j>                  jA                  |«      «       ddd«       Œp tC        |jD                  «      dk(  r)t<        j>                  jF                  jI                  |
«       |jD                  D ]ü  }t9        d«      5  tK        |jL                  «      }ddd«       t        j                  |j                     j,                  }j                  jN                  x}r ||«      }||v r	||   |u sJ ‚|||<   tQ        |t<        j>                  jR                  jT                  «      sJ ‚t9        d«      5  tW        ||
|«      }ddd«        ||
tX        j[                  |j\                  «      «       Œþ 	 ddd«       �Œï y# 1 sw Y   �ŒÔxY w# 1 sw Y   ŒöxY w# 1 sw Y   ŒXxY w# 1 sw Y   �Œ xY w)a3  
        Sync the package states to the compiled function. This includes the following actions:
          1. Clean up the previously installed states.
          2. Install the compiled functions to global scopes.
          3. Install the precompiled cache entries to ExtraStates on the code object.
        r   )Ú_load_precompile_entryr   )Úget_builtins_dictNúBackend ú# is not found in the given backendsÚafter_deserializationÚbackend_compile)r?  Úprecompile_load_guardsÚprecompile_build_guards)/r”  r˜  rm   r™  rZ  rQ  rÈ   rœ   rJ  rH  r   r§   r¨   r•   r˜   r‘  re  rf  r›   r–   r&   ÚFunctionTyperÆ   rš   r²   r�   r™   rì   r   rœ  rn   ro   Údisablerˆ   r—   rd  Ú	skip_coderg   rZ   Ú%name_of_builtins_dict_key_in_fglobalsr@   rp   r   rs   r   rN   r[   )r�   r  r˜  r™  r   r¡   Úcontextrx   rƒ  r„  rh   ri  r   rø   r‡  Úguarded_coderZ   ri   Úbuiltin_dict_nameÚbuiltins_dictrr   s                        r"   ÚinstallzCompilePackage.install  s  € õ 	Gå3à�‰ÔØŸ;™;×,Ñ,×.‰KˆD�%ð ×'Ò'ô ' tÔ,ä×+Ñ+Ó-ð ò
 ÜŸ™ U×%8Ñ%8Ñ9�Ø*/×*>Ñ*>×*DÑ*DÖ*FÑ&�E˜;Ø×(Ñ(Ø ¤y×'>Ñ'>¸{Ó'Kõð +Gð #�Ø×*Ò*Ø).×)=Ô)=˜Ü"×/Ñ/°°f·o±oÀ}ÓU˜Ø×,Ñ,¨V°]ÀBÕGð *>ð ×$Ò$Ü".¨uÓ"5�Kà—>’>ð ÷# ‘ð& #(×"3Ô"3�JØ!¨Ñ1Ü*Ø& z lÐ2UÐVóð ô &Ø/Ð<Möð #+¨:Ñ"6×"LÑ"LÓ"N˜Ø×,Ñ,Ø"Ø&Ü!ŸM™M×1Ñ1°'Ó:ô÷	ð ð #4ô �u×*Ñ*Ó+¨qÒ0ô —M‘M×,Ñ,×6Ñ6°{ÔCà$)×$7Ô$7�LÜ%Ð&>Õ?Ü'8¸×9RÑ9RÓ'S˜÷ @ä+.¯;©;°u×7JÑ7JÑ+K×+TÑ+TÐ(ð
 (×4Ñ4×ZÑZð[Ð)ð [ñ ):Ð:NÓ(O˜Ø,Ð0DÑDà 4Ð5FÑ GÈ=Ñ XðØ Xð GTÐ0Ð1BÑCÜ% l´E·M±M×4HÑ4H×4TÑ4TÔUÐUÐUÜ%Ð&?Õ@Ü(:Ø(¨+Ð7Kó)˜÷ Añ +Ø#Ø%Ü&×5Ñ5°l×6NÑ6NÓOõñ- %8÷O ‘ñ /÷<ñ ú÷  @Ð?ú÷" AÐ@ú÷s ‘ús^   Á+CMÅ/MÆAL(	ÇA%MÈ*L5	É BMËM	Ë*1MÌ(L2Ì-MÌ5L>Ì:MÍM
ÍMÍM	c                 ó,  — | j                  «        | j                  €J ‚t        t        | j                  j                  «       «      | j                  | j                  | j                  j                  | j                  j                  j                  ¬«      S )N)rñ   rò   rè   rõ   rö   )r[  rP  rð   rž   rQ  rO   rV  rT  rR   rÀ   r7   rþ   s    r"   r  zCompilePackage.cache_entryl  su   € Ø�‰ŒØ×!Ñ!Ð-Ð-Ð-Ü Ü�t—{‘{×)Ñ)Ó+Ó,Ø×)Ñ)Ø×)Ñ)Ø×&Ñ&×3Ñ3Ø ×.Ñ.×7Ñ7×FÑFô
ð 	
r$   c                 ó0  — ddl m}  || «      }t        j                  «       }|j	                  |j
                  j                  «       «       |j	                  t        |j                  j                  «      j                  «       «       |j                  «       S )Nr   ra  )rd  rb  r*  r+  r,  rR   r-  rV   rÀ   r7   r.  )r   rb  Úinnermost_fn_r/  s       r"   ro  z CompilePackage.source_id_from_fnw  so   € å,á$ RÓ(ˆä—n‘nÓ&ˆØ×Ñ˜=×5Ñ5×<Ñ<Ó>Ô?Ø×Ñœ3˜}×5Ñ5×DÑDÓE×LÑLÓNÔOØ×$Ñ$Ó&Ð&r$   )NF)NNFr   r   )1rP   rQ   rR   r\   r	   r   r   rð   r    r\  r^  rY  r&   r'   rV   ru   rg  r  rŸ   rt   rm  Ú	functoolsÚcached_propertyrp  rr  rH  rI  r   ru  rU   rx  rž   r{  rn   ÚfxÚGraphr~  r€  r‚  r†  r‹  r[  Ú
ModuleTyper‘  rZ  r¨  r  r  ro  rF   r$   r"   rL  rL  6  sæ  „ ñ
ð /3Ø',ñ	à�X˜c 3˜hÑ'Ñ(ðð Ð*Ñ+ðð !%ð	ð
 
óð0! ó !ð /3Ø',ñ	%!àð%!ð Ð*Ñ+ð%!ð !%ð	%!ð
 
ó%!ðV 04Ø%)Ø"'ñ6à—^‘^ð6ð ð6ð   Ñ,ð	6ð
 ˜c‘]ð6ð  ð6ð 
ó6ð: ð%  j°# oÑ!6ò %ó ð%ð ×ÑðD˜3ò Dó ðDð

 u§~¡~ð 

¸$ó 

ð ×Ñð' §¡ð '°IÐ>NÑ4Oò 'ó ð'ð EàðEð —^‘^ðEð 
ó	Eð-¨$¨u¯~©~Ñ*>ð -À4ó -ð6¨°·±·±Ñ(@ð 6ÀTó 6ó,ð,à—^‘^ð,ð ð,ð   ‘}ð	,ð
 
ó,ð@ sð @¸ð @Àó @ñ8¨ð 8°xÀ±}ð 8ÐPTó 8óFðD e×&6Ñ&6ð D¸cð DÈ#ð DÐRVó Dó?ðS  Z° _Ñ 5ð S¸$ó Sðj	
Ð.ó 	
ð ð'˜h s¨C xÑ0ð '°Sò 'ó ñ'r$   rL  c            
       ó  — e Zd ZdZdeddfd„Zdededdfd„Ze	j                  dd	„«       Ze	j                  d
ededdfd„«       Zd
ededdfd„Zdededdfd„Ze	j                  dedefd„«       Zdedefd„Zdededeeeeef   f   fd„Zy)ÚDynamoStorez²
    A DynamoStore tracks active CompilePackages, and provides methods to store and retrieve them.

    This is an abstract base class for different storage implementations.
    Úpackager   Nc                 ój   — ddl m} |j                  «       }|j                  ||j                  ¬«       y)z]
        Records a package to PrecompileContext, so that it can be serialized later.
        r   )ÚPrecompileContext)r  rI   N)Ú torch._dynamo.precompile_contextrµ  r  Úrecord_dynamo_cache_entryrp  )r�   r³  rµ  r  s       r"   Úrecord_packagezDynamoStore.record_package�  s4   € õ 	Gà×)Ñ)Ó+ˆØ×3Ñ3Ø#¨×):Ñ):ð 	4õ 	
r$   rø   r‡  c                 óJ   — ddl m}m}  |||¬«      }|j                  |«       y)zT
        Records eager fx graphs to PrecompileContext for testing purposes.
        r   )ÚEagerCacheArtifactrµ  )rI   r|   N)r¶  rº  rµ  Úrecord_artifact)r�   rø   r‡  rº  rµ  Úresults         r"   Úrecord_eager_backendz DynamoStore.record_eager_backend˜  s#   € ÷	
ñ
 $¨
¸GÔDˆØ×)Ñ)¨&Õ1r$   c                  ó   — y r   rF   rþ   s    r"   ÚclearzDynamoStore.clear¤  s   € Ø r$   r  Úpathc                  ó   — y)a  
        Abstract method to write dynamo cache entry and backends to storage.

        Args:
            dynamo: The dynamo cache entry to write
            backends: Dictionary of backend content to write
            path: Path or key to identify where to write the data
        NrF   ©r�   r  rÀ  s      r"   ÚwritezDynamoStore.write§  s   € ð 	r$   rI   c                 óà   — ddl m}m} i }|j                  D ]7  }|j	                  |«      }|€t        d|› d�«      ‚t        ||«      sJ ‚|||<   Œ9 t        ||«      }| j                  ||«       y)úY
        Saves a package to a given path. Grabs backends from PrecompileContext.
        r   ©ÚBackendCacheArtifactrµ  Nrš  r›  )	r¶  rÇ  rµ  r™   Úserialize_artifact_by_keyrì   r@   r  rÃ  )	r�   r  rI   rÇ  rµ  r'  rø   Úserialized_backendr¡   s	            r"   Úsave_cache_entryzDynamoStore.save_cache_entry·  s‰   € ÷	
ð
 &(ˆØ%×1Ô1ˆJØ!2×!LÑ!LÈZÓ!XÐØ!Ð)Ü"Ø˜z˜lÐ*MÐNóð ô Ð0Ð2FÔGÐGÐGØ*<ˆO˜JÒ'ð 2ô % [°/ÓBˆà�
‰
�5˜#Õr$   c                 ój   — | j                  |«       |j                  «       }| j                  ||«       y)rÅ  N)r¸  r  rÊ  )r�   r³  rI   r  s       r"   Úsave_packagezDynamoStore.save_packageÎ  s0   € ð 	×Ñ˜GÔ$Ø×)Ñ)Ó+ˆØ×Ñ˜k¨3Õ/r$   c                  ó   — y)a  
        Abstract method to read dynamo cache entry and backends from storage.

        Args:
            path: Path or key to identify where to read the data from

        Returns:
            A tuple containing (dynamo_cache_entry, backend_content)
        NrF   ©r�   rÀ  s     r"   ÚreadzDynamoStore.readÖ  s   € ð 	r$   c                 ó´   — ddl m}m} | j                  |«      }|j                  j                  «       D ]!  }t        ||«      sJ ‚|j                  |«       Œ# |S )Nr   rÆ  )r¶  rÇ  rµ  rÏ  r  rO   r@   r»  )r�   rI   rÇ  rµ  Úprecompile_entryr‡  s         r"   Úload_cache_entryzDynamoStore.load_cache_entryã  sW   € ÷	
ð
  Ÿ9™9 S›>ÐØ'×0Ñ0×7Ñ7Ö9ˆGÜ˜gÐ';Ô<Ð<Ð<Ø×-Ñ-¨gÕ6ð :ð  Ðr$   r   c                 ól   — | j                  |«      }t        ||j                  «      }||j                  fS )úg
        Loads a package from a given path and returns it plus a list of deserialized backends
        )rÒ  rL  r  r  )r�   r   rI   r¡   r³  s        r"   Úload_packagezDynamoStore.load_packageð  s3   € ð ×%Ñ% cÓ*ˆÜ   U§\¡\Ó2ˆØ˜Ÿ™Ð&Ð&r$   r   )rP   rQ   rR   r\   rL  r¸  rt   r   r½  ÚabcÚabstractmethodr¿  r  rV   rÃ  rð   rÊ  rÌ  rÏ  rÒ  rH   rŸ   rÕ  rF   r$   r"   r²  r²  †  s   „ ñð	
 nð 	
¸ó 	
ð
2¨zð 
2ÀCð 
2ÈDó 
2ð 	×ÑÚ ó Ø à×Ñðà)ðð ðð 
ò	ó ððÐ,=ð ÀCð ÈDó ð.0 Nð 0¸ð 0Àó 0ð 	×Ñð
˜ð 
Ð!5ò 
ó ð
ð  Cð  Ð,@ó  ð'Øð'Øð'à	ˆ~˜t J° OÑ4Ð4Ñ	5ô'r$   r²  c                   óD   — e Zd ZdZd
d„Zd
d„Zdededdfd„Zdedefd	„Z	y)ÚInMemoryDynamoStorezX
    A DynamoStore implementation that keeps state about CompilePackages in memory.
    r   Nc                 ó   — i | _         y r   ©Úpackagesrþ   s    r"   r\  zInMemoryDynamoStore.__init__   s	   € Ø9;ˆ�r$   c                 ó8   — | j                   j                  «        y r   )rÜ  r¿  rþ   s    r"   r¿  zInMemoryDynamoStore.clear  s   € Ø�‰×ÑÕr$   r  rÀ  c                 ó"   — || j                   |<   y)za
        Store the dynamo cache entry and backends in memory instead of writing to disk.
        NrÛ  rÂ  s      r"   rÃ  zInMemoryDynamoStore.write  s   € ð *ˆ�‰�dÒr$   c                 óX   — || j                   vrt        d|› �«      ‚| j                   |   S )zC
        Read dynamo cache entry and backends from memory.
        zNo package found with key )rÜ  rì   rÎ  s     r"   rÏ  zInMemoryDynamoStore.read  s2   € ð �t—}‘}Ñ$ÜÐ!;¸D¸6ÐBÓCÐCà�}‰}˜TÑ"Ð"r$   r   )
rP   rQ   rR   r\   r\  r¿  r  rV   rÃ  rÏ  rF   r$   r"   rÙ  rÙ  û  sF   „ ñó<óð*à)ð*ð ð*ð 
ó	*ð#˜ð #Ð!5ô #r$   rÙ  c                   ón   — e Zd ZdZddeddfd„Zdefd„Zdd„Zded	eddfd
„Z	de
d	eddfd„Zd	edefd„Zy)ÚDiskDynamoStorezV
    A DynamoStore implementation that keeps state about CompilePackages on disk.
    Úpath_prefixr   Nc                 ó   — || _         y)z¤
        Initialize a DiskDynamoStore with a path prefix.

        Args:
            path_prefix: Prefix directory for where to put CompilePackages on disk
        N©Ú_path_prefix)r�   râ  s     r"   r\  zDiskDynamoStore.__init__  s   € ð (ˆÕr$   c                 ó   — | j                   S r   rä  rþ   s    r"   râ  zDiskDynamoStore.path_prefix(  r_  r$   c                 óp   — | j                  «       r&t        j                  | j                  «       d¬«       yy)z6
        Clear all CompilePackages from disk.
        T)Úignore_errorsN)râ  ÚshutilÚrmtreerþ   s    r"   r¿  zDiskDynamoStore.clear+  s,   € ð ×ÑÔÜ�M‰M˜$×*Ñ*Ó,¸DÖAð r$   r  rÀ  c                 óì   — 	 t        j                  |«      }t        j                  t        j                  «       ||«       | j                  ||«       y# t        $ r}t        d|› d|› �«      |‚d}~ww xY w)z@
        Write dynamo cache entry and backends to disk.
        úFailed to save package to ú: N)	rd   r$  r  r»  r  r%   r  rå   rì   )r�   r  rÀ  Úpickled_contentÚes        r"   rÃ  zDiskDynamoStore.write2  ss   € ð	PÜ%+§\¡\°+Ó%>ˆOÜ ×0Ñ0Ü'×,Ñ,Ó.°°oôð ×&Ñ& ¸Õ=øÜò 	PÜÐ!;¸D¸6ÀÀAÀ3ÐGÓHÈaÐOûð	Pús   ‚AA Á	A3ÁA.Á.A3rî  c                 óT  — ddl m} | j                  «       r.t        j                  j                  | j                  «       |«      n|}	 t        j                  |d¬«        |t        j                  j                  |d«      |«       y # t        $ r}t        d|› d|› �«      |‚d }~ww xY w)Nr   )Úwrite_atomicT)Úexist_okr¡   rì  rí  )	Útorch._inductor.codecacherñ  râ  ÚosrÀ  r‰   Úmakedirsrå   rì   )r�   rî  rÀ  rñ  rï  s        r"   r  z%DiskDynamoStore._write_to_local_cacheC  sŠ   € Ý:à9=×9IÑ9IÔ9KŒr�w‰w�|‰|˜D×,Ñ,Ó.°Ô5ÐQUˆð	PÜ�K‰K˜ tÕ,ÙœŸ™Ÿ™ d¨GÓ4°oÕFøÜò 	PÜÐ!;¸D¸6ÀÀAÀ3ÐGÓHÈaÐOûð	Pús   Á>B Â	B'ÂB"Â"B'c                 ó˜  — | j                  «       r.t        j                  j                  | j                  «       |«      n|}	 t	        t        j                  j                  |d«      d«      5 }|j                  «       }t        j                  |«      }|cddd«       S # 1 sw Y   yxY w# t        $ r}t        d|› d|› �«      |‚d}~ww xY w)zA
        Read dynamo cache entry and backends from disk.
        r¡   ÚrbNz!Failed to load package from path rí  )
râ  rô  rÀ  r‰   ÚopenrÏ  rd   re   rå   rì   )r�   rÀ  Úfrî  r¡   rï  s         r"   rÏ  zDiskDynamoStore.readM  s§   € ð :>×9IÑ9IÔ9KŒr�w‰w�|‰|˜D×,Ñ,Ó.°Ô5ÐQUˆð	WÜ”b—g‘g—l‘l 4¨Ó1°4Ô8¸AØ"#§&¡&£(�ÜŸ™ _Ó5�Ø÷ 9×8Ò8ûô ò 	WÜÐ!BÀ4À&ÈÈ1È#ÐNÓOÐUVÐVûð	Wús6   Á*B) Á,'BÂ	B) ÂB&Â"B) Â&B) Â)	C	Â2CÃC	)r…   r   )rP   rQ   rR   r\   rV   r\  râ  r¿  r  rÃ  rU   r  rÏ  rF   r$   r"   rá  rá    s†   „ ññ( Cð (°ó (ð!˜Só !óBðPà)ðPð ðPð 
ó	Pð"P°Uð PÀ#ð PÈ$ó PðW˜ð WÐ!5ô Wr$   rá  c                   ó|   ‡ — e Zd ZdZdeddfˆ fd„Zdedef   dee	   fˆ fd„Z
dedef   dee   fd	„Zdefd
„Zˆ xZS )ÚDiskDynamoCachezs
    Special DiskDynamoStore which adds some helper functions for automatically
    tracking paths of packages
    r³  r   Nc                 ó~   •— |j                   }t        j                  d|j                   «       t        ‰| �  ||«       y)rÅ  zSaving CompilePackage for %sN)rp  r"  ÚinfoÚsuperrÌ  )r�   r³  rI   Ú	__class__s      €r"   ÚsavezDiskDynamoCache.savea  s4   ø€ ð ×ÑˆÜ�‰Ð2°G×4EÑ4EÔFÜ‰Ñ˜W cÕ*r$   r   .c                 ó
  •— t         j                  |«      }t        j                  d|«       t        j
                  j                  | j                  «       |«      }t        j
                  j                  |«      r&	 t        ‰| �)  |«      }t        d   dxx   dz  cc<   |S t        j                  d
|«       t        d   dxx   dz  cc<   y	# t        $ r. t        d   dxx   dz  cc<   t        j                  dd¬«       Y y	w xY w)rÔ  zLoading CompilePackage for %sÚdynamo_cacheÚdynamo_cache_hitr   Údynamo_cache_errorz#Failed to load package from path %sT)Úexc_infoNzNo package found for %sÚdynamo_cache_miss)rL  ro  r"  rý  rô  rÀ  r‰   râ  Úexistsrþ  rÒ  r   rå   r#  )r�   r   rI   rÀ  r¼  rÿ  s        €r"   ÚloadzDiskDynamoCache.loadi  så   ø€ ô ×.Ñ.¨rÓ2ˆÜ�‰Ð3°SÔ9Ü�w‰w�|‰|˜D×,Ñ,Ó.°Ó4ˆÜ�7‰7�>‰>˜$ÔðÜ™Ñ1°#Ó6�Ü˜Ñ(Ð);Ó<ÀÑAÓ<Ø�ô
 	�‰Ð-¨sÔ3Ü�Ñ Ð!4Ó5¸Ñ:Ó5Øøô ò Ü˜Ñ(Ð)=Ó>À!ÑCÓ>Ü—‘ÐDÈt�ÔTÙðús   Á;$C Ã4DÄDc                 ó�   — | j                  |«      }|€yt        ||j                  «      }|j                  |j                  «       |S )zC
        Load directly into a package and install backends
        N)r  rL  r  r¨  r  )r�   r   Úresultsr³  s       r"   Úload_and_install_packagez(DiskDynamoCache.load_and_install_package}  s@   € ð —)‘)˜B“-ˆØˆ?Øä$ R¨¯©Ó8ˆGØ�O‰O˜G×,Ñ,Ô-ØˆNr$   c                 óR   — t         j                  j                  t        «       d«      S )Nr  )rô  rÀ  r‰   Ú	cache_dirrþ   s    r"   râ  zDiskDynamoCache.path_prefix‹  s   € Ü�w‰w�|‰|œI›K¨Ó2Ð2r$   )rP   rQ   rR   r\   rL  r   r   r   r	   r  r  r  rV   râ  Ú__classcell__)rÿ  s   @r"   rû  rû  [  sl   ø„ ñð
+˜Nð +¨tõ +ð�x  S Ñ)ð ¨hÐ7KÑ.Lõ ð(Ø˜3 ˜8Ñ$ðà	�.Ñ	!óð3˜S÷ 3r$   rû  c                  ó   — ddl m}   | «       S )Nr   ©r  )Ú'torch._inductor.runtime.cache_dir_utilsr  r  s    r"   r  r  �  s   € ÝAá‹;Ðr$   r  )cr\   rÖ  r¬   rH  r  r¬  r*  re  r~   r  Úloggingrô  rd   ræ   ré  r§   r&   Úcollections.abcr   r   r   r   Útypingr   r   r	   r
   r   Útyping_extensionsr   rn   Útorch._dynamo.excr   Útorch._dynamo.graph_utilsr   Útorch.utils.weakr   Úbytecode_transformationr   rB  r   r   r   Ú	getLoggerrP   r"  rp   r   r   r    r(   Ú	dataclassr   rY   rU   rg   r'   rs   rV   rt   ru   rw   Úcacher°  r€   r‚   r“   r²   rµ   rH   rÓ   rÕ   rð   Útorch.compiler._cacher  r  r  Úregisterr  r  rŒ   rS   rž   rŠ   r4  ÚAbstractContextManagerrJ  rL  rŸ   Ú	_BackendsÚABCr²  rÙ  rá  rû  r  rÀ  r‰   r
  rF   r$   r"   Ú<module>r"     sé  ðñó Û 
Û Û Û Û Û Û Û Û Û 	Û Û Û Û 
Û ß 9Ñ 9Ý "ß ?Õ ?Ý #ã Ý *Ý 8Ý 0å 2ß :Ñ :ð 
ˆ×	Ñ	˜8Ó	$€ñ ß8ñ "Ó#€ð
�H˜S #˜XÑ&ð 
¨8°C¸°HÑ+=ó 
ð €×Ñ˜dÔ#÷)
ð )
ó $ð)
ðX ×Ñ÷	 ð 	 ó ð	 ð* Eð *¨có *ðØðà—‘ðð ðð ó	ñ �\ 3Ó'€
Ù�m SÓ)€ð €×Ñ˜dÔ#÷ð ó $ðð ‡�ð% × 0Ñ 0ð %°Sò %ó ð%ð ×Ñ÷
ð 
ó ð
ð, ×Ñ÷ð ó ððBÐ-ð °%·.±.ó ð0 %§.¡.ð ¸ð Àó ðV9˜5Ÿ>™>ð V9¨e°C¸°H©oó V9ðr €×Ñ˜dÔ#÷Mð Mó $ðMð` ×Ñ÷
ð 
ó ð
÷8ñ ð ×Ñô˜mó ó ðð ×Ñ÷)Rð )Ró ð)RðX#˜ð # ó #ðJØ×ÑðJØ&)ðJØ7:ðJà	ˆ#�YóJðO˜×)Ñ)ð O¸ð OÈð OÐQTó Oð!Ø
�.‰.ð!à×&Ñ& tÑ,ó!÷HJ'ñ J'ðZ
 �˜S�Ñ!€	ôr'�#—'‘'ô r'ôj#˜+ô #ô>>W�kô >WôB13�oô 13ðh�3ó ñ ˜bŸg™gŸl™l©9«;¸ÓAÓB�r$   