Ë
    g^(hd  ã                   óÄ  — d Z ddlZddlZddlmZmZmZmZmZm	Z	 ddl
mZmZ ddlZddlmc mZ 	 ddlZ ed«      Z ed«      Zer ede¬«      d	efd
„«       Znd	efd„Zdeeef   d	eeef   fd„Zdedeej6                     f   deded	ej6                  fd„Zdeeef   d	eeef   fd„Z G d„ d«      Zdej>                  j@                  jB                  de"ej6                     ded	e	ej6                  e#ej6                  df   f   fd„Z$ded	e"e   fd„Z%dej6                  d	e&fd„Z' G d„ d«      Z(deded e)ded	ef
d!„Z*d"ed#ededed$e)d%e)d	efd&„Z+y# e$ r dZY �Œ)w xY w)'a«  
This module contains utility functions that are explicitly allowed to be called during
TorchDynamo compilation. These functions are carefully vetted to ensure they work
correctly within the TorchDynamo tracing and compilation process.

Key functionality groups:

- Compilation State:
  Functions for checking compilation state (is_compiling)

- Function Wrapping:
  Utilities for wrapping functions (wrap_inline, wrap_numpy) to work with
  TorchDynamo compilation

- Autograd Hooks:
  Functions and classes for handling autograd hooks and backward passes
  (call_hook, FakeBackwardCFunction, etc.)

- Tensor Operations:
  Utility functions for tensor operations and transformations
é    N)ÚAnyÚCallableÚOptionalÚTYPE_CHECKINGÚTypeVarÚUnion)Ú
deprecatedÚ	ParamSpecÚ_PÚ_Rze`torch._dynamo.external_utils.is_compiling` is deprecated. Use `torch.compiler.is_compiling` instead.)ÚcategoryÚreturnc                  ó>   — t         j                  j                  «       S ©N©ÚtorchÚcompilerÚis_compiling© ó    úZ/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_dynamo/external_utils.pyr   r   -   s   € ô
 �~‰~×*Ñ*Ó,Ð,r   c                  ó>   — t         j                  j                  «       S )zd
        Indicates whether we are tracing/compiling with torch.compile() or torch.export().
        r   r   r   r   r   r   6   s   € ô �~‰~×*Ñ*Ó,Ð,r   Úfnc                 ó�   ‡ — t        j                  ‰ «      dt        j                  dt        j                  dt
        fˆ fd„«       }|S )zC
    Create an extra frame around fn that is not in skipfiles.
    ÚargsÚkwargsr   c                  ó   •—  ‰| i |¤ŽS r   r   )r   r   r   s     €r   Úinnerzwrap_inline.<locals>.innerD   s   ø€ á�4Ð"˜6Ñ"Ð"r   )Ú	functoolsÚwrapsr   r   r   r   )r   r   s   ` r   Úwrap_inliner!   ?   sD   ø€ ô
 ‡_�_�RÓð#”R—W‘Wð #¬¯	©	ð #´bô #ó ð#ð €Lr   Úhook.r   r   c                 ó\   —  | |Ž }|€|d   S |j                  d«      dk(  rt        d«      ‚|S )zB
    Used by compiled autograd to handle hook returning None.
    r   Ú	hook_typeÚpost_acc_grad_hookz5Tensor post accumulate grad hooks should return None.)ÚgetÚRuntimeError)r"   r   r   Úresults       r   Ú	call_hookr)   K   s>   € ñ �4ˆ[€FØ€~Ø�A‰wˆØ	�‰�KÓ	 Ð$8Ò	8ÜÐRÓSÐSØ€Mr   Úfc                 ó´   ‡ — t         s‰ S t        j                  ‰ «      dt        j                  dt        j
                  dt        j                  fˆ fd„«       }|S )z�Decorator that turns a function from ``np.ndarray``s to ``np.ndarray``s into a function
    from ``torch.Tensor``s to ``torch.Tensor``s.
    r   r   r   c                  ó¶   •— t        j                  t        j                  d„ | |f«      \  } } ‰| i |¤Ž}t        j                  t        j
                  d„ |«      S )Nc                 ó"   — | j                  «       S r   )Únumpy©Úxs    r   ú<lambda>z*wrap_numpy.<locals>.wrap.<locals>.<lambda>c   s   €  A§G¡G£I€ r   c                 ó,   — t        j                  | «      S r   )r   Ú	as_tensorr/   s    r   r1   z*wrap_numpy.<locals>.wrap.<locals>.<lambda>f   s   € ¼%¿/¹/È!Ó:L€ r   )ÚpytreeÚtree_map_onlyr   ÚTensorÚnpÚndarray)r   r   Úoutr*   s      €r   Úwrapzwrap_numpy.<locals>.wrap`   sR   ø€ ä×+Ñ+Ü�L‰LÑ-°°f¨~ó
