User Guide
wrapper.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2023 Blue Brain Project, EPFL.
3  * See the top-level LICENSE file for details.
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 
8 #pragma once
9 
10 #include <optional>
11 #include <set>
12 #include <string>
13 #include <unordered_set>
14 #include <vector>
15 
16 namespace nmodl {
17 namespace pybind_wrappers {
18 
19 
22 
23 std::tuple<std::vector<std::string>, std::vector<std::string>, std::string>
24 call_solve_linear_system(const std::vector<std::string>& eq_system,
25  const std::vector<std::string>& state_vars,
26  const std::set<std::string>& vars,
27  bool small_system,
28  bool elimination,
29  const std::string& tmp_unique_prefix,
30  const std::set<std::string>& function_calls);
31 
32 std::tuple<std::vector<std::string>, std::string> call_solve_nonlinear_system(
33  const std::vector<std::string>& eq_system,
34  const std::vector<std::string>& state_vars,
35  const std::set<std::string>& vars,
36  const std::set<std::string>& function_calls);
37 
38 std::tuple<std::string, std::string> call_diffeq_solver(const std::string& node_as_nmodl,
39  const std::string& dt_var,
40  const std::set<std::string>& vars,
41  bool use_pade_approx,
42  const std::set<std::string>& function_calls,
43  const std::string& method);
44 
45 std::tuple<std::string, std::string> call_analytic_diff(
46  const std::vector<std::string>& expressions,
47  const std::set<std::string>& used_names_in_block);
48 
49 
50 /// \brief Differentiates an expression with respect to a variable
51 /// \param expression The expression we want to differentiate
52 /// \param variable The name of the independent variable we are differentiating against
53 /// \param index_vars A set of array (indexable) variables that appear in \ref expression
54 /// \return The tuple (solution, exception)
55 std::tuple<std::string, std::string> call_diff2c(
56  const std::string& expression,
57  const std::pair<std::string, std::optional<int>>& variable,
58  const std::unordered_set<std::string>& indexed_vars = {});
59 
67  decltype(&call_diff2c) diff2c;
68 };
69 
70 #ifdef _WIN32
71 #define NMODL_EXPORT
72 #else
73 #define NMODL_EXPORT __attribute__((visibility("default")))
74 #endif
75 
76 extern "C" {
77 pybind_wrap_api nmodl_init_pybind_wrapper_api() noexcept;
78 }
79 
80 
81 } // namespace pybind_wrappers
82 } // namespace nmodl
nmodl::pybind_wrappers::pybind_wrap_api::solve_linear_system
decltype(&call_solve_linear_system) solve_linear_system
Definition: wrapper.hpp:64
nmodl::pybind_wrappers::call_diffeq_solver
std::tuple< std::string, std::string > call_diffeq_solver(const std::string &node_as_nmodl, const std::string &dt_var, const std::set< std::string > &vars, bool use_pade_approx, const std::set< std::string > &function_calls, const std::string &method)
Definition: wrapper.cpp:106
nmodl
encapsulates code generation backend implementations
Definition: ast_common.hpp:26
nmodl::pybind_wrappers::initialize_interpreter_func
void initialize_interpreter_func()
Definition: wrapper.cpp:234
nmodl::pybind_wrappers::call_solve_nonlinear_system
std::tuple< std::vector< std::string >, std::string > call_solve_nonlinear_system(const std::vector< std::string > &eq_system, const std::vector< std::string > &state_vars, const std::set< std::string > &vars, const std::set< std::string > &function_calls)
Definition: wrapper.cpp:73
nmodl::pybind_wrappers::pybind_wrap_api::initialize_interpreter
decltype(&initialize_interpreter_func) initialize_interpreter
Definition: wrapper.hpp:61
nmodl::pybind_wrappers::pybind_wrap_api::finalize_interpreter
decltype(&finalize_interpreter_func) finalize_interpreter
Definition: wrapper.hpp:62
nmodl::pybind_wrappers::pybind_wrap_api::diffeq_solver
decltype(&call_diffeq_solver) diffeq_solver
Definition: wrapper.hpp:65
nmodl::pybind_wrappers::pybind_wrap_api::solve_nonlinear_system
decltype(&call_solve_nonlinear_system) solve_nonlinear_system
Definition: wrapper.hpp:63
nmodl::pybind_wrappers::pybind_wrap_api::analytic_diff
decltype(&call_analytic_diff) analytic_diff
Definition: wrapper.hpp:66
nmodl::pybind_wrappers::call_analytic_diff
std::tuple< std::string, std::string > call_analytic_diff(const std::vector< std::string > &expressions, const std::set< std::string > &used_names_in_block)
Definition: wrapper.cpp:162
nmodl::pybind_wrappers::call_diff2c
std::tuple< std::string, std::string > call_diff2c(const std::string &expression, const std::pair< std::string, std::optional< int >> &variable, const std::unordered_set< std::string > &indexed_vars)
Differentiates an expression with respect to a variable.
Definition: wrapper.cpp:190
nmodl::pybind_wrappers::pybind_wrap_api
Definition: wrapper.hpp:60
nmodl::pybind_wrappers::call_solve_linear_system
std::tuple< std::vector< std::string >, std::vector< std::string >, std::string > call_solve_linear_system(const std::vector< std::string > &eq_system, const std::vector< std::string > &state_vars, const std::set< std::string > &vars, bool small_system, bool elimination, const std::string &tmp_unique_prefix, const std::set< std::string > &function_calls)
Definition: wrapper.cpp:29
nmodl::pybind_wrappers::finalize_interpreter_func
void finalize_interpreter_func()
Definition: wrapper.cpp:238
nmodl::pybind_wrappers::nmodl_init_pybind_wrapper_api
NMODL_EXPORT pybind_wrap_api nmodl_init_pybind_wrapper_api() noexcept
Definition: wrapper.cpp:244
nmodl::pybind_wrappers::pybind_wrap_api::diff2c
decltype(&call_diff2c) diff2c
Definition: wrapper.hpp:67