File: python_torch_function_mode.h

package info (click to toggle)
pytorch 1.13.1%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 139,252 kB
  • sloc: cpp: 1,100,274; python: 706,454; ansic: 83,052; asm: 7,618; java: 3,273; sh: 2,841; javascript: 612; makefile: 323; xml: 269; ruby: 185; yacc: 144; objc: 68; lex: 44
file content (26 lines) | stat: -rw-r--r-- 814 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#pragma once

#include <ATen/PythonTorchFunctionTLS.h>

namespace torch {
namespace overrides {

// Corresponds to torch.overrides._no_torch_function_mode.  We discourage use
// of this in userland because it's non-compositional; there might be another
// mode waiting to go after you, and you shouldn't just blindly disable it.
// From C++ side, there is no such thing as compositional modes, there is one
// mode and of course you should be able to clear it.
struct StashTorchFunctionModeGuard {
  StashTorchFunctionModeGuard() {
    at::impl::PythonTorchFunctionTLS::swap_mode(old_mode_);
  }
  ~StashTorchFunctionModeGuard() {
    at::impl::PythonTorchFunctionTLS::set_mode(std::move(old_mode_));
  }

 private:
  std::shared_ptr<c10::SafePyObject> old_mode_;
};

} // namespace overrides
} // namespace torch