from enum import IntEnum class StateSE2Index(IntEnum): _X = 0 _Y = 1 _HEADING = 2 @classmethod def size(cls): valid_attributes = [ attribute for attribute in dir(cls) if attribute.startswith("_") and not attribute.startswith("__") and not callable(getattr(cls, attribute)) ] return len(valid_attributes) @classmethod @property def X(cls): return cls._X @classmethod @property def Y(cls): return cls._Y @classmethod @property def HEADING(cls): return cls._HEADING @classmethod @property def POINT(cls): # assumes X, Y have subsequent indices return slice(cls._X, cls._Y + 1) @classmethod @property def STATE_SE2(cls): # assumes X, Y, HEADING have subsequent indices return slice(cls._X, cls._HEADING + 1) class BoundingBoxIndex(IntEnum): _X = 0 _Y = 1 _Z = 2 _LENGTH = 3 _WIDTH = 4 _HEIGHT = 5 _HEADING = 6 @classmethod def size(cls): valid_attributes = [ attribute for attribute in dir(cls) if attribute.startswith("_") and not attribute.startswith("__") and not callable(getattr(cls, attribute)) ] return len(valid_attributes) @classmethod @property def X(cls): return cls._X @classmethod @property def Y(cls): return cls._Y @classmethod @property def Z(cls): return cls._Z @classmethod @property def LENGTH(cls): return cls._LENGTH @classmethod @property def WIDTH(cls): return cls._WIDTH @classmethod @property def HEIGHT(cls): return cls._HEIGHT @classmethod @property def HEADING(cls): return cls._HEADING @classmethod @property def POINT2D(cls): # assumes X, Y have subsequent indices return slice(cls._X, cls._Y + 1) @classmethod @property def POSITION(cls): # assumes X, Y, Z have subsequent indices return slice(cls._X, cls._Z + 1) @classmethod @property def DIMENSION(cls): # assumes LENGTH, WIDTH, HEIGHT have subsequent indices return slice(cls._LENGTH, cls._HEIGHT + 1) class LidarIndex(IntEnum): _X = 0 _Y = 1 _Z = 2 _INTENSITY = 3 _RING = 4 _ID = 5 @classmethod def size(cls): valid_attributes = [ attribute for attribute in dir(cls) if attribute.startswith("_") and not attribute.startswith("__") and not callable(getattr(cls, attribute)) ] return len(valid_attributes) @classmethod @property def X(cls): return cls._X @classmethod @property def Y(cls): return cls._Y @classmethod @property def Z(cls): return cls._Z @classmethod @property def INTENSITY(cls): return cls._INTENSITY @classmethod @property def RING(cls): return cls._RING @classmethod @property def ID(cls): return cls._ID @classmethod @property def POINT2D(cls): # assumes X, Y have subsequent indices return slice(cls._X, cls._Y + 1) @classmethod @property def POSITION(cls): # assumes X, Y, Z have subsequent indices return slice(cls._X, cls._Z + 1)