Qx.Format (Qx - Quantum Computing Simulator v0.6.0)
View SourceShared formatting utilities for quantum states and complex numbers.
This module provides consistent formatting across the Qx library for:
- Complex numbers in "a+bi" notation
- Basis state labels in ket notation (|00⟩, |01⟩, etc.)
- Dirac notation for quantum state representation
Examples
# Format complex numbers
iex> Qx.Format.complex(Complex.new(0.707, 0.5))
"0.707+0.500i"
# Format basis states
iex> Qx.Format.basis_state(3, 2)
"|11⟩"
# Build Dirac notation
iex> amplitudes = [
...> {"|00⟩", Complex.new(0.707, 0.0), 0.5},
...> {"|01⟩", Complex.new(0.0, 0.0), 0.0},
...> {"|10⟩", Complex.new(0.707, 0.0), 0.5}
...> ]
iex> Qx.Format.dirac_notation(amplitudes)
"0.707|00⟩ + 0.707|10⟩"
Summary
Functions
Formats a basis state index as ket notation: |00⟩, |01⟩, etc.
Formats a complex number as "a+bi" notation.
Builds Dirac notation string from amplitudes and probabilities.
Formats state label for visualization.
Functions
Formats a basis state index as ket notation: |00⟩, |01⟩, etc.
Parameters
index- The basis state index (0-based)num_qubits- Number of qubits in the system
Examples
iex> Qx.Format.basis_state(0, 2)
"|00⟩"
iex> Qx.Format.basis_state(3, 2)
"|11⟩"
iex> Qx.Format.basis_state(5, 3)
"|101⟩"
Formats a complex number as "a+bi" notation.
Options
:precision- Number of decimal places (default: 3):format-:erlang(default, faster) or:float
Examples
iex> Qx.Format.complex(Complex.new(0.707, 0.5))
"0.707+0.500i"
iex> Qx.Format.complex(Complex.new(1.0, -0.5), precision: 2)
"1.00-0.50i"
iex> Qx.Format.complex(Complex.new(0.0, 0.0))
"0.000+0.000i"
Builds Dirac notation string from amplitudes and probabilities.
Filters out basis states with negligible probability and formats the remaining terms in standard quantum notation.
Parameters
amplitudes_and_probs- List of tuples:{basis_label, amplitude, probability}
Options
:threshold- Minimum probability to include (default: 1.0e-6):precision- Decimal precision for magnitudes (default: 3)
Examples
iex> amplitudes_and_probs = [
...> {"|00⟩", Complex.new(0.707, 0.0), 0.5},
...> {"|01⟩", Complex.new(0.0, 0.0), 0.0},
...> {"|10⟩", Complex.new(0.707, 0.0), 0.5},
...> {"|11⟩", Complex.new(0.0, 0.0), 0.0}
...> ]
iex> Qx.Format.dirac_notation(amplitudes_and_probs)
"0.707|00⟩ + 0.707|10⟩"
iex> # Bell state |Φ+⟩ = (|00⟩ + |11⟩)/√2
iex> bell_state = [
...> {"|00⟩", Complex.new(0.707, 0.0), 0.5},
...> {"|11⟩", Complex.new(0.707, 0.0), 0.5}
...> ]
iex> Qx.Format.dirac_notation(bell_state)
"0.707|00⟩ + 0.707|11⟩"
iex> # Minus state |-⟩ = (|0⟩ - |1⟩)/√2
iex> minus_state = [
...> {"|0⟩", Complex.new(0.707, 0.0), 0.5},
...> {"|1⟩", Complex.new(-0.707, 0.0), 0.5}
...> ]
iex> Qx.Format.dirac_notation(minus_state)
"0.707|0⟩ - 0.707|1⟩"
Formats state label for visualization.
This is a convenience function that handles both:
- num_qubits directly
- state_size (dimension of Hilbert space) - converts to num_qubits
Examples
iex> Qx.Format.state_label(3, 2) # 3 in 2-qubit system
"|11⟩"
iex> Qx.Format.state_label(5, 8) # 5 in 8-dimensional space (3 qubits)
"|101⟩"