Skip to content

Commit 8793d33

Browse files
author
Dilawar Singh
committed
get/set are on ObjId .
1 parent d99115c commit 8793d33

File tree

2 files changed

+58
-48
lines changed

2 files changed

+58
-48
lines changed

pybind11/pymoose.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ Id initModule(py::module& m)
4646
return initShell();
4747
}
4848

49-
template <typename T>
49+
template <typename T=double>
5050
void setProp(const ObjId& id, const string& fname, T val)
5151
{
5252
Field<T>::set(id, fname, val);
5353
}
5454

55-
template <typename T>
55+
template <typename T=double>
5656
T getProp(const ObjId& id, const string& fname)
5757
{
5858
return Field<T>::get(id, fname);
@@ -114,11 +114,30 @@ PYBIND11_MODULE(_cmoose, m)
114114
.def_property_readonly("id", [](ObjId& oid) { return oid.id; })
115115
.def_property_readonly(
116116
"type", [](ObjId& oid) { return oid.element()->cinfo()->name(); })
117+
118+
// Add set and get
119+
// Overload of Field::set
120+
.def("set", &setProp<double>)
121+
.def("set", &setProp<double>)
122+
.def("set", &setProp<vector<double>>)
123+
.def("set", &setProp<string>)
124+
.def("set", &setProp<bool>)
125+
// Overload for Field::get
126+
.def("get", &getProp<double>)
127+
.def("get", &getProp<string>)
128+
.def("get", &getProp<unsigned int>)
129+
.def("get", &getProp<bool>)
130+
.def("getVec", &getPropVec<double>)
131+
.def("getNumpy", &getPropNumpy<double>)
132+
133+
// Representation.
117134
.def("__repr__", [](const ObjId& oid) {
118135
return "<" + oid.element()->cinfo()->name() + " id=" +
119136
std::to_string(oid.id.value()) + " path=" + oid.path() +
120137
">";
121-
});
138+
}
139+
)
140+
;
122141

123142
py::class_<FinfoWrapper>(m, "_FinfoWrapper")
124143
.def(py::init<const Finfo*>())
@@ -182,25 +201,6 @@ PYBIND11_MODULE(_cmoose, m)
182201

183202
m.def("loadModelInternal", &loadModelInternal);
184203

185-
// Overload for Field::get
186-
m.def("get", &getProp<double>);
187-
m.def("get", &getProp<string>);
188-
m.def("get", &getProp<unsigned int>);
189-
m.def("get", &getProp<bool>);
190-
191-
m.def("getVec", &getPropVec<double>);
192-
m.def("getNumpy", &getPropNumpy<double>);
193-
194-
// Overload of Field::set
195-
m.def("set", &setProp<double>);
196-
m.def("set", &setProp<vector<double>>);
197-
m.def("set", &setProp<string>);
198-
m.def("set", &setProp<unsigned int>);
199-
m.def("set", &setProp<bool>);
200-
201-
// m.def("setVec", &setPropVec<double>);
202-
// m.def("getVec", &getPropVec<double>);
203-
204204
m.def("getShell",
205205
[]() { return reinterpret_cast<Shell*>(Id().eref().data()); },
206206
py::return_value_policy::reference);

tests/pybind11/test_shell.py

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import moose._cmoose as M
2+
import numpy as np
23
import math
34

45
def makereac():
@@ -38,7 +39,7 @@ def makereac():
3839
s.addMsg("Single", r1, "prd", B, "reac");
3940

4041
# Field<unsigned int>::set(sum, "numVars", 2);
41-
M.set(sum, "numVars", 2)
42+
sum.set("numVars", 2)
4243

4344
s.addMsg("Single", A, "nOut", M._ObjId(sumInput, 0, 0), "input");
4445
s.addMsg("Single", B, "nOut", M._ObjId(sumInput, 0, 1), "input");
@@ -58,32 +59,38 @@ def makereac():
5859
s.addMsg("Single", e2, "prd", E, "reac");
5960

6061
# Set parameters.
61-
M.set(A, "concInit", 2);
62-
M.set(e1Pool, "concInit", 1);
63-
M.set(e2Pool, "concInit", 1);
64-
M.set(sum, "expr", "x0+x1");
65-
M.set(r1, "Kf", 0.2);
66-
M.set(r1, "Kb", 0.1);
67-
M.set(r2, "Kf", 0.1);
68-
M.set(r2, "Kb", 0.0);
69-
M.set(e1, "Km", 5);
70-
M.set(e1, "kcat", 1);
71-
M.set(e1, "ratio", 4);
72-
M.set(e2, "Km", 5);
73-
M.set(e2, "kcat", 1);
74-
75-
vol = M.get(kin, "volume");
62+
A.set("concInit", 2);
63+
assert A.get("concInit") == 2, A.get("concInit")
64+
65+
e1Pool.set("concInit", 1);
66+
e1Pool.set("concInit", 1)
67+
68+
e2Pool.set("concInit", 1);
69+
sum.set("expr", "x0+x1");
70+
r1.set("Kf", 0.2);
71+
assert r1.get("Kf") == 0.2
72+
r1.set("Kb", 0.1);
73+
r2.set("Kf", 0.1);
74+
r2.set("Kb", 0.0);
75+
e1.set("Km", 5);
76+
assert e1.get("Km") == 5
77+
e1.set("kcat", 1);
78+
e1.set("ratio", 4);
79+
e2.set("Km", 5);
80+
e2.set("kcat", 1);
81+
82+
vol = kin.get("volume");
7683
print("Volume", vol)
7784

7885
stim = []
7986
for i in range(100):
8087
stim.append(vol * M.NA * (1.0 + math.sin(i * 2.0 * M.PI / 100.0)))
8188

82-
M.set(tab, "vector", stim);
83-
M.set(tab, "stepSize", 0.0);
84-
M.set(tab, "stopTime", 10.0);
85-
M.set(tab, "loopTime", 10.0);
86-
M.set(tab, "doLoop", True);
89+
tab.set("vector", stim);
90+
tab.set("stepSize", 0.0);
91+
tab.set("stopTime", 10.0);
92+
tab.set("loopTime", 10.0);
93+
tab.set("doLoop", True);
8794

8895
# Connect outputs
8996
for i in range(7):
@@ -95,17 +102,20 @@ def makereac():
95102
s.setClock(18, plotDt);
96103
return kin, tab
97104

98-
99-
def test_shell():
105+
def test_ksolve():
100106
rec, tab = makereac()
101107
s = M.getShell()
102108
s.reinit()
103109
s.start(20.0)
104110
print(tab)
105-
data = M.getNumpy(tab, "vector")
106-
print(data)
111+
dataN = tab.getNumpy("vector")
112+
data = np.array(tab.getVec("vector"))
113+
assert np.allclose(dataN, data)
107114
# get data.
108115
print("Done ksolve")
109116

117+
def main():
118+
test_ksolve()
119+
110120
if __name__ == '__main__':
111-
test_shell()
121+
main()

0 commit comments

Comments
 (0)