Qx.SimulationResult (Qx - Quantum Computing Simulator v0.5.0)
View SourceResult of quantum circuit simulation.
This struct encapsulates all information from a circuit execution, including quantum state, measurement outcomes, and statistics.
Fields
:probabilities- Probability amplitudes as Nx tensor:classical_bits- List of measurement outcomes for each shot:state- Final quantum state vector (Nx tensor):shots- Number of simulation shots executed:counts- Frequency map of measurement outcomes
Examples
iex> circuit = Qx.create_circuit(2, 2)
...> |> Qx.h(0)
...> |> Qx.cx(0, 1)
...> |> Qx.measure(0, 0)
...> |> Qx.measure(1, 1)
iex> result = Qx.run(circuit, 1000)
iex> result.shots
1000
iex> Qx.SimulationResult.most_frequent(result)
{"00", 503}
Summary
Functions
Get outcomes above a probability threshold.
Get the most frequent measurement outcome.
Get all unique outcomes that occurred.
Get the probability of a specific outcome.
Convert result to a simplified map (for backwards compatibility).
Types
@type t() :: %Qx.SimulationResult{ classical_bits: [[integer()]], counts: %{required(String.t()) => non_neg_integer()}, probabilities: Nx.Tensor.t(), shots: pos_integer(), state: Nx.Tensor.t() }
Functions
@spec filter_by_probability(t(), float()) :: %{ required(String.t()) => non_neg_integer() }
Get outcomes above a probability threshold.
Filters measurement outcomes to only those that occurred with at least the specified probability.
Parameters
result- Simulation resultthreshold- Minimum probability (0.0 to 1.0)
Returns
A map of outcomes that meet the threshold.
Examples
iex> result = %Qx.SimulationResult{
...> probabilities: Nx.tensor([0.5, 0.5, 0.0, 0.0]),
...> classical_bits: [[0, 0], [1, 1], [0, 0]],
...> state: Nx.tensor([0.707, 0.0, 0.0, 0.707]),
...> shots: 100,
...> counts: %{"00" => 52, "11" => 48}
...> }
iex> Qx.SimulationResult.filter_by_probability(result, 0.5)
%{"00" => 52}
@spec most_frequent(t()) :: {String.t(), non_neg_integer()}
Get the most frequent measurement outcome.
Returns
A tuple of {outcome, count} where outcome is a binary string like "01"
and count is the number of times it occurred.
Examples
iex> result = %Qx.SimulationResult{
...> probabilities: Nx.tensor([0.5, 0.5, 0.0, 0.0]),
...> classical_bits: [[0, 0], [1, 1], [0, 0]],
...> state: Nx.tensor([0.707, 0.0, 0.0, 0.707]),
...> shots: 100,
...> counts: %{"00" => 52, "11" => 48}
...> }
iex> Qx.SimulationResult.most_frequent(result)
{"00", 52}
Get all unique outcomes that occurred.
Examples
iex> result = %Qx.SimulationResult{
...> probabilities: Nx.tensor([0.5, 0.5]),
...> classical_bits: [[0], [1], [0]],
...> state: Nx.tensor([0.707, 0.707]),
...> shots: 100,
...> counts: %{"0" => 52, "1" => 48}
...> }
iex> Qx.SimulationResult.outcomes(result)
["0", "1"]
Get the probability of a specific outcome.
Examples
iex> result = %Qx.SimulationResult{
...> probabilities: Nx.tensor([0.5, 0.5]),
...> classical_bits: [[0], [1]],
...> state: Nx.tensor([0.707, 0.707]),
...> shots: 100,
...> counts: %{"0" => 52, "1" => 48}
...> }
iex> Qx.SimulationResult.probability(result, "0")
0.52
Convert result to a simplified map (for backwards compatibility).
Examples
iex> result = %Qx.SimulationResult{
...> probabilities: Nx.tensor([1.0]),
...> classical_bits: [[0]],
...> state: Nx.tensor([1.0]),
...> shots: 1,
...> counts: %{"0" => 1}
...> }
iex> map = Qx.SimulationResult.to_map(result)
iex> Map.keys(map)
[:probabilities, :classical_bits, :state, :shots, :counts]