Results

An ExperimentResult is the outcome of running an Experiment. Its raw execution records are preserved verbatim — aggregation and analysis never destroy them.

Structure

  • experiment / status — identity and lifecycle state.

  • executions() — all ExecutionRecord s in order.

  • successes() / success_count / failure_count / all_successful — quick status summaries.

  • to_dict() / to_json() / from_dict() — every record serialized (including each raw BackendResult), fully restorable JSON-safe round trip.

Example

from microquantum import (
    ExecutionRuntime,
    Experiment,
    ExperimentResult,
    MockBackend,
    Parameter,
    ParameterSweep,
    QuantumCircuit,
)

theta = Parameter("theta")
ansatz = QuantumCircuit(1).ry(theta, 0)

exp = Experiment("rx-results", shots=64, seed=1)
exp.add_circuit(ansatz, name="theta=0", parameter_bindings={"theta": 0.0})
exp.add_sweep(ParameterSweep({"theta": [0.5, 1.0]}), base=ansatz)

result = exp.run(ExecutionRuntime(backend=MockBackend()))

for record in result.executions:
    print(
        record.status, record.parameter_bindings,
        record.metadata.get("sweep_name", "-"),
    )

consolidated = result.to_dict()
restored = ExperimentResult.from_dict(consolidated)
assert restored.failure_count == result.failure_count

Feeding the analysis layer

Records flow into analysis without re-running anything:

  • SamplingAnalysis — counts -> probabilities / entropy / marginals.

  • ExpectationAnalysis — per-label mean / variance / std / standard error.

  • StateAnalysis — statevector / density-matrix inspection.

  • ResultAggregator — group by bindings, backend or status (see Aggregation).

Design principle

raw results -> records -> aggregation -> derived analysis — never raw results -> replace with summary. This keeps every experiment re-analysable without re-execution.