Raise ValueError if adding a spec results in a duplicate name.
PiperOrigin-RevId: 871397807 Change-Id: I50742efe7ba194ed3b1fe916f05e35b7fb2d7ec0
This commit is contained in:
committed by
Copybara-Service
parent
af802a5386
commit
448e221690
@@ -841,7 +841,9 @@ def generate_add() -> None:
|
|||||||
code += """\n
|
code += """\n
|
||||||
auto set_name = [](raw::MjsElement* el, const std::optional<std::string>& name) {
|
auto set_name = [](raw::MjsElement* el, const std::optional<std::string>& name) {
|
||||||
if (name.has_value()) {
|
if (name.has_value()) {
|
||||||
mjs_setName(el, name->c_str());
|
if (mjs_setName(el, name->c_str())) {
|
||||||
|
throw pybind11::value_error(mjs_getError(mjs_getSpec(el)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -970,6 +970,26 @@ class SpecsTest(absltest.TestCase):
|
|||||||
):
|
):
|
||||||
spec.add_material().name = 'yellow'
|
spec.add_material().name = 'yellow'
|
||||||
|
|
||||||
|
def test_duplicate_name_error_when_adding_specs_with_kwargs(self):
|
||||||
|
spec = mujoco.MjSpec()
|
||||||
|
body = spec.worldbody.add_body(name='body')
|
||||||
|
body.add_geom(
|
||||||
|
type=mujoco.mjtGeom.mjGEOM_BOX, size=[0.1, 1, 1], name='dup'
|
||||||
|
)
|
||||||
|
with self.assertRaisesRegex(
|
||||||
|
ValueError, "Error: repeated name 'dup' in geom"
|
||||||
|
):
|
||||||
|
body.add_geom(
|
||||||
|
type=mujoco.mjtGeom.mjGEOM_BOX, size=[1, 0.1, 1], name='dup'
|
||||||
|
)
|
||||||
|
|
||||||
|
spec2 = mujoco.MjSpec()
|
||||||
|
spec2.add_material(name='yellow')
|
||||||
|
with self.assertRaisesRegex(
|
||||||
|
ValueError, "Error: repeated name 'yellow' in material"
|
||||||
|
):
|
||||||
|
spec2.add_material(name='yellow')
|
||||||
|
|
||||||
def test_delete_unused_plugin(self):
|
def test_delete_unused_plugin(self):
|
||||||
spec = mujoco.MjSpec.from_string("""
|
spec = mujoco.MjSpec.from_string("""
|
||||||
<mujoco model="MuJoCo Model">
|
<mujoco model="MuJoCo Model">
|
||||||
|
|||||||
Reference in New Issue
Block a user