class_docstr: A ``TorchDispatchMode`` allows you to override the meaning of all
  ``__torch_dispatch__`` overrideable functions within a dynamic scope,
  without having to actually create a tensor subclass or manually
  monkey-patch functions in the PyTorch API.  Some common situations
  where you should use a mode:
  
      * You want to override the meaning of factory functions, or other
        functions that do not otherwise take a tensor as an argument
        (these cannot be overridden with tensor subclasses).
  
      * You want to override the behavior of all functions without needing
        to wrap your inputs in tensor subclasses; e.g., if you are just
        interested in logging intermediate computations.
  
      * You want to control the order of execution of various tensor
        subclasses explicitly, rather than implicitly via the return of
        ``NotImplemented``.
  
  Independent subclasses of :class:`TorchDispatchMode` are compositional:
  modes can be pushed onto a stack using ``with MyMode():``.
  When you call functions in the PyTorch API inside your
  ``__torch_dispatch__`` implementation, by default, they will forward on to
  the next mode on the mode stack.  If you want recursively call back into
  your current ``__torch_dispatch__`` implementation, either explicitly
  invoke ``self.__torch_dispatch__(...)``, or use the context manager
  ``__torch_dispatch__(self)`` to make PyTorch
  API self-referential (beware of infinite loops, in this case!)
code: def __init__(self, _dispatch_key=None):
      if _dispatch_key is not None:
          assert isinstance(_dispatch_key, torch._C.DispatchKey)
          self.__dict__["_dispatch_key"] = _dispatch_key
  
imports: import contextlib
  from typing import Optional, Union, List, Set, Dict, Any
  import warnings
  from dataclasses import dataclass
  import torch
  import torchgen
  from torch._C import _len_torch_dispatch_stack, _get_dispatch_stack_at, _pop_torch_dispatch_stack, _push_on_torch_dispatch_stack, DispatchKey
label_desc: Use image node_id 1 to create a new TorchDispatchMode object  with example: obj = TorchDispatchMode(_dispatch_key)