Add _all_fields to MjOption, MjModel, MjData for struct introspection.
PiperOrigin-RevId: 810066486 Change-Id: I807104fc955a505512287f63b7c184a29c0d150e
This commit is contained in:
committed by
Copybara-Service
parent
a5ed4ee223
commit
6aa06d2f43
@@ -97,6 +97,19 @@ PYBIND11_MODULE(_structs, m) {
|
||||
mjOption.def("__deepcopy__", [](const MjOptionWrapper& other, py::dict) {
|
||||
return MjOptionWrapper(other);
|
||||
});
|
||||
mjOption.def_property_readonly_static("_all_fields", [](py::object) {
|
||||
std::vector<std::string> fields;
|
||||
#define X(dtype, name) fields.push_back(#name);
|
||||
MJOPTION_FLOATS
|
||||
#undef X
|
||||
#define X(name, dim0) fields.push_back(#name);
|
||||
MJOPTION_VECTORS
|
||||
#undef X
|
||||
#define X(dtype, name) fields.push_back(#name);
|
||||
MJOPTION_INTS
|
||||
#undef X
|
||||
return py::tuple(py::cast(fields));
|
||||
});
|
||||
DefineStructFunctions(mjOption);
|
||||
|
||||
#define X(type, var) \
|
||||
@@ -417,6 +430,17 @@ This is useful for example when the MJB is not available as a file on disk.)"));
|
||||
return py::tuple(py::cast(fields));
|
||||
});
|
||||
|
||||
mjModel.def_property_readonly_static("_all_fields", [](py::object) {
|
||||
std::vector<std::string> fields;
|
||||
#define X(var) fields.push_back(#var);
|
||||
MJMODEL_INTS
|
||||
#undef X
|
||||
#define X(type, name, nr, nc) fields.push_back(#name);
|
||||
MJMODEL_POINTERS
|
||||
#undef X
|
||||
return py::tuple(py::cast(fields));
|
||||
});
|
||||
|
||||
#define X(dtype, var, dim0, dim1) \
|
||||
if constexpr (std::string_view(#var) != "text_data" && \
|
||||
std::string_view(#var) != "names" && \
|
||||
@@ -748,6 +772,17 @@ This is useful for example when the MJB is not available as a file on disk.)"));
|
||||
py::cast(other.model()).attr("__deepcopy__")(memo);
|
||||
return MjDataWrapper(other, new_model_py.cast<MjModelWrapper*>());
|
||||
});
|
||||
mjData.def_property_readonly_static("_all_fields", [](py::object) {
|
||||
std::vector<std::string> fields;
|
||||
#define X(dtype, name) fields.push_back(#name);
|
||||
MJDATA_SCALAR
|
||||
#undef X
|
||||
#define X(dtype, name, dim0, dim1) fields.push_back(#name);
|
||||
MJDATA_VECTOR
|
||||
MJDATA_POINTERS
|
||||
#undef X
|
||||
return py::tuple(py::cast(fields));
|
||||
});
|
||||
mjData.def(py::pickle(
|
||||
[](const MjDataWrapper& d) { // __getstate__
|
||||
std::ostringstream output(std::ios::out | std::ios::binary);
|
||||
|
||||
Reference in New Issue
Block a user