feat(python): Python Bindings
Python Bindings are working again
This commit is contained in:
@@ -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,
|
||||
)
|
||||
@@ -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
|
||||
);
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user