#include #include #include #include #include #include #include #include #include #include #include #include static struct PyModuleDef _module = {PyModuleDef_HEAD_INIT, "torch._C._dynamo", "", -1, nullptr}; PYBIND11_MAKE_OPAQUE(std::vector); namespace torch::dynamo { #if IS_PYTHON_3_11_PLUS std::vector _PyOpcode_Caches_vec( THP_PyOpcode_Caches, THP_PyOpcode_Caches + THP_PyOpcode_Caches_size); #else std::vector _PyOpcode_Caches_vec; #endif using torch::dynamo::autograd::torch_c_dynamo_compiled_autograd_init; void initDynamoBindings(PyObject* torch) { PyObject* dynamo = PyModule_Create(&_module); if (dynamo == nullptr || PyModule_AddObject(torch, "_dynamo", dynamo) != 0) { throw python_error(); } PyObject* eval_frame = torch_c_dynamo_eval_frame_init(); if (eval_frame == nullptr || PyModule_AddObject(dynamo, "eval_frame", eval_frame) != 0) { throw python_error(); } PyObject* utils = torch_c_dynamo_utils_init(); if (utils == nullptr || PyModule_AddObject(dynamo, "utils", utils) != 0) { throw python_error(); } PyObject* guards = torch_c_dynamo_guards_init(); if (guards == nullptr || PyModule_AddObject(dynamo, "guards", guards) != 0) { throw python_error(); } PyObject* compiled_autograd = torch_c_dynamo_compiled_autograd_init(); if (compiled_autograd == nullptr || PyModule_AddObject(dynamo, "compiled_autograd", compiled_autograd) != 0) { throw python_error(); } auto m = py::handle(eval_frame).cast(); py::class_(m, "_CacheEntry") .def_readonly("check_fn", &CacheEntry::check_fn) .def_readonly("code", &CacheEntry::code) .def_readonly("compile_id", &CacheEntry::compile_id) .def_property_readonly("next", &CacheEntry::next); py::class_(m, "_ExtraState") .def("invalidate", &ExtraState::invalidate); m.def("_debug_get_cache_entry_list", &_debug_get_cache_entry_list); py::bind_vector>(m, "VectorUInt8"); m.attr("py_opcode_caches") = _PyOpcode_Caches_vec; } } // namespace torch::dynamo