§
    L�’jZ  ã                   óú   — 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mZ edde
j        d	edz  fd
„¦   «         Z G d„ de¦  «        Z ee¦  «        de
j        de
j        fd„¦   «         ZdS )é    )Ú	Generator)ÚAbstractContextManagerÚcontextmanagerÚnullcontext)ÚAnyN)Ú'_checkpoint_without_reentrant_generatorÚ_DEFAULT_DETERMINISM_MODEé   )Ú_StateÚcontractÚmoduleÚuser_ctxc              #   óp  K  — |r|nt          ¦   «         5  t                               | ¦  «        j        }dt                               | ¦  «        _        	 dV — |t                               | ¦  «        _        n$# |t                               | ¦  «        _        w xY w	 ddd¦  «         dS # 1 swxY w Y   dS )zs
    Disable hooks installed by checkpoint to avoid unintentional recursion
    during backward recomputation.
    FN)r   Ú
checkpointÚstateÚenable_hook)r   r   Úorig_enable_hooks      úaC:\Projects\DSCons\.venv\Lib\site-packages\torch\distributed\_composable\checkpoint_activation.pyÚ_no_hookr      s  è è € ð Ð	0ˆˆ¥;¡=¤=ð Dð DÝ%×+Ò+¨FÑ3Ô3Ô?ÐØ/4�
×Ò˜Ñ Ô Ô,ð	DØˆEˆEˆEà3C�J×Ò˜VÑ$Ô$Ô0Ð0øÐ3C�J×Ò˜VÑ$Ô$Ô0ÐCÐCÐCÐCÐ0ðDð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð Dð Dð Ds)   •?B+ÁA9Á B+Á9!BÂB+Â+B/Â2B/c                   ó:   — e Zd ZU dZeed<   ed         dz  ed<   dS )Ú_CheckpointStateFr   )NNNNÚ_ac_generator)Ú__name__Ú
__module__Ú__qualname__r   ÚboolÚ__annotations__r   © ó    r   r   r       s9   € € € € € € Ø€K�ÐÐÑØÐ-Ô.°Ñ5Ð5Ð5Ñ5Ð5Ð5r   r   Úreturnc                 ón  ‡‡‡‡‡	— t           j                             d¦  «         |                     dd¦  «        }|rt	          d¦  «        ‚|                     dd¦  «        Š|                     dd¦  «        Š	|                     d	t
          ¦  «        Š|                     d
d¦  «        Š|                     dd¦  «        Š|r/t          dd                     d„ |D ¦   «         ¦  «        z   ¦  «        ‚dt          j	        dt          t          df         dt          t          t          f         ddfˆˆˆˆˆ	fd„}dt          j	        dt          t          df         dt          dt          fd„}dt                               | ¦  «        _        |                      |d¬¦  «         |                      |dd¬¦  «         | S )a§  
    This is a composable activation checkpointing API. Unlike functional
    activation checkpointing APIs, this one does not require changing model
    source code. Unlike ``nn.Module`` wrapper activation checkpointing APIs,
    this one does not modify model structure or fully-qualified names either.
    Under the hood, it registers activation checkpointing logic as pre- and
    post-forward hooks. Hence, this API can be easily applied to any model or
    sub-modules in the model.

    Args:
        module (nn.Module): the target model or sub-module to apply activation
            checkpointing.

    Example::
        >>> # xdoctest: +SKIP
        >>> import torch.nn as nn
        >>>
        >>> class MyModel(nn.Module):
        >>>     def __init__(self) -> None:
        >>>         super().__init__()
        >>>         self.l1 = nn.Linear(10, 10)
        >>>         self.l2 = nn.Linear(10, 10)
        >>>
        >>>     def forward(self, x):
        >>>         return self.l2(self.l1(x))
        >>>
        >>> model = MyModel()
        >>> checkpoint(model.l1)  # apply activation checkpointing only to l1
        >>> model(torch.zeros(2, 10)).sum().backward()

    ztorch.distributed.checkpointÚuse_reentrantFzsuse_reentrant=True is not supported in composable checkpoint. Please use torch.utils.checkpoint.checkpoint instead.Úpreserve_rng_stateTÚ
