Skip to content

Commit f76a0c0

Browse files
committed
Add python bindings and tests
1 parent b8b5ff7 commit f76a0c0

11 files changed

+1164
-267
lines changed

bindings/c/src/Integrate.cxx

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ mgis_status mgis_bv_integrate_2(int* const r,
6161
auto v = mgis::behaviour::make_view(*d);
6262
auto s = mgis_bv_integrate(r, &v, b);
6363
return s;
64-
} // end of mgis_bv_integrate
64+
} // end of mgis_bv_integrate2
6565

6666
mgis_status mgis_bv_integrate_material_data_manager(
6767
int* const r,

bindings/python/src/Behaviour.cxx

+47
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,49 @@ static void rotate_tangent_operator_blocks_out_of_place(
240240
mgis::python::mgis_convert_to_span(r));
241241
} // end of rotate_tangent_operator_blocks_out_of_place
242242

243+
static boost::python::list Behaviour_getInitializeFunctionsNames(
244+
const mgis::behaviour::Behaviour &b) {
245+
auto names = std::vector<std::string>{};
246+
for (const auto& ifct : b.initialize_functions) {
247+
names.push_back(ifct.first);
248+
}
249+
return mgis::python::convert_vector_to_list(names);
250+
} // edn of Behaviour_getInitializeFunctionsNames
251+
252+
static std::vector<mgis::behaviour::Variable>
253+
Behaviour_getInitializeFunctionInputs(const mgis::behaviour::Behaviour &b,
254+
const std::string &n){
255+
const auto p = b.initialize_functions.find(n);
256+
if (p == b.initialize_functions.end()) {
257+
mgis::raise(
258+
"getInitializeFunctionInputs: "
259+
"no initialize function named '" +
260+
n + "'");
261+
}
262+
return p->second.inputs;
263+
} // end of Behaviour_getInitializeFunctionInputs
264+
265+
static boost::python::list Behaviour_getPostProcessingsNames(
266+
const mgis::behaviour::Behaviour &b) {
267+
auto names = std::vector<std::string>{};
268+
for (const auto& p : b.postprocessings) {
269+
names.push_back(p.first);
270+
}
271+
return mgis::python::convert_vector_to_list(names);
272+
} // edn of Behaviour_getPostProcessingsNames
273+
274+
static std::vector<mgis::behaviour::Variable> Behaviour_getPostProcessingOutputs(
275+
const mgis::behaviour::Behaviour &b, const std::string &n) {
276+
const auto p = b.postprocessings.find(n);
277+
if (p == b.postprocessings.end()) {
278+
mgis::raise(
279+
"getPostProcessingOutputs: "
280+
"no initialize function named '" +
281+
n + "'");
282+
}
283+
return p->second.outputs;
284+
} // end of Behaviour_getPostProcessingOutputs
285+
243286
void declareBehaviour() {
244287
using mgis::behaviour::Behaviour;
245288
using mgis::behaviour::FiniteStrainBehaviourOptions;
@@ -406,6 +449,10 @@ void declareBehaviour() {
406449
"list of unsigned short parameters (same as the `usparams` property)")
407450
.add_property("tangent_operator_blocks",
408451
Behaviour_getTangentOperatorBlocks)
452+
.def("getInitializeFunctionsNames", Behaviour_getInitializeFunctionsNames)
453+
.def("getInitializeFunctionInputs", Behaviour_getInitializeFunctionInputs)
454+
.def("getPostProcessingsNames", Behaviour_getPostProcessingsNames)
455+
.def("getPostProcessingOutputs", Behaviour_getPostProcessingOutputs)
409456
.def("setParameter", setParameter1)
410457
.def("setIntegerParameter", setParameter2)
411458
.def("setUnsignedShortParameter", setParameter3)

bindings/python/src/Integrate.cxx

+137
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "MGIS/Behaviour/BehaviourData.hxx"
2020
#include "MGIS/Behaviour/MaterialDataManager.hxx"
2121
#include "MGIS/Behaviour/Integrate.hxx"
22+
#include "MGIS/Python/NumPySupport.hxx"
2223
#include "MGIS/Python/VectorConverter.hxx"
2324

2425
void declareIntegrate();
@@ -30,6 +31,115 @@ static int integrateBehaviourData1(mgis::behaviour::BehaviourData& d,
3031
return s;
3132
} // end of integrateBehaviourData
3233

34+
static int BehaviourDataView_executeInitializeFunction(
35+
mgis::behaviour::BehaviourDataView& v,
36+
const mgis::behaviour::Behaviour& b,
37+
const std::string& n) {
38+
return mgis::behaviour::executeInitializeFunction(v, b, n);
39+
}
40+
41+
static int BehaviourDataView_executeInitializeFunction2(
42+
mgis::behaviour::BehaviourDataView& v,
43+
const mgis::behaviour::Behaviour& b,
44+
const std::string& n,
45+
boost::python::object i) {
46+
const auto inputs = mgis::python::mgis_convert_to_span(i);
47+
return mgis::behaviour::executeInitializeFunction(v, b, n, inputs);
48+
}
49+
50+
static mgis::behaviour::BehaviourIntegrationResult
51+
MaterialDataManager_executeInitializeFunction(
52+
mgis::behaviour::MaterialDataManager& m,
53+
const std::string& n) {
54+
return mgis::behaviour::executeInitializeFunction(m, n);
55+
}
56+
57+
static mgis::behaviour::BehaviourIntegrationResult
58+
MaterialDataManager_executeInitializeFunction1(
59+
mgis::behaviour::MaterialDataManager& m,
60+
const std::string& n,
61+
const mgis::size_type b,
62+
const mgis::size_type e) {
63+
return mgis::behaviour::executeInitializeFunction(m, n, b, e);
64+
}
65+
66+
static mgis::behaviour::MultiThreadedBehaviourIntegrationResult
67+
MaterialDataManager_executeInitializeFunction2(
68+
mgis::ThreadPool& t,
69+
mgis::behaviour::MaterialDataManager& m,
70+
const std::string& n) {
71+
return mgis::behaviour::executeInitializeFunction(t, m, n);
72+
}
73+
74+
static mgis::behaviour::BehaviourIntegrationResult
75+
MaterialDataManager_executeInitializeFunction3(
76+
mgis::behaviour::MaterialDataManager& m,
77+
const std::string& n,
78+
boost::python::object i) {
79+
const auto inputs = mgis::python::mgis_convert_to_span(i);
80+
return mgis::behaviour::executeInitializeFunction(m, n, inputs);
81+
}
82+
83+
static mgis::behaviour::BehaviourIntegrationResult
84+
MaterialDataManager_executeInitializeFunction4(
85+
mgis::behaviour::MaterialDataManager& m,
86+
const std::string& n,
87+
boost::python::object i,
88+
const mgis::size_type b,
89+
const mgis::size_type e) {
90+
const auto inputs = mgis::python::mgis_convert_to_span(i);
91+
return mgis::behaviour::executeInitializeFunction(m, n, inputs, b, e);
92+
}
93+
94+
static mgis::behaviour::MultiThreadedBehaviourIntegrationResult
95+
MaterialDataManager_executeInitializeFunction5(
96+
mgis::ThreadPool& t,
97+
mgis::behaviour::MaterialDataManager& m,
98+
const std::string& n,
99+
boost::python::object i) {
100+
const auto inputs = mgis::python::mgis_convert_to_span(i);
101+
return mgis::behaviour::executeInitializeFunction(t, m, n, inputs);
102+
}
103+
104+
static int BehaviourDataView_executePostProcessing(
105+
boost::python::object o,
106+
mgis::behaviour::BehaviourDataView& v,
107+
const mgis::behaviour::Behaviour& b,
108+
const std::string& n) {
109+
const auto output = mgis::python::mgis_convert_to_span(o);
110+
return mgis::behaviour::executePostProcessing(output, v, b, n);
111+
}
112+
113+
static mgis::behaviour::BehaviourIntegrationResult
114+
MaterialDataManager_executePostProcessing(
115+
boost::python::object o,
116+
mgis::behaviour::MaterialDataManager& m,
117+
const std::string& n) {
118+
const auto output = mgis::python::mgis_convert_to_span(o);
119+
return mgis::behaviour::executePostProcessing(output, m, n);
120+
}
121+
122+
static mgis::behaviour::BehaviourIntegrationResult
123+
MaterialDataManager_executePostProcessing2(
124+
boost::python::object o,
125+
mgis::behaviour::MaterialDataManager& m,
126+
const std::string& n,
127+
const mgis::size_type b,
128+
const mgis::size_type e) {
129+
const auto output = mgis::python::mgis_convert_to_span(o);
130+
return mgis::behaviour::executePostProcessing(output, m, n, b, e);
131+
}
132+
133+
mgis::behaviour::MultiThreadedBehaviourIntegrationResult
134+
MaterialDataManager_executePostProcessing3(
135+
boost::python::object o,
136+
mgis::ThreadPool& t,
137+
mgis::behaviour::MaterialDataManager& m,
138+
const std::string& n) {
139+
const auto output = mgis::python::mgis_convert_to_span(o);
140+
return mgis::behaviour::executePostProcessing(output, t, m, n);
141+
}
142+
33143
void declareIntegrate() {
34144
using namespace mgis::behaviour;
35145

@@ -107,6 +217,23 @@ void declareIntegrate() {
107217
.add_property("results",
108218
&MultiThreadedBehaviourIntegrationResult::results);
109219

220+
boost::python::def("executeInitializeFunction",
221+
BehaviourDataView_executeInitializeFunction);
222+
boost::python::def("executeInitializeFunction",
223+
BehaviourDataView_executeInitializeFunction2);
224+
boost::python::def("executeInitializeFunction",
225+
MaterialDataManager_executeInitializeFunction);
226+
boost::python::def("executeInitializeFunction",
227+
MaterialDataManager_executeInitializeFunction1);
228+
boost::python::def("executeInitializeFunction",
229+
MaterialDataManager_executeInitializeFunction2);
230+
boost::python::def("executeInitializeFunction",
231+
MaterialDataManager_executeInitializeFunction3);
232+
boost::python::def("executeInitializeFunction",
233+
MaterialDataManager_executeInitializeFunction4);
234+
boost::python::def("executeInitializeFunction",
235+
MaterialDataManager_executeInitializeFunction5);
236+
110237
int (*integrate_ptr1)(BehaviourDataView&, const Behaviour&) = integrate;
111238
int (*integrate_ptr2)(MaterialDataManager&, const IntegrationType,
112239
const mgis::real, const mgis::size_type,
@@ -127,4 +254,14 @@ void declareIntegrate() {
127254
boost::python::def("integrate", integrate_ptr3);
128255
boost::python::def("integrate", integrate_ptr4);
129256
boost::python::def("integrate", integrate_ptr5);
257+
258+
boost::python::def("executePostProcessing",
259+
BehaviourDataView_executePostProcessing);
260+
boost::python::def("executePostProcessing",
261+
MaterialDataManager_executePostProcessing);
262+
boost::python::def("executePostProcessing",
263+
MaterialDataManager_executePostProcessing2);
264+
boost::python::def("executePostProcessing",
265+
MaterialDataManager_executePostProcessing3);
266+
130267
} // end of declareIntegrate

bindings/python/tests/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,6 @@ test_python_bindings(IntegrateTest4)
6262
test_python_bindings(IntegrateTest5)
6363
test_python_bindings(IntegrateTest6)
6464
test_python_bindings(ExternalStateVariableTest)
65+
test_python_bindings(InitializeFunctionTest)
66+
test_python_bindings(PostProcessingTest)
6567

bindings/python/tests/ExternalStateVariableTest.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
import unittest
1010
import mgis.behaviour as mgis_bv
1111

12-
13-
class IntegrateTest(unittest.TestCase):
12+
class ExternalStateVariableTest(unittest.TestCase):
1413

1514
def __get_behaviour(self, h):
1615
lib = os.environ['MGIS_TEST_BEHAVIOURS_LIBRARY']

0 commit comments

Comments
 (0)