File size: 1,320 Bytes
9f8cf99 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | """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.")
|