text: #include <pybind11/pybind11.h>
  #include <torch/csrc/Device.h>
  #include <torch/csrc/THP.h>
  #include <torch/csrc/utils/python_arg_parser.h>
  
  #include <structmember.h>
  
  PyTypeObject *THPStreamClass = nullptr;
  
  static PyObject* THPStream_pynew(
    PyTypeObject *type, PyObject *args, PyObject *kwargs) {
    HANDLE_TH_ERRORS
    uint64_t cdata = 0;
    // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays,clang-diagnostic-writable-strings)
    static char *kwlist[] = {"_cdata", nullptr};
    if (!PyArg_ParseTupleAndKeywords(
      args, kwargs, "|K", kwlist, &cdata)) {
      return nullptr;
    }
  
    THPObjectPtr ptr(type->tp_alloc(type, 0));
    if (!ptr) {
      return nullptr;
    }
  
    THPStream* self = (THPStream *)ptr.get();
    self->cdata = cdata;
    return (PyObject *)ptr.release();
    END_HANDLE_TH_ERRORS
  }
  
  static void THPStream_dealloc(THPStream *self) {
    Py_TYPE(self)->tp_free((PyObject*)self);
  }
  
  static PyObject * THPStream_get_device(THPStream *self, void *unused) {
    HANDLE_TH_ERRORS
    return THPDevice_New(c10::Stream::unpack(self->cdata).device());
    END_HANDLE_TH_ERRORS
  }
  
  static PyObject * THPStream_eq(THPStream *self, THPStream *other) {
    HANDLE_TH_ERRORS
    return PyBool_FromLong(self->cdata == other->cdata);
    END_HANDLE_TH_ERRORS
  }
  
  // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-non-const-global-variables)
  static struct PyMemberDef THPStream_members[] = {
    {(char*)"_cdata",
      T_ULONGLONG, offsetof(THPStream, cdata), READONLY, nullptr},
    {nullptr}
  };
  
  // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-non-const-global-variables)
  static struct PyGetSetDef THPStream_properties[] = {
    {"device", (getter)THPStream_get_device, nullptr, nullptr, nullptr},
    {nullptr}
  };
  
  // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-non-const-global-variables)
  static PyMethodDef THPStream_methods[] = {
    {(char*)"__eq__", (PyCFunction)THPStream_eq, METH_O, nullptr},
    {nullptr}
  };
  
  PyTypeObject THPStreamType = {
    PyVarObject_HEAD_INIT(nullptr, 0)
    "torch.Stream",                        /* tp_name */
    sizeof(THPStream),                     /* tp_basicsize */
    0,                                     /* tp_itemsize */
    (destructor)THPStream_dealloc,         /* tp_dealloc */
    0,                                     /* tp_vectorcall_offset */
    nullptr,                               /* tp_getattr */
    nullptr,                               /* tp_setattr */
    nullptr,                               /* tp_reserved */
    nullptr,                               /* tp_repr */
    nullptr,                               /* tp_as_number */
    nullptr,                               /* tp_as_sequence */
    nullptr,                               /* tp_as_mapping */
    nullptr,                               /* tp_hash  */
    nullptr,                               /* tp_call */
    nullptr,                               /* tp_str */
    nullptr,                               /* tp_getattro */
    nullptr,                               /* tp_setattro */
    nullptr,                               /* tp_as_buffer */
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
    nullptr,                                  /* tp_doc */
    nullptr,                               /* tp_traverse */
    nullptr,                               /* tp_clear */
    nullptr,                               /* tp_richcompare */
    0,                                     /* tp_weaklistoffset */
    nullptr,                               /* tp_iter */
    nullptr,                               /* tp_iternext */
    THPStream_methods,                     /* tp_methods */
    THPStream_members,                     /* tp_members */
    THPStream_properties,                  /* tp_getset */
    nullptr,                               /* tp_base */
    nullptr,                               /* tp_dict */
    nullptr,                               /* tp_descr_get */
    nullptr,                               /* tp_descr_set */
    0,                                     /* tp_dictoffset */
    nullptr,                               /* tp_init */
    nullptr,                               /* tp_alloc */
    THPStream_pynew,                       /* tp_new */
  };
  
  
  void THPStream_init(PyObject *module)
  {
    THPStreamClass = &THPStreamType;
    Py_TYPE(&THPStreamType) = &PyType_Type;
    if (PyType_Ready(&THPStreamType) < 0) {
      throw python_error();
    }
    Py_INCREF(&THPStreamType);
    if (PyModule_AddObject(
        module, "Stream", (PyObject *)&THPStreamType) < 0) {
      throw python_error();
    }
  }
  