uniqc.backend_adapter.task.normalizers module¶
Platform-specific result normalizers.
This module provides functions to convert platform-specific result formats into the unified UnifiedResult format. Each platform (OriginQ, Quafu, IBM) has its own normalizer that handles the unique output format of that platform.
The normalizers are used by the adapter classes to ensure consistent result handling across all platforms.
Usage:
from uniqc.backend_adapter.task.normalizers import normalize_quafu
from uniqc.backend_adapter.task.result_types import UnifiedResult
# Convert Quafu result to unified format
unified = normalize_quafu(quafu_result, task_id="abc123")
- uniqc.backend_adapter.task.normalizers.normalize_dummy(probs_list, task_id, shots=1000)[source]¶
Normalize local simulator probability output.
The local OriginIR simulator returns a list of probabilities indexed by computational basis state (little-endian).
- Parameters:
- Returns:
UnifiedResult with probabilities converted to bitstrings.
- Return type:
Example
>>> probs = [0.5, 0.0, 0.0, 0.5] # |00> and |11> each 50% >>> result = normalize_dummy(probs, "task-3") >>> print(result.probabilities) {'00': 0.5, '11': 0.5}
- uniqc.backend_adapter.task.normalizers.normalize_ibm(result_obj, task_id)[source]¶
Normalize IBM Quantum (Qiskit) Result format.
- IBM returns a Qiskit Result object with:
get_counts(): Returns dict or list of dicts for measurement counts
to_dict(): Returns full result as dict with metadata
- Parameters:
- Returns:
UnifiedResult with counts and probabilities.
- Return type:
Note
For batch jobs, this normalizes the first circuit result only. Use result_obj.get_counts() directly for batch results.
Example
>>> # result_obj is a qiskit Result >>> unified = normalize_ibm(result_obj, "job-123") >>> print(unified.counts) {'0x0': 512, '0x3': 488}
- uniqc.backend_adapter.task.normalizers.normalize_originq(raw, task_id, shots=1000, n_qubits=None)[source]¶
Normalize OriginQ Cloud result format.
OriginQ returns results either in the legacy probability format:
{'key': ['0x0', '0x1', ...], 'value': [0.5, 0.3, ...]}
where keys are hexadecimal bitstrings and values are probabilities, or as a plain counts dict:
{0: 100, 1: 200, 7: 50} # int outcome -> shot count {'0x0': 100, '0x1': 200} # hex string outcome -> shot count
- Parameters:
raw (dict[str, Any]) – Raw result dict from OriginQ Cloud API. Either the
{"key": [...], "value": [...]}probability form or a flat counts dict mapping integer/hex/binary outcomes to shot counts.task_id (str) – Task identifier.
shots (int) – Number of shots (default 1000). Ignored when
rawis a counts dict (in which case the sum of counts is used).n_qubits (int | None) – Number of qubits in the source circuit. If
Nonethe width is inferred from the highest observed integer outcome viaint.bit_length(), which is unsafe for sparse distributions where the most-significant qubits happen to read0(the resulting bitstrings will be shorter than the true register width). Passing the explicitn_qubitsfromcircuit.qubit_numis strongly preferred and aUserWarningis emitted when it is omitted.
- Returns:
UnifiedResult with normalized probabilities and counts.
- Return type:
Example
>>> raw = {'key': ['0x0', '0x3'], 'value': [0.5, 0.5]} >>> result = normalize_originq(raw, "task-1", n_qubits=2) >>> print(result.probabilities) {'00': 0.5, '11': 0.5}
- uniqc.backend_adapter.task.normalizers.normalize_quafu(result_obj, task_id, backend_name=None)[source]¶
Normalize Quafu ExecResult format.
- Quafu returns an ExecResult object with attributes:
counts: Dict[str, int] measurement counts
probabilities: Dict[str, float] measurement probabilities
task_status: Status string
- Parameters:
- Returns:
UnifiedResult with counts and probabilities.
- Return type:
Example
>>> # result_obj is a quafu ExecResult >>> unified = normalize_quafu(result_obj, "task-2") >>> print(unified.counts) {'00': 512, '11': 488}