| """Surface-code protocol adapter for existing RL/decoder workflows.""" | |
| from __future__ import annotations | |
| from dataclasses import replace | |
| from surface_code_in_stem.rl_control.envs.base import EnvBuildContext | |
| from surface_code_in_stem.protocols.base import ProtocolContract, QuantumProtocol | |
| class SurfaceProtocol: | |
| """Default protocol using surface code environments.""" | |
| contract = ProtocolContract( | |
| name="surface", | |
| family="surface", | |
| description="Baseline surface-code simulator protocol.", | |
| capabilities=["qec", "decoder", "sampling"], | |
| ) | |
| def supports(self, context: EnvBuildContext) -> bool: | |
| return context.distance % 2 == 1 and context.distance >= 3 | |
| def normalize_context(self, context: EnvBuildContext) -> EnvBuildContext: | |
| # Keep deterministic odd-distance surfaces. | |
| normalized_distance = context.distance if context.distance % 2 == 1 else context.distance + 1 | |
| if normalized_distance != context.distance: | |
| context = replace(context, distance=normalized_distance) | |
| return context | |
| def validate_context(self, context: EnvBuildContext) -> None: | |
| self.contract.validate_context(context) | |
| if not self.supports(context): | |
| raise ValueError("Surface protocol requires odd distance >= 3.") | |