a
    OSic                     @   sH   d dl Z d dlZd dlmZ ddgZG dd deZG dd deZdS )    N)Anydetect_anomalyset_detect_anomalyc                   @   s<   e Zd ZdZddddZddddZeddd	d
ZdS )r   an  Context-manager that enable anomaly detection for the autograd engine.

    This does two things:

    - Running the forward pass with detection enabled will allow the backward
      pass to print the traceback of the forward operation that created the failing
      backward function.
    - Any backward computation that generate "nan" value will raise an error.

    .. warning::
        This mode should be enabled only for debugging as the different tests
        will slow down your program execution.

    Example:

        >>> import torch
        >>> from torch import autograd
        >>> class MyFunc(autograd.Function):
        ...     @staticmethod
        ...     def forward(ctx, inp):
        ...         return inp.clone()
        ...     @staticmethod
        ...     def backward(ctx, gO):
        ...         # Error during the backward pass
        ...         raise RuntimeError("Some error in backward")
        ...         return gO.clone()
        >>> def run_fn(a):
        ...     out = MyFunc.apply(a)
        ...     return out.sum()
        >>> inp = torch.rand(10, 10, requires_grad=True)
        >>> out = run_fn(inp)
        >>> out.backward()
            Traceback (most recent call last):
              File "<stdin>", line 1, in <module>
              File "/your/pytorch/install/torch/_tensor.py", line 93, in backward
                torch.autograd.backward(self, gradient, retain_graph, create_graph)
              File "/your/pytorch/install/torch/autograd/__init__.py", line 90, in backward
                allow_unreachable=True)  # allow_unreachable flag
              File "/your/pytorch/install/torch/autograd/function.py", line 76, in apply
                return self._forward_cls.backward(self, *args)
              File "<stdin>", line 8, in backward
            RuntimeError: Some error in backward
        >>> with autograd.detect_anomaly():
        ...     inp = torch.rand(10, 10, requires_grad=True)
        ...     out = run_fn(inp)
        ...     out.backward()
            Traceback of forward call that caused the error:
              File "tmp.py", line 53, in <module>
                out = run_fn(inp)
              File "tmp.py", line 44, in run_fn
                out = MyFunc.apply(a)
            Traceback (most recent call last):
              File "<stdin>", line 4, in <module>
              File "/your/pytorch/install/torch/_tensor.py", line 93, in backward
                torch.autograd.backward(self, gradient, retain_graph, create_graph)
              File "/your/pytorch/install/torch/autograd/__init__.py", line 90, in backward
                allow_unreachable=True)  # allow_unreachable flag
              File "/your/pytorch/install/torch/autograd/function.py", line 76, in apply
                return self._forward_cls.backward(self, *args)
              File "<stdin>", line 8, in backward
            RuntimeError: Some error in backward

    Nreturnc                 C   s   t  | _tjddd d S )NzqAnomaly Detection has been enabled. This mode will increase the runtime and should only be enabled for debugging.   )
stacklevel)torchis_anomaly_enabledprevwarningswarnself r   W/var/www/html/django/DPS/env/lib/python3.9/site-packages/torch/autograd/anomaly_mode.py__init__I   s    
zdetect_anomaly.__init__c                 C   s   t d d S )NT)r	   set_anomaly_enabledr   r   r   r   	__enter__O   s    zdetect_anomaly.__enter__argsr   c                 G   s   t | j d S Nr	   r   r   r   r   r   r   r   __exit__R   s    zdetect_anomaly.__exit__)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r      s   @c                   @   s>   e Zd ZdZeddddZddddZedd	d
dZdS )r   a  Context-manager that sets the anomaly detection for the autograd engine on or off.

    ``set_detect_anomaly`` will enable or disable the autograd anomaly detection
    based on its argument :attr:`mode`.
    It can be used as a context-manager or as a function.

    See ``detect_anomaly`` above for details of the anomaly detection behaviour.

    Args:
        mode (bool): Flag whether to enable anomaly detection (``True``),
                     or disable (``False``).

    N)moder   c                 C   s   t  | _t | d S r   )r	   r
   r   r   )r   r   r   r   r   r   e   s    
zset_detect_anomaly.__init__r   c                 C   s   d S r   r   r   r   r   r   r   i   s    zset_detect_anomaly.__enter__r   c                 G   s   t | j d S r   r   r   r   r   r   r   l   s    zset_detect_anomaly.__exit__)	r   r   r   r   boolr   r   r   r   r   r   r   r   r   V   s   )r	   r   typingr   __all__objectr   r   r   r   r   r   <module>   s
   N