| """Typed interfaces and containers for detector-event decoders.""" | |
| from __future__ import annotations | |
| from dataclasses import dataclass, field | |
| from typing import Any, Mapping, Protocol, runtime_checkable | |
| import numpy as np | |
| from numpy.typing import NDArray | |
| BoolArray = NDArray[np.bool_] | |
| class DecoderMetadata: | |
| """Metadata needed by decoders to map detector events to logical predictions.""" | |
| num_observables: int | |
| detector_error_model: Any | None = None | |
| circuit: Any | None = None | |
| seed: int | None = None | |
| extra: Mapping[str, Any] = field(default_factory=dict) | |
| class DecoderInput: | |
| """Container for batched detector events and accompanying metadata.""" | |
| detector_events: BoolArray | |
| metadata: DecoderMetadata | |
| class DecoderOutput: | |
| """Container for batched predicted logical observables.""" | |
| logical_predictions: BoolArray | |
| decoder_name: str | |
| diagnostics: Mapping[str, Any] = field(default_factory=dict) | |
| class DecoderProtocol(Protocol): | |
| """Common protocol implemented by all decoder adapters.""" | |
| name: str | |
| def decode(self, detector_events: BoolArray, metadata: DecoderMetadata) -> DecoderOutput: | |
| """Decode detector events into predicted logical observables.""" | |
| ... | |