Merge branch 'nested_flags' into 'master'

allow nested flags from nested python dictionaries

See merge request ngsolve/netgen!652
This commit is contained in:
Schöberl, Joachim 2024-05-31 13:40:41 +02:00
commit 1a72309c40
2 changed files with 18 additions and 12 deletions

View File

@ -14,13 +14,11 @@ namespace ngcore
{
if (py::isinstance<py::dict>(value))
{
py::dict vdd(value);
// call recursively to set dictionary
for (auto item : vdd) {
string name = item.first.cast<string>();
py::object val = py::reinterpret_borrow<py::object>(item.second);
SetFlag(flags, name, val);
}
Flags nested_flags;
for(auto item : value.cast<py::dict>())
SetFlag(nested_flags, item.first.cast<string>(),
item.second.cast<py::object>());
flags.SetFlag(s, nested_flags);
return;
}
@ -103,7 +101,9 @@ namespace ngcore
}
}
auto flags = py::cast<Flags>(flags_dict);
Flags flags;
for(auto item : flags_dict)
SetFlag(flags, item.first.cast<string>(), item.second.cast<py::object>());
for (auto item : kwargs)
{

View File

@ -149,12 +149,18 @@ PYBIND11_MODULE(pyngcore, m) // NOLINT
py::class_<Flags>(m, "Flags")
.def(py::init<>())
.def("__str__", &ToString<Flags>)
.def(py::init([](py::object & obj) {
.def(py::init([](py::dict kwargs) {
Flags flags;
py::dict d(obj);
SetFlag (flags, "", d);
for (auto d : kwargs)
SetFlag(flags, d.first.cast<string>(), d.second.cast<py::object>());
return flags;
}), py::arg("obj"), "Create Flags by given object")
}), "Create flags from dict")
.def(py::init([](py::kwargs kwargs) {
Flags flags;
for (auto d : kwargs)
SetFlag(flags, d.first.cast<string>(), d.second.cast<py::object>());
return flags;
}), "Create flags from kwargs")
.def(py::pickle([] (const Flags& self)
{
std::stringstream str;