Context manager for temporarily disabling MuJoCo flags. Args: *flags: Positional arguments specifying flags to disable. Can be either lowercase strings (e.g. 'gravity', 'contact') or `mjtDisableBit` enum values. Yields: None Raises: ValueError: If any
(self, *flags)
| 380 | |
| 381 | @contextlib.contextmanager |
| 382 | def disable(self, *flags): |
| 383 | """Context manager for temporarily disabling MuJoCo flags. |
| 384 | |
| 385 | Args: |
| 386 | *flags: Positional arguments specifying flags to disable. Can be either |
| 387 | lowercase strings (e.g. 'gravity', 'contact') or `mjtDisableBit` enum |
| 388 | values. |
| 389 | |
| 390 | Yields: |
| 391 | None |
| 392 | |
| 393 | Raises: |
| 394 | ValueError: If any item in `flags` is neither a valid name nor a value |
| 395 | from `mujoco.mjtDisableBit`. |
| 396 | """ |
| 397 | old_bitmask = self.opt.disableflags |
| 398 | new_bitmask = old_bitmask |
| 399 | for flag in flags: |
| 400 | if isinstance(flag, str): |
| 401 | try: |
| 402 | field_name = "mjDSBL_" + flag.upper() |
| 403 | flag = getattr(mujoco.mjtDisableBit, field_name) |
| 404 | except AttributeError: |
| 405 | valid_names = [ |
| 406 | field_name.split("_")[1].lower() |
| 407 | for field_name in list(mujoco.mjtDisableBit.__members__)[:-1] |
| 408 | ] |
| 409 | raise ValueError("'{}' is not a valid flag name. Valid names: {}" |
| 410 | .format(flag, ", ".join(valid_names))) from None |
| 411 | elif isinstance(flag, int): |
| 412 | flag = mujoco.mjtDisableBit(flag) |
| 413 | new_bitmask |= flag.value |
| 414 | self.opt.disableflags = new_bitmask |
| 415 | try: |
| 416 | yield |
| 417 | finally: |
| 418 | self.opt.disableflags = old_bitmask |
| 419 | |
| 420 | @property |
| 421 | def name(self): |