• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #pragma once
2 
3 #include <c10/core/Device.h>
4 #include <c10/core/DeviceType.h>
5 #include <c10/core/Layout.h>
6 #include <c10/core/ScalarType.h>
7 #include <c10/util/typeid.h>
8 
9 namespace c10 {
10 
11 struct TensorOptions;
12 
13 /// Like TensorOptions, but all fields are guaranteed to be filled.
14 struct DefaultTensorOptions {
15   DefaultTensorOptions() = default;
16 
dtypeDefaultTensorOptions17   caffe2::TypeMeta dtype() const noexcept {
18     return dtype_;
19   }
deviceDefaultTensorOptions20   Device device() const noexcept {
21     return device_;
22   }
layoutDefaultTensorOptions23   Layout layout() const noexcept {
24     return layout_;
25   }
requires_gradDefaultTensorOptions26   bool requires_grad() const noexcept {
27     return requires_grad_;
28   }
29 
30   // Defined in TensorOptions.h
31   inline DefaultTensorOptions& merge(const TensorOptions& options);
32 
33  private:
34   caffe2::TypeMeta dtype_ = caffe2::TypeMeta::Make<float>(); // 64-bit
35   Device device_ = at::kCPU; // 32-bit
36   Layout layout_ = at::kStrided; // 8-bit
37   bool requires_grad_ = false; // 8-bit
38 };
39 
getDefaultTensorOptions()40 inline const DefaultTensorOptions& getDefaultTensorOptions() {
41   static const auto options = DefaultTensorOptions();
42   return options;
43 }
44 
45 } // namespace c10
46