xref: /aosp_15_r20/external/pytorch/torch/csrc/QScheme.cpp (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Worker #include <torch/csrc/QScheme.h>
2*da0073e9SAndroid Build Coastguard Worker 
3*da0073e9SAndroid Build Coastguard Worker #include <torch/csrc/Exceptions.h>
4*da0073e9SAndroid Build Coastguard Worker #include <torch/csrc/utils/object_ptr.h>
5*da0073e9SAndroid Build Coastguard Worker #include <torch/csrc/utils/python_strings.h>
6*da0073e9SAndroid Build Coastguard Worker 
7*da0073e9SAndroid Build Coastguard Worker #include <c10/core/QScheme.h>
8*da0073e9SAndroid Build Coastguard Worker 
9*da0073e9SAndroid Build Coastguard Worker #include <structmember.h>
10*da0073e9SAndroid Build Coastguard Worker #include <cstring>
11*da0073e9SAndroid Build Coastguard Worker #include <string>
12*da0073e9SAndroid Build Coastguard Worker 
THPQScheme_New(at::QScheme qscheme,const std::string & name)13*da0073e9SAndroid Build Coastguard Worker PyObject* THPQScheme_New(at::QScheme qscheme, const std::string& name) {
14*da0073e9SAndroid Build Coastguard Worker   auto type = (PyTypeObject*)&THPQSchemeType;
15*da0073e9SAndroid Build Coastguard Worker   auto self = THPObjectPtr{type->tp_alloc(type, 0)};
16*da0073e9SAndroid Build Coastguard Worker   if (!self)
17*da0073e9SAndroid Build Coastguard Worker     throw python_error();
18*da0073e9SAndroid Build Coastguard Worker   auto self_ = reinterpret_cast<THPQScheme*>(self.get());
19*da0073e9SAndroid Build Coastguard Worker   self_->qscheme = qscheme;
20*da0073e9SAndroid Build Coastguard Worker   std::strncpy(self_->name, name.c_str(), QSCHEME_NAME_LEN);
21*da0073e9SAndroid Build Coastguard Worker   self_->name[QSCHEME_NAME_LEN] = '\0';
22*da0073e9SAndroid Build Coastguard Worker   return self.release();
23*da0073e9SAndroid Build Coastguard Worker }
24*da0073e9SAndroid Build Coastguard Worker 
THPQScheme_reduce(PyObject * _self,PyObject * noargs)25*da0073e9SAndroid Build Coastguard Worker PyObject* THPQScheme_reduce(PyObject* _self, PyObject* noargs) {
26*da0073e9SAndroid Build Coastguard Worker   auto self = (THPQScheme*)_self;
27*da0073e9SAndroid Build Coastguard Worker   return THPUtils_packString(self->name);
28*da0073e9SAndroid Build Coastguard Worker }
29*da0073e9SAndroid Build Coastguard Worker 
30*da0073e9SAndroid Build Coastguard Worker // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,cppcoreguidelines-avoid-non-const-global-variables,modernize-avoid-c-arrays)
31*da0073e9SAndroid Build Coastguard Worker static PyMethodDef THPQScheme_methods[] = {
32*da0073e9SAndroid Build Coastguard Worker     {"__reduce__", THPQScheme_reduce, METH_NOARGS, nullptr},
33*da0073e9SAndroid Build Coastguard Worker     {nullptr} /* Sentinel */
34*da0073e9SAndroid Build Coastguard Worker };
35*da0073e9SAndroid Build Coastguard Worker 
THPQScheme_repr(THPQScheme * self)36*da0073e9SAndroid Build Coastguard Worker PyObject* THPQScheme_repr(THPQScheme* self) {
37*da0073e9SAndroid Build Coastguard Worker   std::string name = self->name;
38*da0073e9SAndroid Build Coastguard Worker   return THPUtils_packString("torch." + name);
39*da0073e9SAndroid Build Coastguard Worker }
40*da0073e9SAndroid Build Coastguard Worker 
41*da0073e9SAndroid Build Coastguard Worker PyTypeObject THPQSchemeType = {
42*da0073e9SAndroid Build Coastguard Worker     PyVarObject_HEAD_INIT(nullptr, 0) "torch.qscheme", /* tp_name */
43*da0073e9SAndroid Build Coastguard Worker     sizeof(THPQScheme), /* tp_basicsize */
44*da0073e9SAndroid Build Coastguard Worker     0, /* tp_itemsize */
45*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_dealloc */
46*da0073e9SAndroid Build Coastguard Worker     0, /* tp_vectorcall_offset */
47*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_getattr */
48*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_setattr */
49*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_reserved */
50*da0073e9SAndroid Build Coastguard Worker     (reprfunc)THPQScheme_repr, /* tp_repr */
51*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_as_number */
52*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_as_sequence */
53*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_as_mapping */
54*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_hash  */
55*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_call */
56*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_str */
57*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_getattro */
58*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_setattro */
59*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_as_buffer */
60*da0073e9SAndroid Build Coastguard Worker     Py_TPFLAGS_DEFAULT, /* tp_flags */
61*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_doc */
62*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_traverse */
63*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_clear */
64*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_richcompare */
65*da0073e9SAndroid Build Coastguard Worker     0, /* tp_weaklistoffset */
66*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_iter */
67*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_iternext */
68*da0073e9SAndroid Build Coastguard Worker     THPQScheme_methods, /* tp_methods */
69*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_members */
70*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_getset */
71*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_base */
72*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_dict */
73*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_descr_get */
74*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_descr_set */
75*da0073e9SAndroid Build Coastguard Worker     0, /* tp_dictoffset */
76*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_init */
77*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_alloc */
78*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_new */
79*da0073e9SAndroid Build Coastguard Worker };
80*da0073e9SAndroid Build Coastguard Worker 
THPQScheme_init(PyObject * module)81*da0073e9SAndroid Build Coastguard Worker void THPQScheme_init(PyObject* module) {
82*da0073e9SAndroid Build Coastguard Worker   if (PyType_Ready(&THPQSchemeType) < 0) {
83*da0073e9SAndroid Build Coastguard Worker     throw python_error();
84*da0073e9SAndroid Build Coastguard Worker   }
85*da0073e9SAndroid Build Coastguard Worker   Py_INCREF(&THPQSchemeType);
86*da0073e9SAndroid Build Coastguard Worker   if (PyModule_AddObject(module, "qscheme", (PyObject*)&THPQSchemeType) != 0) {
87*da0073e9SAndroid Build Coastguard Worker     throw python_error();
88*da0073e9SAndroid Build Coastguard Worker   }
89*da0073e9SAndroid Build Coastguard Worker }
90