Qx.Simulation (Qx - Quantum Computing Simulator v0.5.0)
View SourceSimulation engine for executing quantum circuits with full complex number support.
This module runs circuit instructions and applies quantum gates to evolve the quantum state, then provides measurement probabilities and classical bit results. All quantum states and operations properly support complex number arithmetic.
Summary
Functions
Gets the probability distribution for all computational basis states.
Executes a quantum circuit without measurements, returning only the final state.
Executes a quantum circuit and returns the simulation results.
Types
@type simulation_result() :: Qx.SimulationResult.t()
Functions
Gets the probability distribution for all computational basis states.
Note: This function only works for circuits without measurements or conditionals.
For circuits with measurements, use run/2 and access the probabilities from the result.
Parameters
circuit- The quantum circuitoptions- Optional keyword list (default: [])
Options
:backend- Nx backend to use for computation (default: current Nx default)
Examples
iex> qc = Qx.QuantumCircuit.new(1, 0) |> Qx.Operations.h(0)
iex> probs = Qx.Simulation.get_probabilities(qc)
iex> Nx.shape(probs)
{2}Raises
Qx.MeasurementError- If circuit contains measurements or conditionals
Executes a quantum circuit without measurements, returning only the final state.
Note: This function only works for circuits without measurements or conditionals.
For circuits with measurements, use run/2 instead to get the simulation result.
Parameters
circuit- The quantum circuit to executeoptions- Optional keyword list (default: [])
Options
:backend- Nx backend to use for computation (default: current Nx default)
Examples
iex> qc = Qx.QuantumCircuit.new(1, 0) |> Qx.Operations.h(0)
iex> state = Qx.Simulation.get_state(qc)
iex> Nx.shape(state)
{2}Raises
Qx.MeasurementError- If circuit contains measurements or conditionals
Executes a quantum circuit and returns the simulation results.
Parameters
circuit- The quantum circuit to executeoptions- Optional keyword list (default: [])
Options
:shots- Number of measurement shots (default: 1024):backend- Nx backend to use for computation (default: current Nx default)
Backend Selection
You can specify which Nx backend to use for this simulation:
# Use EXLA for GPU/CPU acceleration
Qx.Simulation.run(circuit, backend: EXLA.Backend)
# Force binary backend (no acceleration)
Qx.Simulation.run(circuit, backend: Nx.BinaryBackend)
# Use default backend
Qx.Simulation.run(circuit)Examples
iex> qc = Qx.QuantumCircuit.new(2, 2)
iex> qc = qc |> Qx.Operations.h(0) |> Qx.Operations.cx(0, 1)
iex> result = Qx.Simulation.run(qc)
iex> is_map(result)
true
# With custom shots
iex> result = Qx.Simulation.run(qc, shots: 2048)
iex> result.shots
2048