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()40inline const DefaultTensorOptions& getDefaultTensorOptions() { 41 static const auto options = DefaultTensorOptions(); 42 return options; 43 } 44 45 } // namespace c10 46