‰ˆˆfñ �Ð ˜Ñ ˆÜ×#Ñ#¤B§J¡JÑ0LÈcÓRÐRr   )r7   r   r    r   r   r   r4   ÚPyTree)r*   r:   s   ` r   Ú
wrap_numpyr<   Y   sU   ø€ õ Øˆä‡_�_�QÓðS”B—G‘Gð S¤r§y¡yð S´V·]±]ô Só ðSð €Kr   c                   ó†   — e Zd Zdej                  j
                  j                  deej                     ddfd„Z	de
defd„Zy)ÚFakeBackwardCFunctionÚrealÚsaved_tensorsr   Nc                 ó    — || _         || _        y r   )r?   r@   )Úselfr?   r@   s      r   Ú__init__zFakeBackwardCFunction.__init__l   s   € ð
 ˆŒ	Ø*ˆÕr   Únamec                 ó„   — |dk(  r&t        j                  dt        «       | j                  S t	        | j
                  |«      S )NÚsaved_variablesz4'saved_variables' is deprecated; use 'saved_tensors')ÚwarningsÚwarnÚDeprecationWarningr@   Úgetattrr?   )rB   rD   s     r   Ú__getattr__z!FakeBackwardCFunction.__getattr__t   s<   € ØÐ$Ò$Ü�M‰MØFÜ"ôð ×%Ñ%Ð%ä�t—y‘y $Ó'Ð'r   )Ú__name__Ú
