Spaces:
Sleeping
Sleeping
Download src/coflow5/control/a1_controller.py from REBELLION2002/traffix-live: direct link, hf CLI and curl.
- Browser
- Download file 2.27 kB
-
https://huggingface.co/spaces/REBELLION2002/traffix-live/resolve/main/src/coflow5/control/a1_controller.py
- Command line
-
hf download hf://spaces/REBELLION2002/traffix-live/src/coflow5/control/a1_controller.py
-
curl -L -o a1_controller.py https://huggingface.co/spaces/REBELLION2002/traffix-live/resolve/main/src/coflow5/control/a1_controller.py
2.27 kB
| from __future__ import annotations | |
| from typing import Mapping, Protocol | |
| from coflow5.control.safety import ActionProposal, ProposalSource | |
| class SafeSignalSubmission(Protocol): | |
| def submit( | |
| self, | |
| proposal: ActionProposal, | |
| *, | |
| simulation_time: float, | |
| pedestrian_remaining_clearance: Mapping[str, float] | None = None, | |
| ): ... | |
| class A1FlowController: | |
| """Owns one safe submission capability; it never receives a raw TraCI connection.""" | |
| def __init__(self, executor: SafeSignalSubmission) -> None: | |
| self.__executor = executor | |
| def propose( | |
| self, | |
| *, | |
| proposal_id: str, | |
| signal_id: str, | |
| phase_id: str, | |
| simulation_time: float, | |
| pedestrian_remaining_clearance: Mapping[str, float] | None = None, | |
| ): | |
| return self.__submit( | |
| proposal_id=proposal_id, | |
| signal_id=signal_id, | |
| phase_id=phase_id, | |
| source=ProposalSource.A1_FLOW, | |
| simulation_time=simulation_time, | |
| pedestrian_remaining_clearance=pedestrian_remaining_clearance, | |
| ) | |
| def human_override( | |
| self, | |
| *, | |
| proposal_id: str, | |
| signal_id: str, | |
| phase_id: str, | |
| simulation_time: float, | |
| pedestrian_remaining_clearance: Mapping[str, float] | None = None, | |
| ): | |
| return self.__submit( | |
| proposal_id=proposal_id, | |
| signal_id=signal_id, | |
| phase_id=phase_id, | |
| source=ProposalSource.HUMAN_OVERRIDE, | |
| simulation_time=simulation_time, | |
| pedestrian_remaining_clearance=pedestrian_remaining_clearance, | |
| ) | |
| def __submit( | |
| self, | |
| *, | |
| proposal_id: str, | |
| signal_id: str, | |
| phase_id: str, | |
| source: ProposalSource, | |
| simulation_time: float, | |
| pedestrian_remaining_clearance: Mapping[str, float] | None, | |
| ): | |
| proposal = ActionProposal(proposal_id, signal_id, phase_id, source) | |
| return self.__executor.submit( | |
| proposal, | |
| simulation_time=simulation_time, | |
| pedestrian_remaining_clearance=pedestrian_remaining_clearance, | |
| ) | |