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()