diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 58e15412..49e4d91c 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -1,11 +1,14 @@ pybind11_add_module(musica_python wrapper.cpp ${PROJECT_SOURCE_DIR}/src/micm/micm.cpp + ${PROJECT_SOURCE_DIR}/src/tuvx/tuvx.cpp ${PROJECT_SOURCE_DIR}/src/component_versions.cpp ${PROJECT_SOURCE_DIR}/src/util.cpp ${CMAKE_BINARY_DIR}/version.cpp ) +# target_link_libraries(musica_python PRIVATE nlohmann_json::nlohmann_json) +# target_link_libraries(musica_python PUBLIC musica::musica) target_link_libraries(musica_python PRIVATE yaml-cpp) target_compile_features(musica_python PUBLIC cxx_std_20) @@ -15,12 +18,14 @@ set_target_properties(musica_python PROPERTIES OUTPUT_NAME musica) target_include_directories(musica_python PUBLIC $ + $ $ ) target_include_directories(musica_python PUBLIC $ + $ $ ) diff --git a/python/wrapper.cpp b/python/wrapper.cpp index 5e3f032f..675ba1db 100644 --- a/python/wrapper.cpp +++ b/python/wrapper.cpp @@ -1,13 +1,13 @@ // Copyright (C) 2023-2024 National Center for Atmospheric Research // SPDX-License-Identifier: Apache-2.0 #include - +#include #include #include namespace py = pybind11; -// Wraps micm.cpp +// Wraps micm.cpp and tuvx.cpp PYBIND11_MODULE(musica, m) { py::class_(m, "micm").def(py::init<>()).def("__del__", [](musica::MICM &micm) {}); @@ -204,4 +204,48 @@ PYBIND11_MODULE(musica, m) return map; }, "Return map of reaction rates"); + /* + * Wrap tuvx + */ + + + py::class_(m,"tuvx") + .def(py::init<>()) + .def("__del__", [](musica::TUVX &tuvx) {}); + + m.def( + "create_tuvx", + [](const char *config_path) + { + musica::Error error; + musica::TUVX *tuvx = musica::CreateTuvx(config_path,&error); + if (!musica::IsSuccess(error)) + { + std::string message = "Error creating Tuvx: " + std::string(error.message_.value_); + DeleteError(&error); + throw std::runtime_error(message); + + } + return tuvx; + }); +m.def("delete_tuvx", &musica::DeleteTuvx); + +m.def( + "tuvx_get_grid_map", + [](musica::TUVX *tuvx) + { + musica::Error error; + musica::GridMap map = musica::GetGridMap(tuvx,&error); + if (!musica::IsSuccess(error)) + { + std::string message = "Error getting tuvx gridmap: " + std::string(error.message_.value_); + DeleteError(&error); + throw std::runtime_error(message); + + } + + return map; + + }); + }