xref: /aosp_15_r20/external/pytorch/torch/csrc/Layout.cpp (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Worker #include <torch/csrc/Layout.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 <ATen/Layout.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 
THPLayout_New(at::Layout layout,const std::string & name)13*da0073e9SAndroid Build Coastguard Worker PyObject* THPLayout_New(at::Layout layout, const std::string& name) {
14*da0073e9SAndroid Build Coastguard Worker   auto type = (PyTypeObject*)&THPLayoutType;
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<THPLayout*>(self.get());
19*da0073e9SAndroid Build Coastguard Worker   self_->layout = layout;
20*da0073e9SAndroid Build Coastguard Worker   std::strncpy(self_->name, name.c_str(), LAYOUT_NAME_LEN);
21*da0073e9SAndroid Build Coastguard Worker   self_->name[LAYOUT_NAME_LEN] = '\0';
22*da0073e9SAndroid Build Coastguard Worker   return self.release();
23*da0073e9SAndroid Build Coastguard Worker }
24*da0073e9SAndroid Build Coastguard Worker 
THPLayout_repr(THPLayout * self)25*da0073e9SAndroid Build Coastguard Worker PyObject* THPLayout_repr(THPLayout* self) {
26*da0073e9SAndroid Build Coastguard Worker   return THPUtils_packString(self->name);
27*da0073e9SAndroid Build Coastguard Worker }
28*da0073e9SAndroid Build Coastguard Worker 
29*da0073e9SAndroid Build Coastguard Worker PyTypeObject THPLayoutType = {
30*da0073e9SAndroid Build Coastguard Worker     PyVarObject_HEAD_INIT(nullptr, 0) "torch.layout", /* tp_name */
31*da0073e9SAndroid Build Coastguard Worker     sizeof(THPLayout), /* tp_basicsize */
32*da0073e9SAndroid Build Coastguard Worker     0, /* tp_itemsize */
33*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_dealloc */
34*da0073e9SAndroid Build Coastguard Worker     0, /* tp_vectorcall_offset */
35*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_getattr */
36*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_setattr */
37*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_reserved */
38*da0073e9SAndroid Build Coastguard Worker     (reprfunc)THPLayout_repr, /* tp_repr */
39*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_as_number */
40*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_as_sequence */
41*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_as_mapping */
42*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_hash  */
43*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_call */
44*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_str */
45*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_getattro */
46*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_setattro */
47*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_as_buffer */
48*da0073e9SAndroid Build Coastguard Worker     Py_TPFLAGS_DEFAULT, /* tp_flags */
49*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_doc */
50*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_traverse */
51*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_clear */
52*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_richcompare */
53*da0073e9SAndroid Build Coastguard Worker     0, /* tp_weaklistoffset */
54*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_iter */
55*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_iternext */
56*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_methods */
57*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_members */
58*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_getset */
59*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_base */
60*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_dict */
61*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_descr_get */
62*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_descr_set */
63*da0073e9SAndroid Build Coastguard Worker     0, /* tp_dictoffset */
64*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_init */
65*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_alloc */
66*da0073e9SAndroid Build Coastguard Worker     nullptr, /* tp_new */
67*da0073e9SAndroid Build Coastguard Worker };
68*da0073e9SAndroid Build Coastguard Worker 
THPLayout_init(PyObject * module)69*da0073e9SAndroid Build Coastguard Worker void THPLayout_init(PyObject* module) {
70*da0073e9SAndroid Build Coastguard Worker   if (PyType_Ready(&THPLayoutType) < 0) {
71*da0073e9SAndroid Build Coastguard Worker     throw python_error();
72*da0073e9SAndroid Build Coastguard Worker   }
73*da0073e9SAndroid Build Coastguard Worker   Py_INCREF(&THPLayoutType);
74*da0073e9SAndroid Build Coastguard Worker   if (PyModule_AddObject(module, "layout", (PyObject*)&THPLayoutType) != 0) {
75*da0073e9SAndroid Build Coastguard Worker     throw python_error();
76*da0073e9SAndroid Build Coastguard Worker   }
77*da0073e9SAndroid Build Coastguard Worker }
78