xref: /aosp_15_r20/external/pytorch/c10/core/Scalar.cpp (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1 #include <c10/core/Scalar.h>
2 
3 namespace c10 {
4 
operator -() const5 Scalar Scalar::operator-() const {
6   TORCH_CHECK(
7       !isBoolean(),
8       "torch boolean negative, the `-` operator, is not supported.");
9   if (isFloatingPoint()) {
10     TORCH_CHECK(!isSymbolic(), "NYI negate symbolic float");
11     return Scalar(-v.d);
12   } else if (isComplex()) {
13     TORCH_INTERNAL_ASSERT(!isSymbolic());
14     return Scalar(-v.z);
15   } else if (isIntegral(false)) {
16     TORCH_CHECK(!isSymbolic(), "NYI negate symbolic int");
17     return Scalar(-v.i);
18   }
19   TORCH_INTERNAL_ASSERT(false, "unknown ivalue tag ", static_cast<int>(tag));
20 }
21 
conj() const22 Scalar Scalar::conj() const {
23   if (isComplex()) {
24     TORCH_INTERNAL_ASSERT(!isSymbolic());
25     return Scalar(std::conj(v.z));
26   } else {
27     return *this;
28   }
29 }
30 
log() const31 Scalar Scalar::log() const {
32   if (isComplex()) {
33     TORCH_INTERNAL_ASSERT(!isSymbolic());
34     return std::log(v.z);
35   } else if (isFloatingPoint()) {
36     TORCH_CHECK(!isSymbolic(), "NYI log symbolic float");
37     return std::log(v.d);
38   } else if (isIntegral(false)) {
39     TORCH_CHECK(!isSymbolic(), "NYI log symbolic int");
40     return std::log(v.i);
41   }
42   TORCH_INTERNAL_ASSERT(false, "unknown ivalue tag ", static_cast<int>(tag));
43 }
44 
45 } // namespace c10
46