Qx.Simulation (Qx - Quantum Computing Simulator v0.5.0)

View Source

Simulation 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

simulation_result()

@type simulation_result() :: Qx.SimulationResult.t()

Functions

get_probabilities(circuit, options \\ [])

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 circuit
  • options - 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

get_state(circuit, options \\ [])

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 execute
  • options - 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

run(circuit, options \\ [])

Executes a quantum circuit and returns the simulation results.

Parameters

  • circuit - The quantum circuit to execute
  • options - 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