feat(python): Python Bindings

Python Bindings are working again
This commit is contained in:
2025-12-20 16:02:52 -05:00
parent d65c237b26
commit 11a596b75b
78 changed files with 4411 additions and 1110 deletions

View File

@@ -1,21 +0,0 @@
gf_solver_trampoline_sources = files('py_solver.cpp')
gf_solver_trapoline_dependencies = [
gridfire_dep,
pybind11_dep,
python3_dep,
]
gf_solver_trampoline_lib = static_library(
'solver_trampolines',
gf_solver_trampoline_sources,
include_directories: include_directories('.'),
dependencies: gf_solver_trapoline_dependencies,
install: false,
)
gr_solver_trampoline_dep = declare_dependency(
link_with: gf_solver_trampoline_lib,
include_directories: ('.'),
dependencies: gf_solver_trapoline_dependencies,
)

View File

@@ -13,38 +13,63 @@
namespace py = pybind11;
gridfire::NetOut PyDynamicNetworkSolverStrategy::evaluate(const gridfire::NetIn &netIn) {
gridfire::NetOut PySingleZoneDynamicNetworkSolver::evaluate(
gridfire::solver::SolverContextBase &solver_ctx,
const gridfire::NetIn &netIn
) const {
PYBIND11_OVERRIDE_PURE(
gridfire::NetOut, // Return type
gridfire::solver::DynamicNetworkSolverStrategy, // Base class
evaluate, // Method name
netIn // Arguments
gridfire::NetOut,
gridfire::solver::SingleZoneDynamicNetworkSolver,
evaluate,
solver_ctx,
netIn
);
}
void PyDynamicNetworkSolverStrategy::set_callback(const std::any &callback) {
std::vector<gridfire::NetOut> PyMultiZoneDynamicNetworkSolver::evaluate(
gridfire::solver::SolverContextBase &solver_ctx,
const std::vector<gridfire::NetIn> &netIns
) const {
PYBIND11_OVERRIDE_PURE(
void,
gridfire::solver::DynamicNetworkSolverStrategy, // Base class
set_callback, // Method name
callback // Arguments
std::vector<gridfire::NetOut>,
gridfire::solver::MultiZoneDynamicNetworkSolver,
evaluate,
solver_ctx,
netIns
);
}
std::vector<std::tuple<std::string, std::string>> PyDynamicNetworkSolverStrategy::describe_callback_context() const {
using DescriptionVector = std::vector<std::tuple<std::string, std::string>>;
std::vector<std::tuple<std::string, std::string>> PyTimestepContextBase::describe() const {
using ReturnType = std::vector<std::tuple<std::string, std::string>>;
PYBIND11_OVERRIDE_PURE(
DescriptionVector, // Return type
gridfire::solver::DynamicNetworkSolverStrategy, // Base class
describe_callback_context // Method name
);
}
std::vector<std::tuple<std::string, std::string>> PySolverContextBase::describe() const {
using DescriptionVector = std::vector<std::tuple<std::string, std::string>>;
PYBIND11_OVERRIDE_PURE(
DescriptionVector,
gridfire::solver::SolverContextBase,
ReturnType,
gridfire::solver::TimestepContextBase,
describe
);
}
void PySolverContextBase::init() {
PYBIND11_OVERRIDE_PURE(
void,
gridfire::solver::SolverContextBase,
init
);
}
void PySolverContextBase::set_stdout_logging(bool enable) {
PYBIND11_OVERRIDE_PURE(
void,
gridfire::solver::SolverContextBase,
set_stdout_logging,
enable
);
}
void PySolverContextBase::set_detailed_logging(bool enable) {
PYBIND11_OVERRIDE_PURE(
void,
gridfire::solver::SolverContextBase,
set_detailed_logging,
enable
);
}

View File

@@ -7,14 +7,37 @@
#include <string>
#include <any>
class PyDynamicNetworkSolverStrategy final : public gridfire::solver::DynamicNetworkSolverStrategy {
explicit PyDynamicNetworkSolverStrategy(gridfire::engine::DynamicEngine &engine) : gridfire::solver::DynamicNetworkSolverStrategy(engine) {}
gridfire::NetOut evaluate(const gridfire::NetIn &netIn) override;
void set_callback(const std::any &callback) override;
[[nodiscard]] std::vector<std::tuple<std::string, std::string>> describe_callback_context() const override;
class PySingleZoneDynamicNetworkSolver final : public gridfire::solver::SingleZoneDynamicNetworkSolver {
public:
explicit PySingleZoneDynamicNetworkSolver(const gridfire::engine::DynamicEngine &engine) : gridfire::solver::SingleZoneDynamicNetworkSolver(engine) {}
gridfire::NetOut evaluate(
gridfire::solver::SolverContextBase &solver_ctx,
const gridfire::NetIn &netIn
) const override;
};
class PyMultiZoneDynamicNetworkSolver final : public gridfire::solver::MultiZoneDynamicNetworkSolver {
public:
explicit PyMultiZoneDynamicNetworkSolver(
const gridfire::engine::DynamicEngine &engine,
const gridfire::solver::SingleZoneDynamicNetworkSolver &local_solver
) : gridfire::solver::MultiZoneDynamicNetworkSolver(engine, local_solver) {}
std::vector<gridfire::NetOut> evaluate(
gridfire::solver::SolverContextBase &solver_ctx,
const std::vector<gridfire::NetIn> &netIns
) const override;
};
class PyTimestepContextBase final : public gridfire::solver::TimestepContextBase {
public:
[[nodiscard]] std::vector<std::tuple<std::string, std::string>> describe() const override;
};
class PySolverContextBase final : public gridfire::solver::SolverContextBase {
public:
[[nodiscard]] std::vector<std::tuple<std::string, std::string>> describe() const override;
};
void init() override;
void set_stdout_logging(bool enable) override;
void set_detailed_logging(bool enable) override;
};