Source code for stonesoup.sensor.action

import datetime
from abc import abstractmethod
from typing import Iterator, Any

from ...base import Base, Property


[docs]class Action(Base): """The base class for an action that can be taken by a sensor or platform with an :class:`~.ActionableProperty`.""" generator: Any = Property(default=None, readonly=True, doc="Action generator that created the action.") end_time: datetime.datetime = Property(readonly=True, doc="Time at which modification of the " "attribute ends.") target_value: Any = Property(doc="Target value.")
[docs] def act(self, current_time, timestamp, init_value): """Return the attribute modified. Parameters ---------- current_time: datetime.datetime Current time timestamp: datetime.datetime Modification of attribute ends at this time stamp init_value: Any Current value of the modifiable attribute Returns ------- Any The new value of the attribute """ raise NotImplementedError()
def __eq__(self, other): if not isinstance(other, type(self)): return False return all(getattr(self, name) == getattr(other, name) for name in type(self).properties) def __hash__(self): return hash(tuple(getattr(self, name) for name in type(self).properties))
[docs]class ActionGenerator(Base): """The base class for an action generator.""" owner: object = Property(doc="Actionable object that has the attribute to be modified.") attribute: str = Property(doc="The name of the attribute to be modified.") start_time: datetime.datetime = Property(doc="Start time of action.") end_time: datetime.datetime = Property(doc="End time of action.") resolution: float = Property(default=None, doc="Resolution of action space") @abstractmethod def __contains__(self, item): raise NotImplementedError() @abstractmethod def __iter__(self) -> Iterator[Action]: raise NotImplementedError() @property def current_value(self): """Return the current value of the owner's attribute.""" return getattr(self.owner, self.attribute) @property def default_action(self): """The default action to modify the property if there is no given action.""" raise NotImplementedError()
[docs]class RealNumberActionGenerator(ActionGenerator): """Action generator where action is a choice of a real number.""" @property @abstractmethod def initial_value(self): raise NotImplementedError @property @abstractmethod def min(self): raise NotImplementedError @property @abstractmethod def max(self): raise NotImplementedError