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}