symbol
See
./code/symbol/main.cc
1#include "torch/script.h"
2
3static void TestHello() {
4 // defined in
5 // https://github.com/pytorch/pytorch/blob/master/aten/src/ATen/core/interned_strings.h
6 c10::Symbol s = c10::namespaces::prim;
7 TORCH_CHECK(int(s) == 0);
8
9 s = c10::namespaces::aten;
10 s = c10::namespaces::cuda;
11 s = c10::namespaces::onnx;
12 s = c10::namespaces::scope;
13 s = c10::namespaces::_caffe2;
14 s = c10::namespaces::namespaces;
15
16 s = c10::prim::Assign;
17 TORCH_CHECK(int(s) == 10);
18
19 s = c10::prim::Constant;
20 s = c10::prim::device;
21 s = c10::prim::dtype;
22
23 s = c10::aten::Bool;
24 s = c10::aten::sorted;
25
26 s = c10::onnx::Add;
27
28 // c10::_keys is an enum class.
29 int32_t max_num_symbols = int32_t(c10::_keys::num_symbols);
30
31 // max num symbols: 1535. (as of 2022-08-02)
32 std::cout << "max num symbols: " << max_num_symbols << "\n";
33
34 c10::_keys k = c10::_keys::namespaces_prim;
35 k = c10::_keys::namespaces_aten;
36 k = c10::_keys::prim_Constant;
37}
38
39static void TestSymbol() {
40 // Symbol contains only an integer, which is from an Enum
41 c10::Symbol s = c10::Symbol::fromQualString("prim::Constant");
42 TORCH_CHECK(s == c10::prim::Constant);
43 TORCH_CHECK(s.is_prim() == true);
44 TORCH_CHECK(s.is_aten() == false);
45 TORCH_CHECK(s.ns() == c10::namespaces::prim);
46 TORCH_CHECK(s.toUnqualString() == std::string("Constant"));
47 TORCH_CHECK(s.toQualString() == std::string("prim::Constant"));
48
49 TORCH_CHECK(s == c10::Symbol::prim("Constant"));
50
51 // Register a new symbol
52 // It will first register the namespace k2 as the symbol "namespaces::k2"
53 s = c10::Symbol::fromQualString("k2::Foo");
54
55 TORCH_CHECK(s.ns() == c10::Symbol::fromQualString("namespaces::k2"));
56 TORCH_CHECK(s.toUnqualString() == std::string("Foo"));
57 TORCH_CHECK(s.toQualString() == std::string("k2::Foo"));
58}
59
60int main() {
61 TestHello();
62 TestSymbol();
63 return 0;
64}