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