This package is deprecated. Please use 'qumega'.
Project description
_Quantune - A Python Quantum Computing Framework_z
Quantune is an open-source Python library for simulating and visualizing quantum circuits. Designed for both educational and practical purposes, this library allows users to construct, execute, and analyze quantum circuits while providing intuitive visualizations and robust tools for quantum computation.
Features
- Flexible Simulation: Design and execute complex quantum circuits.
- Visualization Tools: Visualize quantum states using Q-Spheres, Bloch Spheres, state vector plots, and more.
- Educational Support: Comprehensive documentation and examples for learning quantum computing.
Installation You can install Quantune using pip:
pip install quantune
gates.py
Quantum Gates: The library provides a range of quantum gates for single and multi-qubit operations.
- identity()
- Description: Represents the identity gate (I), which leaves the quantum state unchanged.
- Matrix:
$$ I = \begin{bmatrix} 1 & 0 \ 0 & 1 \end{bmatrix} $$
- paulix()
- Description: Pauli-X gate, equivalent to a NOT operation on the quantum state.
- Matrix:
$$ X = \begin{bmatrix} 0 & 1 \ 1 & 0 \end{bmatrix} $$
- pauliy()
- Description: Pauli-Y gate rotates the qubit around the Y-axis on the Bloch sphere.
- Matrix:
$$ Y = \begin{bmatrix} 0 & -i \ i & 0 \end{bmatrix} $$
- pauliz()
- Description: Pauli-Z gate flips the phase of the quantum state.
- Matrix:
$$ Z = \begin{bmatrix} 1 & 0 \ 0 & -1 \end{bmatrix} $$
- hadamard()
- Description: Creates superposition by applying an equal-weighted transformation.
- Matrix:
$$ H = \frac{1}{\sqrt{2}}\begin{bmatrix} 1 & 1 \ 1 & -1 \end{bmatrix} $$
- phase(theta)
- Description: Phase gate applies a phase shift of θ to the quantum state.
- Matrix:
$$ P(\theta) = \begin{bmatrix} 1 & 0 \ 0 & e^{i\theta} \end{bmatrix} $$
- s()
- Description: S gate applies a π/2 phase shift.
- Matrix:
$$ S = \begin{bmatrix} 1 & 0 \ 0 & i \end{bmatrix} $$
- sdg()
- Description: SDG gate applies a −π/2 phase shift (inverse of S gate).
- Matrix:
$$ S^\dagger = \begin{bmatrix} 1 & 0 \ 0 & -i \end{bmatrix} $$
- t()
- Description: T gate applies a π/4 phase shift.
- Matrix:
$$ T = \begin{bmatrix} 1 & 0 \ 0 & e^{i\pi/4} \end{bmatrix} $$
- tdg()
- Description: TDG gate applies a −π/4 phase shift (inverse of T gate).
- Matrix:
$$ T^\dagger = \begin{bmatrix} 1 & 0 \ 0 & e^{-i\pi/4} \end{bmatrix} $$
- rz(theta)
- Description: Rotates the qubit around the Z-axis by an angle θ.
- Matrix:
$$ RZ(\theta) = \begin{bmatrix} e^{-i\theta/2} & 0 \ 0 & e^{i\theta/2} \end{bmatrix} $$
- rx(theta)
- Description: Rotates the qubit around the X-axis by an angle θ.
- Matrix:
$$ RX(\theta) = \begin{bmatrix} \cos(\theta/2) & -i\sin(\theta/2) \ -i\sin(\theta/2) & \cos(\theta/2) \end{bmatrix} $$
- ry(theta)
- Description: Rotates the qubit around the Y-axis by an angle θ.
- Matrix:
$$ RY(\theta) = \begin{bmatrix} \cos(\theta/2) & -\sin(\theta/2) \ \sin(\theta/2) & \cos(\theta/2) \end{bmatrix} $$
- sx()
- Description: Square-root of the Pauli-X gate.
- Matrix:
$$ SX = \frac{1}{2}\begin{bmatrix} 1+i & 1-i \ 1-i & 1+i \end{bmatrix} $$
- sxdg()
- Description: Conjugate transpose of the SX gate.
- Matrix:
$$ SX^\dagger = \frac{1}{2}\begin{bmatrix} 1-i & 1+i \ 1+i & 1-i \end{bmatrix} $$
- cnot()
- Description: Controlled-NOT gate flips the second qubit if the first is ∣1⟩.
- Matrix:
$$ CNOT = \begin{bmatrix} 1 & 0 & 0 & 0 \ 0 & 1 & 0 & 0 \ 0 & 0 & 0 & 1 \ 0 & 0 & 1 & 0 \end{bmatrix} $$
- cz()
- Description: Controlled-Z gate applies a phase flip to the second qubit if the first is ∣1⟩.
- Matrix:
$$ CZ = \begin{bmatrix} 1 & 0 & 0 & 0 \ 0 & 1 & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & -1 \end{bmatrix} $$
- toffoli()
- Description: Toffoli gate flips the target qubit if both control qubits are ∣1⟩.
- Matrix:
$$ Toffoli = \begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \end{bmatrix} $$
- swap()
- Description: SWAP gate exchanges the states of two qubits.
- Matrix:
$$ SWAP = \begin{bmatrix} 1 & 0 & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 1 & 0 & 0 \ 0 & 0 & 0 & 1 \end{bmatrix} $$
- U()
- Description: The u gate is a general single-qubit gate with three parameters (θ, ϕ, λ).
- Matrix:
$$ U(\theta,\phi,\lambda) = \begin{bmatrix} \cos(\theta/2) & -e^{i\lambda}\sin(\theta/2) \ e^{i\phi}\sin(\theta/2) & e^{i(\phi+\lambda)}\cos(\theta/2) \end{bmatrix} $$
- r1()
- Description: The r1 gate applies a phase rotation (θ) to a single qubit.
- Matrix:
$$ R_1(\theta) = \begin{bmatrix} 1 & 0 \ 0 & e^{i\theta} \end{bmatrix} $$
- rxx()
- Description: The rxx gate is a two-qubit rotation gate around the X axis.
- Matrix:
$$ RXX(\theta) = \begin{bmatrix} \cos(\theta/2) & 0 & 0 & -i\sin(\theta/2) \ 0 & \cos(\theta/2) & -i\sin(\theta/2) & 0 \ 0 & -i\sin(\theta/2) & \cos(\theta/2) & 0 \ -i\sin(\theta/2) & 0 & 0 & \cos(\theta/2) \end{bmatrix} $$
- rzz()
- Description: The rzz gate applies a two-qubit rotation around the Z axis.
- Matrix:
$$ RZZ(\theta) = \begin{bmatrix} e^{-i\theta/2} & 0 & 0 & 0 \ 0 & e^{i\theta/2} & 0 & 0 \ 0 & 0 & e^{i\theta/2} & 0 \ 0 & 0 & 0 & e^{-i\theta/2} \end{bmatrix} $$
- cr()
- Description: The cr gate is a controlled rotation gate.
- Matrix:
$$ CR(\theta) = \begin{bmatrix} 1 & 0 & 0 & 0 \ 0 & 1 & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & e^{i\theta} \end{bmatrix} $$
visual.py
The circuit_Visualizer class is designed to provide both text-based and graphical representations of a quantum circuit. It supports single-qubit and multi-qubit gates, with intuitive visualizations and detailed output.
Class: Circuit_Visualizer
Attributes
num_qubits (int):- Number of qubits in the quantum circuit.
operations (list of tuples):- List of quantum operations to be visualized.
- Each operation is represented as a tuple:
- gate (function): The gate function.
- qubits (list of int): Qubits on which the gate operates.
- name (str): Name of the gate (used for visualization).
Method: draw_text()
Description
Generates a text-based representation of the quantum circuit with connecting lines between qubits. It supports both single-qubit and multi-qubit gates.
Functionality
- Creates a grid of text-based elements for the circuit.
- Represents:
- Single-qubit gates with the gate name.
- Multi-qubit gates with:
- ‘●’ for the control qubit.
- ‘X’ for the target qubit.
- ‘│’ for vertical connections between control and target.
- Horizontal connections (─) between gates.
- Returns a formatted string showing the circuit for all qubits.
Method: draw_matplotlib()
Description
Generates a Matplotlib-based graphical visualization of the quantum circuit.
Functionality
- Creates a plot with:
- Horizontal lines representing qubit wires.
- Shapes for gates:
- Rectangle for single-qubit gates.
- Circle for control points.
- Smaller Circle for target points in multi-qubit gates.
- Vertical lines connecting control and target qubits for multi-qubit gates.
- Uses text annotations for gate names and markers.
- Configures axis labels:
- q0, q1, ... for qubit identifiers.
- Hides the x-axis labels for cleaner visualization.
Graphical Elements
- Single-qubit gates: Represented as rectangles with the gate name inside.
- Multi-qubit gates:
- Control qubit: Red circle (+ in the center).
- Target qubit: Blue dot.
- Connection: Vertical black line between control and target.
gpu_calculator.py
Overview
The GpuCalculator class implements a GPU-accelerated quantum state vector simulator using CuPy. This implementation provides the same quantum computation capabilities as BaseCalculator but leverages GPU acceleration for improved performance on large quantum systems.
Class Structure
Constructor
Initializes a new GPU-accelerated quantum calculator instance.
Parameters:
qubits(int): Number of qubits in the quantum systemprep(str, optional): State preparation method. Defaults to "z"
Attributes
qubits: Number of qubits in the systemprep: State preparation methodstate: Current state vector of the quantum system (stored on GPU memory)
Methods
initialize_state()
Initializes the quantum state vector to |0...0⟩ state on the GPU.
- Returns:
- cupy.ndarray: Initial state vector with dimensions $$2^{\text{n}}$$ where n is the number of qubits
gate_apply(gate, target)
Applies a quantum gate to specified target qubits using GPU acceleration.
- Parameters:
gate(cupy.ndarray): Gate matrix to applytarget(list[int]): List of target qubit indices
_create_full_gate(gate, target)
Creates an expanded gate matrix on the GPU that acts on the entire quantum system.
- Parameters:
gate(cupy.ndarray): Original gate matrixtarget(list[int]): Target qubit indices
- Returns:
- cupy.ndarray: Expanded gate matrix
measure_state()
Calculates measurement probabilities and transfers results back to CPU memory.
- Returns:
- numpy.ndarray: Array of measurement probabilities for each basis state
base_calculator.py
Overview
The BaseCalculator class implements a quantum state vector simulator for quantum computations. It provides fundamental operations for initializing quantum states, applying quantum gates, and measuring quantum states. This class serves as a base implementation of the CalculatorInterface.
Class Structure
Constructor
Initializes a new quantum calculator instance.
Parameters:
num_qubits(int): Number of qubits in the quantum systemprep(str, optional): State preparation method. Defaults to "z"
Attributes
num_qubits: Number of qubits in the systemregister: QuantumRegister instance managing the qubitsprep: State preparation methodstate: Current state vector of the quantum system
Methods
initialize_state()
Initializes the quantum state vector to |0...0⟩ state.
- Returns:
- numpy.ndarray: Initial state vector with dimensions $$2^{\text{n}}$$ where n is the number of qubits
gate_apply(gate, target)
Applies a quantum gate to specified target qubits.
- Parameters:
gate(numpy.ndarray): Gate matrix to applytarget(list[int]): List of target qubit indices
- Raises:
ValueError: If target qubits are out of range or dimensions mismatch
_create_full_gate(gate, target)
Creates an expanded gate matrix that acts on the entire quantum system.
- Parameters:
gate(numpy.ndarray): Original gate matrixtarget(list[int]): Target qubit indices
- Returns:
- numpy.ndarray: Expanded gate matrix
measure_state()
Calculates measurement probabilities for the current quantum state.
- Returns:
- numpy.ndarray: Array of measurement probabilities for each basis state
Usage Example
# Create a 2-qubit calculator
calc = BaseCalculator(num_qubits=2)
# Define a single-qubit gate (e.g., Hadamard gate)
H = np.array([[1, 1], [1, -1]]) / np.sqrt(2)
# Apply gate to first qubit
calc.gate_apply(H, [0])
# Get measurement probabilities
probabilities = calc.measure_state()
calculator_interface.py
Overview
The CalculatorInterface defines the contract for quantum calculator implementations, supporting both CPU and GPU-based quantum state calculations. This interface ensures consistent behavior across different implementations while allowing flexibility in the underlying computation method.
Interface Definition
Constructor
Creates a new quantum calculator instance.
Parameters:
qubits(int): Number of qubits in the quantum systemprep(str, optional): State preparation method. Defaults to "z"use_gpu(bool, optional): Flag to enable GPU computation. Defaults to False
Methods
initialize_state()
Initializes the quantum state vector in the computational basis.
- Returns:
- numpy.ndarray: The initialized quantum state vector
- Contract Requirements:
- Must return a normalized state vector
- Vector dimension must be $$2^{\text{n}}$$ where n is the number of qubits
- Must use complex128 data type for numerical precision
- For prep="z", must initialize to |0...0⟩ state
gate_apply(gate, target)
Applies a quantum gate to specified target qubits.
- Parameters:
gate(numpy.ndarray): Gate matrix to applytarget(List[int]): List of target qubit indices
- Contract Requirements:
- Must preserve state vector normalization
- Must handle multi-qubit gates correctly
- Must validate target qubit indices
- Must maintain quantum state coherence
Implementation Guidelines
State Vector Requirements
-
Dimensionality
- State vector must have $$2^{\text{n}}$$ elements for n qubits
- Must be represented as complex numbers
-
Normalization
- State vector must remain normalized after all operations
- Implementations should enforce ||ψ|| = 1
-
Numerical Precision
- Must use complex128 (or equivalent) data type
- Should maintain numerical stability in operations
Gate Operation Requirements
-
Matrix Properties
- Gates must be unitary matrices
- Dimensions must match number of target qubits
- Multi-qubit gates must be handled correctly
-
Target Validation
- Must verify target qubit indices are valid
- Must handle multiple target qubits correctly
GPU Support Requirements
-
Memory Management
- Must handle GPU memory allocation when use_gpu=True
- Must manage CPU-GPU memory transfers efficiently
-
Computation Location
- Must respect use_gpu flag for computation location
- Must ensure consistent results between CPU and GPU
Calculator.py
Overview
The Quantum Calculator CLI is an interactive command-line tool for performing quantum operations on a quantum register. It supports various quantum gates, including single-qubit gates, two-qubit gates, and controlled operations.
Getting Started
When you run the calculator, it will first prompt you for the number of qubits in your quantum register. The register is initialized in the |0...0⟩ state.
Available Operations
Single-Qubit Gates
For these operations, you'll be prompted for a qubit index.
| Operation | Description | Parameters |
|---|---|---|
identity |
Identity gate (I) | qubit index |
h |
Hadamard gate | qubit index |
paulix |
Pauli-X gate (NOT) | qubit index |
pauliy |
Pauli-Y gate | qubit index |
pauliz |
Pauli-Z gate | qubit index |
s |
S gate (√Z) | qubit index |
sdg |
S-dagger gate | qubit index |
t |
T gate (√S) | qubit index |
tdg |
T-dagger gate | qubit index |
sx |
√X gate | qubit index |
sxdg |
√X-dagger gate | qubit index |
Rotation Gates
These gates require both a qubit index and an angle parameter.
| Operation | Description | Parameters |
|---|---|---|
rx |
X-axis rotation | qubit index, angle |
ry |
Y-axis rotation | qubit index, angle |
rz |
Z-axis rotation | qubit index, angle |
r1 |
Phase rotation | qubit index, angle |
phase |
Phase gate | qubit index, angle |
Two-Qubit Gates
These operations require control and target qubit indices.
| Operation | Description | Parameters |
|---|---|---|
cnot |
Controlled-NOT | control qubit, target qubit |
cz |
Controlled-Z | control qubit, target qubit |
cr |
Controlled-R | control qubit, target qubit, angle |
rxx |
XX-rotation | qubit1, qubit2, angle |
rzz |
ZZ-rotation | qubit1, qubit2, angle |
Other Operations
| Operation | Description | Parameters |
|---|---|---|
swap |
SWAP gate | qubit1 index, qubit2 index |
toffoli |
Toffoli gate | control1, control2, target |
print |
Print state vector | none |
Angle Expressions
Angles can be specified using:
- Decimal numbers (e.g.,
1.5707) - Pi expressions (e.g.,
pi/2,pi/4,-pi) - Basic arithmetic (e.g.,
pi/2 + 0.5)
State Vector
The quantum state is stored as a multi-dimensional numpy array with shape (2,)*n for n qubits. The print operation will flatten and display the state vector.
State Representation
- Uses NumPy arrays with shape (2,)*n for n qubits
- Complex amplitudes stored as complex128 type
- State vector normalized after operations
Example Usage
Creating a Bell State:
Enter the number of qubits: 2
Enter the operation name: h
Enter the qubit index: 0
Enter the operation name: cnot
Enter the control qubit index: 0
Enter the target qubit index: 1
Enter the operation name: print
Final State Vector:
[0.70710678+0.j 0.00000000+0.j 0.00000000+0.j 0.70710678+0.j]
quantum_circuit.py
Overview
QuantumCircuit is a high-level class for building and executing quantum circuits. It provides an interface for adding quantum gates, executing circuits, measuring results, and visualizing quantum circuits using both text and graphical representations.
Class Initialization
Parameters:
num_qubits(int): Number of qubits in the circuitprep(str, optional): State preparation basis ('x', 'y', or 'z'). Defaults to 'z'gpu(bool, optional): Enable GPU acceleration. Defaults to False
Initialization Process:
- Validates qubit preparation basis
- Checks GPU availability if requested
- Creates appropriate calculator (GPU or CPU-based)
- Initializes circuit visualizer
- Sets up circuit information tracking
Methods
add_gate(gate, qubits, name)
Adds a quantum gate to the circuit.
- Parameters:
gate(np.ndarray): Matrix representation of the quantum gatequbits(list[int]): Target qubit indicesname(str): Gate name for visualization
execute()
Executes the quantum circuit by:
- Applying gates sequentially
- Synchronizing with quantum register
- Providing debug output
measure()
Performs measurement on the final state.
- Returns:
- Probability distribution of possible outcomes
draw_circuit(method)
Visualizes the quantum circuit.
- Parameters:
method(str): Visualization type- "text": ASCII art representation
- "matplotlib": Graphical visualization
Circuit Management Methods
clear()
Removes all operations from the circuit.
dump_circuit()
- Returns:
- List of circuit operations:
[(gate, qubits, name), ...]
- List of circuit operations:
get_info()
- Returns:
- Dictionary containing:
- Number of qubits
- Operation list
- State preparation basis
- GPU usage status
- Dictionary containing:
Usage Examples
Basic Circuit Creation
# Create a 2-qubit circuit
circuit = QuantumCircuit(num_qubits=2)
# Add Hadamard gate to first qubit
circuit.add_gate(hadamard(), [0], "H")
# Add CNOT gate
circuit.add_gate(cnot(), [0, 1], "CNOT")
# Execute circuit
circuit.execute()
# Measure results
probabilities = circuit.measure()
Circuit Visualization
# Text visualization
circuit.draw_circuit(method="text")
# Graphical visualization
circuit.draw_circuit(method="matplotlib")
GPU Acceleration
# Create GPU-accelerated circuit
circuit = QuantumCircuit(num_qubits=3, gpu=True)
Implementation Details GPU Support
- Automatically checks for NVIDIA CUDA toolkit
- Falls back to CPU if GPU is unavailable
- Uses CuPy for GPU-accelerated calculations
State Management
- Maintains synchronization between:
- Circuit operations
- Quantum register state
- Calculator state
Visualization
- Text mode: ASCII representation
- Matplotlib mode: Professional circuit diagrams
- Shows gate sequence and qubit connections
quantum_register.py
The QuantumRegister class provides a framework for managing and simulating a quantum register, which is a collection of qubits. It allows for the initialization, manipulation, and retrieval of the quantum state.
Class: QuantumRegister
Attributes
- num_qubits (int):
- The number of qubits in the quantum register.
- state (numpy array):
- A complex-valued NumPy array representing the quantum state of the register.
- Initialized to the $$\vert 0 \rangle ^{\otimes n}$$ state, where n is the number of qubits.
- qubits (list of Qubits):
- A list of Qubits objects, each representing an individual qubit in the register.
Methods
__init__(self, num_qubits: int)
- Description: Initializes the quantum register with the specified number of qubits.
- Parameters:
- num_qubits (int): The number of qubits in the quantum register.
- Behavior:
- Creates a quantum state vector of size $$2^{\text{numqubits}}$$ initialized to [1, 0, 0, …,0], representing the $$\vert 0 \rangle ^{\otimes n}$$ state.
- Initializes a list of Qubits objects for individual qubit representation.
get_state(self) -> numpy array
- Description: Retrieves the current quantum state of the register.
- Returns:
- (numpy array): The quantum state vector.
reset(self)
- Description: Resets the quantum register to the initial $$\vert 0 \rangle ^{\otimes n}$$ state.
- Behavior:
- Sets the quantum state vector to [1, 0, 0, …,0] representing the $$\vert 0 \rangle ^{\otimes n}$$ state.
qubit.py
The Qubits class represents the fundamental unit of quantum information, analogous to a classical bit. It provides methods for initializing, representing, and retrieving the quantum state of a qubit.
Class: Qubits
Attributes
- index (int):
- The index of the qubit in a quantum register or system.
- state (numpy array):
- The state vector of the qubit initialized based on the specified orientation.
Methods
__init__(self, index: int, state: str = "z")
- Description: Initializes a qubit with the specified index and orientation (state).
- Parameters:
- index (int): The index of the qubit in the system.
- state (str): The initial orientation of the qubit. Must be one of:
- "z": Initializes to the ∣0⟩ state.
- "x": Initializes to the $$|+\rangle = \frac{1}{\sqrt{2}} (|0\rangle + |1\rangle)$$ state.
- "y": Initializes to the $$|i\rangle = \frac{1}{\sqrt{2}} (|0\rangle + i|1\rangle)$$ state.
- Default: "z".
initial_state(self, state: str = "z") -> NDArray
- Description: Creates and returns the state vector for the specified initial orientation of the qubit.
- Parameters:
- state (str): The initial orientation of the qubit. Must be one of "z", "x", or "y".
- Returns:
- NDArray: A 2×1 NumPy array representing the qubit's state vector.
- Raises:
- ValueError: If the provided state is not one of "z", "x", or "y".
get_state(self) -> NDArray
- Description: Retrieves the current state vector of the qubit.
- Returns:
- NDArray: The 2×1 NumPy array representing the qubit's state vector.
quantum_state.py
The QuantumState class provides a representation of a quantum system's state vector. It includes methods for initializing, manipulating, and measuring the quantum state, making it a fundamental component for simulating quantum computations.
Class: QuantumState
Attributes
- num_qubits (int):
- The number of qubits in the quantum system.
- Determines the dimension of the quantum state vector ($$2^{\text{numqubits}}$$).
- state (numpy array):
- A complex-valued NumPy array representing the quantum state vector.
- Initialized to the $$\vert 0 \rangle ^{\otimes n}$$ state, where n is the number of qubits.
Methods
__init__(self, num_qubits: int)
- Description: Initializes the quantum state with the specified number of qubits.
- Parameters:
- num_qubits (int): The number of qubits in the quantum system.
- Behavior:
- Creates a quantum state vector of size $$2^{\text{numqubits}}$$.
- Initializes the state to $$\vert 0 \rangle ^{\otimes n}$$.
apply_unitary(self, unitary: np.ndarray)
- Description: Applies a unitary transformation (quantum gate) to the quantum state.
- Parameters:
- unitary (numpy array): A $$2^n * 2^n$$ matrix representing the unitary operation.
- Behavior:
- Validates that the unitary matrix dimensions match the quantum state vector ($$2^n * 2^n$$).
- Updates the state vector by performing the matrix-vector multiplication: state = U⋅ state, where U is the unitary matrix.
- Raises:
- ValueError: If the dimensions of the unitary matrix do not match $$2^n * 2^n$$.
get_state(self) -> np.ndarray
- Description: Retrieves the current quantum state vector.
- Returns:
- np.ndarray: The quantum state vector.
measure(self) -> str
- Description: Simulates a measurement of the quantum state, collapsing it to one basis state.
- Returns:
- str: The measured basis state as a binary string.
- Behavior:
- Uses the measure function from the tools module to determine the measurement outcome based on the probability distribution of the state vector.
measure.py
The measure function simulates a quantum measurement on a quantum state or circuit.
Purpose:
This function performs a quantum measurement that collapses a quantum state according to quantum mechanics' measurement postulates.
Parameters:
quantumstate: Either a numpy array representing a quantum state vector, or a QuantumCircuit object- If numpy array: Direct state vector
- If QuantumCircuit: The current state of the circuit will be measured
Returns:
- A string representing the measured basis state in binary notation
- Example: "00" for |00⟩, "01" for |01⟩, etc.
- The string length matches the number of qubits
Process:
- Converts input to state vector if needed using
convert_state - Calculates number of qubits using log base 2 of state vector size
- Computes measurement probabilities from state amplitudes
- Randomly selects an outcome based on these probabilities
- Converts the outcome to binary representation
probability.py
Overview
The probability function calculates measurement probabilities from a quantum state vector or quantum circuit. It supports various output formats and can focus on specific quantum states.
Parameters
quantumstate
- Type:
Union[ndarray, QuantumCircuit] - Description: The quantum state to analyze
- Accepted Formats:
- NumPy array containing state vector
- QuantumCircuit object
- Requirements:
- Must be normalized (sum of probability amplitudes squared ≈ 1)
- Size must be power of 2 ($$2^{\text{n}}$$ for n qubits)
round
- Type:
intorNone - Default:
None - Description: Number of decimal places to round probabilities to
- Special Cases:
None: No rounding applied- Negative values: Returns
None
show_percent
- Type:
bool - Default:
False - Description: Controls probability format
- Values:
False: Probabilities as decimals [0,1]True: Probabilities as percentages [0,100]
show_bit
- Type:
int - Default:
-1 - Description: Selects specific quantum state to analyze
- Values:
-1: Show all probabilities≥ 0: Show probability for specific basis state≥ $$2^{\text{n}}$$: ReturnsNone(n = number of qubits)
Return Value
Type
NDArray: NumPy array of probabilitiesNone: If validation fails
Format
- Array of probabilities for each basis state
- Single probability value if show_bit ≥ 0
- Values rounded if round parameter specified
Validation Checks
The function performs several validations:
-
Normalization
- Verifies sum of probabilities ≈ 1.0
- Tolerance: 1e-6
- Returns
Noneif check fails
-
State Index
- Verifies show_bit < $$2^{\text{n}}$$
- Returns
Noneif invalid
-
Rounding Parameter
- Verifies round ≥ 0
- Returns
Noneif negative
Mathematical Details
-
Probability Calculation
- Takes absolute value of squared amplitudes
- Converts complex amplitudes to real probabilities
-
Percentage Conversion
- Scales values to [0,100] range when show_percent=True
Simulator.py
The Simulator class is a foundational structure for simulating quantum computations. It provides a framework to manage and manipulate the state vector of a quantum system, representing the evolution of quantum states during computation.
Class: Simulator
Attributes
- state_vector (None or numpy array):
- Represents the quantum state vector of the system.
- Initially set to None and is updated as the simulator is used to initialize and manipulate quantum states.
Methods
__init__(self)
- Description: Initializes the simulator instance with an uninitialized state vector.
- Behavior:
- Sets the state_vector attribute to None.
- Acts as a placeholder for later initialization and manipulation of the quantum state.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file quantune-0.0.4.tar.gz.
File metadata
- Download URL: quantune-0.0.4.tar.gz
- Upload date:
- Size: 43.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1cdfaecb7b39963b317d0f9a1a6b7f86b7ea01b46b6a7522307235ef3f28b5ba
|
|
| MD5 |
23a15ba2ea987a5c8693fe58667ad426
|
|
| BLAKE2b-256 |
2982c9a7b2c89d258a0d6885980dc31a0ac0766948c654e62c04edb098a0eaf6
|
File details
Details for the file quantune-0.0.4-py3-none-any.whl.
File metadata
- Download URL: quantune-0.0.4-py3-none-any.whl
- Upload date:
- Size: 36.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e74d4ebb9cab9f72189f0473db1cfe5a02b105256ed143811060a7a3f6a41b9
|
|
| MD5 |
470704632a4576de522a407d42f0f801
|
|
| BLAKE2b-256 |
a039a047572a96db2a706c679becee61a1fa82e025b65168e826aef38765592d
|