Source code for metasim.cfg.checkers.checker_operators

from __future__ import annotations

from dataclasses import MISSING

import torch

from metasim.cfg.objects import BaseObjMetaCfg
from metasim.utils.configclass import configclass

from .base_checker import BaseChecker

try:
    from metasim.sim.base import BaseSimHandler
except:
    pass


[docs] @configclass class AndOp(BaseChecker): checkers: list[BaseChecker] = MISSING
[docs] def reset(self, handler: BaseSimHandler, env_ids: list[int] | None = None): for checker in self.checkers: checker.reset(handler, env_ids=env_ids)
[docs] def check(self, handler: BaseSimHandler) -> torch.BoolTensor: success = torch.ones(handler.num_envs, dtype=torch.bool) for checker in self.checkers: success = success & checker.check(handler) return success
[docs] def get_debug_viewers(self) -> list[BaseObjMetaCfg]: viewers = [] for checker in self.checkers: viewers += checker.get_debug_viewers() return viewers
[docs] @configclass class OrOp(BaseChecker): checkers: list[BaseChecker] = MISSING
[docs] def reset(self, handler: BaseSimHandler, env_ids: list[int] | None = None): for checker in self.checkers: checker.reset(handler, env_ids=env_ids)
[docs] def check(self, handler: BaseSimHandler) -> torch.BoolTensor: success = torch.zeros(handler.num_envs, dtype=torch.bool) for checker in self.checkers: success = success | checker.check(handler) return success
[docs] def get_debug_viewers(self) -> list[BaseObjMetaCfg]: viewers = [] for checker in self.checkers: viewers += checker.get_debug_viewers() return viewers
[docs] @configclass class NotOp(BaseChecker): checker: BaseChecker = MISSING
[docs] def reset(self, handler: BaseSimHandler, env_ids: list[int] | None = None): self.checker.reset(handler, env_ids=env_ids)
[docs] def check(self, handler: BaseSimHandler) -> torch.BoolTensor: return ~self.checker.check(handler)
[docs] def get_debug_viewers(self) -> list[BaseObjMetaCfg]: return self.checker.get_debug_viewers()