1#include <c10/core/Scalar.h>
2
3namespace c10 {
4
5Scalar 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
22Scalar 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
31Scalar 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