context_fnNÚdeterminism_checkÚdebugÚ
early_stopzUnexpected keyword arguments: ú,c              3   ó   K  — | ]}|V — Œd S ©Nr   )Ú.0Úargs     r   ú	<genexpr>zcheckpoint.<locals>.<genexpr>V   s"   è è € Ð7NÐ7NÀ¸Ð7NÐ7NÐ7NÐ7NÐ7NÐ7Nr   r   Úargs.Úkwargsr    c                 óÞ   •‡ — t                                ‰ ¦  «        j        rKˆ ˆ	fd„}t          ‰ ‰|‰‰‰g|¢R i |¤Ž}|t                                ‰ ¦  «        _        t          |¦  «         d S d S )Nc                  ó€   •— ‰� ‰¦   «         \  } }| t          ‰|¦  «        fS t          ¦   «         t          ‰¦  «        fS r*   )r   r   )Úctx1Úctx2r   Úuser_context_fnss     €€r   Úcontext_fnsz9checkpoint.<locals>.forward_pre_hook.<locals>.context_fns^   sG   ø€ Ø#Ð/Ø!1Ð!1Ñ!3Ô!3‘J�D˜$Ø¥¨&°$Ñ!7Ô!7Ð7Ð7å&™=œ=­(°6Ñ*:Ô*:Ð:Ð:r   )r   r   r   r   r   Únext)
r   r.   r/   r5   Úgenr&   r%   r'   r#   r4   s
   `    €€€€€r   Úforward_pre_hookz$checkpoint.<locals>.forward_pre_hookY   s¯   øø€ õ ×Ò˜FÑ#Ô#Ô/ð 	ð;ð ;ð ;ð ;ð ;ð ;õ :ØØ"ØØ!ØØð	ð ð	ð 	ð 	ð ð	ð 	ˆCð 69�J×Ò˜VÑ$Ô$Ô2Ý�‰IŒIˆIˆIˆIð)	ð 	r   ÚinputsÚoutputc                 ó0  — t                                | ¦  «        j        rW	 t                                | ¦  «        j        }|€t          ‚t          |¦  «         t          d¦  «        ‚# t          $ r Y nw xY wd t                                | ¦  «        _        d S )NzWExpected non-reentrant activation checkpoint generator to be exhausted, but it was not!)r   r   r   r   ÚAssertionErrorr6   ÚRuntimeErrorÚStopIteration)r   r9   r:   r7   s       r   Úforward_hookz checkpoint.<locals>.forward_hookr   s£   € Ý×Ò˜FÑ#Ô#Ô/ð 	ð
Ý ×&Ò& vÑ.Ô.Ô<�Ø�;Ý(Ð(Ý�S‘	”	�	õ #Ømñô ð øõ !ð ð ð Ø�ðøøøð 26�
×Ò˜Ñ Ô Ô.Ð.Ð.s   ¡7A' Á'
A4Á3A4)Úwith_kwargs)ÚprependÚalways_call)ÚtorchÚ_CÚ_log_api_usage_onceÚpopÚNotImplementedErrorr	   Ú
ValueErrorÚjoinÚnnÚModuleÚtupler   ÚdictÚstrr   r   r   Úregister_forward_pre_hookÚregister_forward_hook)
r   r/   r"   r8   r?   r&   r%   r'   r#   r4   s
        @@@@@r   r   r   %   sé  øøøøø€ õB 
„H× Ò Ð!?Ñ@Ô@Ð@à—J’J˜°Ñ6Ô6€MØð 
Ý!ðDñ
ô 
ð 	
ð  ŸšÐ$8¸$Ñ?Ô?ÐØ—z’z ,°Ñ5Ô5ÐØŸ
š
Ð#6Õ8QÑRÔRÐØ�JŠJ�w Ñ&Ô&€EØ—’˜L¨$Ñ/Ô/€Jàð 
ÝØ,¨s¯xªxÐ7NÐ7NÀvÐ7NÑ7NÔ7NÑ/NÔ/NÑNñ
ô 
ð 	
ðÝ”	ðÝ!&¥s¨C x¤ðÝ:>½sÅC¸x¼.ðà	ðð ð ð ð ð ð ð ð ð ð26�RœYð 6µµc¸3°h´ð 6Íð 6ÕQTð 6ð 6ð 6ð 6ð$ ,0…J×Ò�VÑÔÔ(Ø
×$Ò$Ð%5À4Ð$ÑHÔHÐHØ
× Ò  °tÈÐ ÑNÔNÐNØ€Mr   r*   )Úcollections.abcr   Ú
contextlibr   r   r   Útypingr   rC   Útorch.nnrJ   Útorch.utils.checkpointr   r	   r   r   rK   r   r   r   r   r   r   ú<module>rV      s`  ðà %Ð %Ð %Ð %Ð %Ð %Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð
 'Ð &Ð &Ð &Ð &Ð &Ð &Ð &ð ðDð D�R”Yð DÐ*@À4Ñ*Gð Dð Dð Dñ „ðDð6ð 6ð 6ð 6ð 6�vñ 6ô 6ð 6ð
 
€Ð
ÑÔða�r”yð a¨r¬yð að að añ Ôðað að ar   