#pragma once
|
|
#include <c10/core/DeviceGuard.h>
|
#include <ATen/core/Tensor.h>
|
#include <c10/core/ScalarType.h> // TensorList whyyyyy
|
|
namespace at {
|
|
// Are you here because you're wondering why DeviceGuard(tensor) no
|
// longer works? For code organization reasons, we have temporarily(?)
|
// removed this constructor from DeviceGuard. The new way to
|
// spell it is:
|
//
|
// OptionalDeviceGuard guard(device_of(tensor));
|
|
/// Return the Device of a Tensor, if the Tensor is defined.
|
inline optional<Device> device_of(const Tensor& t) {
|
if (t.defined()) {
|
return make_optional(t.device());
|
} else {
|
return nullopt;
|
}
|
}
|
|
/// Return the Device of a TensorList, if the list is non-empty and
|
/// the first Tensor is defined. (This function implicitly assumes
|
/// that all tensors in the list have the same device.)
|
inline optional<Device> device_of(TensorList t) {
|
if (!t.empty()) {
|
return device_of(t.front());
|
} else {
|
return nullopt;
|
}
|
}
|
|
} // namespace at
|