# %% import datetime class SensorAgent: DEFAULT_SEQUENCE = [ {"site": "right_leg", "side": "right"}, {"site": "right_arm", "side": "right"}, {"site": "left_arm", "side": "left"}, {"site": "left_leg", "side": "left"} ] def __init__(self, sequence=None, change_days=10): """ sequence: Optional list of dicts like [{"site": "leg", "side": "left"}, ...] change_days: Number of days between sensor changes """ self.sequence = sequence or self.DEFAULT_SEQUENCE self.change_days = change_days def generate_schedule(self, start_date, starting_site): """ start_date: datetime.date object starting_site: dict with keys "site" and "side" """ if not isinstance(starting_site, dict): raise ValueError("starting_site must be a dict with 'site' and 'Side'") site = starting_site.get("site") side = starting_site.get("side") # Find index of starting site in sequence start_index = next( (i for i, s in enumerate(self.sequence) if s["site"] == starting_site["site"] and s["side"] == starting_site["side"]), None ) if start_index is None: raise ValueError(f"Starting site {starting_site} not found in sequence.") # Rotate sequence from starting point rotated_sequence = self.sequence[start_index:] + self.sequence[:start_index] # Generate schedule schedule = [] for i, entry in enumerate(rotated_sequence): scheduled_date = start_date + datetime.timedelta(days=i * self.change_days) schedule.append({ "date": scheduled_date, "site": entry["site"], "side": entry["side"] }) return schedule