#pragma once #include #include #include #include namespace py = pybind11; namespace torch::jit { inline c10::optional as_module(py::handle obj) { static py::handle ScriptModule = py::module::import("torch.jit").attr("ScriptModule"); if (py::isinstance(obj, ScriptModule)) { return py::cast(obj.attr("_c")); } return c10::nullopt; } inline c10::optional as_object(py::handle obj) { static py::handle ScriptObject = py::module::import("torch").attr("ScriptObject"); if (py::isinstance(obj, ScriptObject)) { return py::cast(obj); } static py::handle RecursiveScriptClass = py::module::import("torch.jit").attr("RecursiveScriptClass"); if (py::isinstance(obj, RecursiveScriptClass)) { return py::cast(obj.attr("_c")); } return c10::nullopt; } } // namespace torch::jit