(self)
| 331 | self.assertNotIn('name', submujoco.worldbody.to_xml_string(self_only=True)) |
| 332 | |
| 333 | def testAttach(self): |
| 334 | mujoco = parser.from_path(_TEST_MODEL_XML) |
| 335 | mujoco.model = 'model' |
| 336 | |
| 337 | submujoco = copy.copy(mujoco) |
| 338 | submujoco.model = 'submodel' |
| 339 | |
| 340 | subsubmujoco = copy.copy(mujoco) |
| 341 | subsubmujoco.model = 'subsubmodel' |
| 342 | |
| 343 | with self.assertRaisesRegex(ValueError, 'Cannot merge a model to itself'): |
| 344 | mujoco.attach(mujoco) |
| 345 | |
| 346 | attachment_site = submujoco.find('site', 'attachment') |
| 347 | attachment_site.attach(subsubmujoco) |
| 348 | subsubmodel_frame = submujoco.find('attachment_frame', 'subsubmodel') |
| 349 | for attribute_name in ('pos', 'axisangle', 'xyaxes', 'zaxis', 'euler'): |
| 350 | np.testing.assert_array_equal( |
| 351 | getattr(subsubmodel_frame, attribute_name), |
| 352 | getattr(attachment_site, attribute_name)) |
| 353 | self._test_properties(subsubmodel_frame, |
| 354 | parent=attachment_site.parent, root=submujoco) |
| 355 | self.assertEqual( |
| 356 | subsubmodel_frame.to_xml_string().split('\n')[0], |
| 357 | '<body ' |
| 358 | 'pos="0.10000000000000001 0.10000000000000001 0.10000000000000001" ' |
| 359 | 'quat="0 1 0 0" ' |
| 360 | 'name="subsubmodel/">') |
| 361 | self.assertEqual( |
| 362 | subsubmodel_frame.to_xml_string(precision=5).split('\n')[0], |
| 363 | '<body ' |
| 364 | 'pos="0.1 0.1 0.1" ' |
| 365 | 'quat="0 1 0 0" ' |
| 366 | 'name="subsubmodel/">') |
| 367 | self.assertEqual(subsubmodel_frame.all_children(), |
| 368 | subsubmujoco.worldbody.all_children()) |
| 369 | |
| 370 | with self.assertRaisesRegex(ValueError, 'already attached elsewhere'): |
| 371 | mujoco.attach(subsubmujoco) |
| 372 | |
| 373 | with self.assertRaisesRegex(ValueError, 'Expected a mjcf.RootElement'): |
| 374 | mujoco.attach(submujoco.contact) |
| 375 | |
| 376 | submujoco.option.flag.gravity = 'enable' |
| 377 | with self.assertRaisesRegex( |
| 378 | ValueError, 'Conflicting values for attribute `gravity`'): |
| 379 | mujoco.attach(submujoco) |
| 380 | submujoco.option.flag.gravity = 'disable' |
| 381 | |
| 382 | mujoco.attach(submujoco) |
| 383 | self.assertEqual(subsubmujoco.parent_model, submujoco) |
| 384 | self.assertEqual(submujoco.parent_model, mujoco) |
| 385 | self.assertEqual(subsubmujoco.root_model, mujoco) |
| 386 | self.assertEqual(submujoco.root_model, mujoco) |
| 387 | |
| 388 | self.assertEqual(submujoco.full_identifier, 'submodel/') |
| 389 | self.assertEqual(subsubmujoco.full_identifier, 'submodel/subsubmodel/') |
| 390 |
nothing calls this directly
no test coverage detected