/**
 * @file bindings.h
 * @brief Declares the function to register polytrope module C++ components with pybind11.
 *
 * This file contains the declaration for `register_polytrope_bindings`, which is responsible
 * for creating Python bindings for classes and functions within the `serif::polytrope` C++
 * namespace. These bindings will be accessible in Python under the `serif.polytrope` submodule.
 */
#pragma once

#include <pybind11/pybind11.h>

/**
 * @brief Registers C++ classes and functions from the `serif::polytrope` namespace to Python.
 *
 * This function takes a pybind11::module object, representing the `serif.polytrope` Python submodule,
 * and adds bindings for various components like `PolytropeOperator`, `PolySolver`, etc.
 * This allows these C++ components to be instantiated and used directly from Python.
 *
 * @param polytrope_submodule The pybind11 module (typically `serif.polytrope`) to which
 *                            the polytrope C++ bindings will be added.
 *
 * @par Python Usage Example:
 * After these bindings are registered and the Python module is imported:
 * @code{.py}
 * from serif.polytrope import PolySolver
 * polytrope = PolySolver(1.5, 1)
 * polytrope.solve()
 * @endcode
 */
void register_polytrope_bindings(pybind11::module &polytrope_submodule);
