reid from https://github.com/michuanhaohao/reid-strong-baseline
zhangmeng
2020-01-10 c3765bd24fe73747688a0ec2a550f219c9acb384
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
27
28
29
30
31
32
33
34
35
36
#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