Add mju_sym2dense, document future breakage of mj_fullM

PiperOrigin-RevId: 910242375
Change-Id: Ibfbdef9cfb66088723499ea257da09aee0d80938
This commit is contained in:
Yuval Tassa
2026-05-04 14:25:23 -07:00
committed by Copybara-Service
parent a51a7bf062
commit 767c607f58
19 changed files with 191 additions and 12 deletions
+31
View File
@@ -1241,6 +1241,37 @@ PYBIND11_MODULE(_functions, pymodule) {
colind.data());
});
DEF_WITH_OMITTED_PY_ARGS(traits::mju_sym2dense, "n")(
pymodule,
[](Eigen::Ref<EigenArrayXX> res,
Eigen::Ref<const EigenVectorX> mat,
Eigen::Ref<const EigenVectorI> rownnz,
Eigen::Ref<const EigenVectorI> rowadr,
Eigen::Ref<const EigenVectorI> colind) {
if (res.rows() != res.cols()) {
throw py::type_error("res should be a square matrix");
}
if (res.rows() != rownnz.size()) {
throw py::type_error("#rows in res should equal size of rownnz");
}
if (res.rows() != rowadr.size()) {
throw py::type_error("#rows in res should equal size of rowadr");
}
if (res.rows() > 0) {
int nnz = rowadr.array().tail(1)[0] + rownnz.array().tail(1)[0];
if (mat.size() < nnz) {
throw py::type_error("mat size is too small for the given sparse "
"structure");
}
if (colind.size() < nnz) {
throw py::type_error("colind size is too small for the given "
"sparse structure");
}
}
return ::mju_sym2dense(res.data(), mat.data(), res.rows(),
rownnz.data(), rowadr.data(), colind.data());
});
// Quaternions
Def<traits::mju_rotVecQuat>(pymodule);
Def<traits::mju_negQuat>(pymodule);
+42
View File
@@ -7755,6 +7755,48 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([
),
doc='Convert matrix from sparse to dense.',
)),
('mju_sym2dense',
FunctionDecl(
name='mju_sym2dense',
return_type=ValueType(name='void'),
parameters=(
FunctionParameterDecl(
name='res',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
),
FunctionParameterDecl(
name='mat',
type=PointerType(
inner_type=ValueType(name='mjtNum', is_const=True),
),
),
FunctionParameterDecl(
name='n',
type=ValueType(name='int'),
),
FunctionParameterDecl(
name='rownnz',
type=PointerType(
inner_type=ValueType(name='int', is_const=True),
),
),
FunctionParameterDecl(
name='rowadr',
type=PointerType(
inner_type=ValueType(name='int', is_const=True),
),
),
FunctionParameterDecl(
name='colind',
type=PointerType(
inner_type=ValueType(name='int', is_const=True),
),
),
),
doc='Convert lower-triangular symmetric CSR matrix to full dense matrix.', # pylint: disable=line-too-long
)),
('mju_rotVecQuat',
FunctionDecl(
name='mju_rotVecQuat',