Caffe2 - C++ API
A deep learning, cross platform ML framework
Scalar.cpp
1 #include <ATen/ATen.h>
2 #include <ATen/NativeFunctions.h>
3 
4 namespace at {
5 namespace native {
6 
7 Scalar item(const Tensor& self) {
8  int64_t numel = self.numel();
9  AT_CHECK(numel == 1, "a Tensor with ", numel, " elements cannot be converted to Scalar");
10  if (self.is_sparse()) {
11  if (self._nnz() == 0) return Scalar(0);
12  if (self.is_coalesced()) return at::_local_scalar_dense(self._values());
13  return at::_local_scalar_dense(self._values().sum());
14  } else {
15  return _local_scalar_dense(self);
16  }
17 }
18 
19 Scalar _local_scalar_dense_cpu(const Tensor& self) {
20  Scalar r;
21  AT_DISPATCH_ALL_TYPES_AND_COMPLEX_AND(
22  at::ScalarType::Half, at::ScalarType::Bool, self.scalar_type(), "_local_scalar_dense_cpu", [&] {
23  scalar_t value = *self.data<scalar_t>();
24  r = Scalar(value);
25  });
26  return r;
27 }
28 
29 }} // at::native
Flush-To-Zero and Denormals-Are-Zero mode.