__module__Ú__qualname__r   ÚautogradÚfunctionÚBackwardCFunctionÚlistr6   rC   Ústrr   rK   r   r   r   r>   r>   k   sO   „ ð+à�n‰n×%Ñ%×7Ñ7ð+ð ˜EŸL™LÑ)ð+ð 
ó	+ð( ð (¨ô (r   r>   Úbackward_c_functionr@   c                 ó~   — t        | |«      } |j                  j                  |g|¢­Ž }t        |t        «      s|f}|S r   )r>   Ú_forward_clsÚbackwardÚ
isinstanceÚtuple)rT   r@   r   ÚfakeÚgradss        r   Úcall_backwardr\      sD   € ô
 !Ð!4°mÓD€DØ&ˆD×Ñ×&Ñ& tÐ3¨dÒ3€Eä�eœUÔ#Ø�ˆà€Lr   r0   c                 ób   — t        | t        «      rt        | «      S t        | t        «      r| S | gS r   )rX   rY   rR   r/   s    r   Únormalize_as_listr^   �   s+   € Ü�!”UÔÜ�A‹wˆÜ	�A”tÔ	ØˆØˆ3€Jr   c                 ó>   — | j                  «       j                  «       S r   )Úuntyped_storageÚsizer/   s    r   Úuntyped_storage_sizerb   •   s   € Ø×ÑÓ×#Ñ#Ó%Ð%r   c                   ó€   — e Zd Zedeeg df      deg df   ddfd„«       Zedeeg df      ddfd„«       Zedd„«       Zy)	ÚFakeCompiledAutogradEngineÚfinal_callbacksNÚcbr   c                 ó&   — | j                  |«       y r   )Úappend)re   rf   s     r   Úqueue_callbackz)FakeCompiledAutogradEngine.queue_callbackš   s   € ð 	×Ñ˜rÕ"r   c                 ó„   — d}|t        | «      k  r | |   } |«        |dz  }|t        | «      k  rŒ | j                  «        y )Nr   é   )ÚlenÚclear)re   Úirf   s      r   Úexec_final_callbacksz/FakeCompiledAutogradEngine.exec_final_callbacks    sI   € àˆØ”#�oÓ&Ò&Ø  Ñ#ˆBÙŒDØ�‰FˆAð ”#�oÓ&Ó&ð 	×ÑÕr   c                   ó   — y r   r   r   r   r   Ú_exec_final_callbacks_stubz5FakeCompiledAutogradEngine._exec_final_callbacks_stub©   s   € àr   )r   N)	rL   rM   rN   ÚstaticmethodrR   r   ri   ro   rq   r   r   r   rd   rd   ™   s‡   „ Øð#Ø˜h r¨4 xÑ0Ñ1ð#Ø7?ÀÀDÀÑ7Ið#à	ò#ó ð#ð
 ð ¨d°8¸BÀ¸HÑ3EÑ.Fð  È4ò  ó ð ð òó ñr   rd   Úbw_stateÚ	hook_namec                 ó&   —  t        | |«      |i |¤ŽS r   ©rJ   )rs   rt   r   r   s       r   Úcall_hook_from_backward_staterw   ®   s   € ð (Œ7�8˜YÓ'¨Ð8°Ñ8Ð8r   Ú_r(   Ú
hooks_nameÚmodule_namec                ób   — t        ||«      }t        ||«      }|D ]  } |||g|¢­Ž }	|	€Œ|	}Œ |S r   rv   )
rx   r(   rs   ry   rz   r   ÚmoduleÚhooksr"   Ú
new_results
             r   Ú%call_module_hooks_from_backward_stater   ´   sN   € ô �X˜{Ó+€FÜ�H˜jÓ)€EØò  ˆÙ˜& &Ð0¨4Ò0ˆ
ØÑ!Ø‰Fð ð €Mr   ),Ú__doc__r   rG   Útypingr   r   r   r   r   r   Útyping_extensionsr	   r
   r   Útorch.utils._pytreeÚutilsÚ_pytreer4   r.   r7   ÚModuleNotFoundErrorr   r   ÚFutureWarningÚboolr   r!   r6   r)   r<   r>   rO   rP   rQ   rR   rY   r\   r^   Úintrb   rd   rS   rw   r   r   r   r   ú<module>rŠ      s  ðñó, Û ß I× Iß 3ã ß $Ð $ðÛñ ˆtƒ_€ÙˆTƒ]€áñ ØoØôð-˜$ò -ó	ñ-ð
-˜$ó -ð	�H˜R ˜VÑ$ð 	¨°"°b°&Ñ)9ó 	ðØ
�3˜ §¡Ñ.Ð.Ñ
/ðØ8;ðØGJðà
‡\�\óð�(˜2˜r˜6Ñ"ð  x°°B°Ñ'7ó ÷$(ñ (ð(ØŸ™×0Ñ0×BÑBðà˜Ÿ™Ñ%ðð ðð ˆ5�<‰<˜˜uŸ|™|¨SÐ0Ñ1Ð1Ñ2ó	ð˜ð   c¡ó ð&˜EŸL™Lð &¨Só &÷ñ ð*9Øð9Øð9Ø*-ð9Ø9<ð9àó9ð	Ø
ð	Øð	Ø #ð	Ø/2ð	Ø@Cð	ØRUð	àô	øða ò Ø	ƒBðús   ±E ÅEÅE