Skip to content

seba2390/SYMQcircuit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SYMQcircuit

An implementation of a gate based quantum state vector simulator. Utilizes Scipy sparse matrix structure1 to improve memory consumption and computation time.

Currently Implemented Gates:

1 qubit gates:

  • Pauli X, Pauli Y, Pauli Z
  • RX, RY, RX
  • T, S, P-phase & Hadamard
  • U (Generic single-qubit rotation gate with 3 Euler angles).

2 qubit gates:

  • CX (CNOT), CY, CZ (Controlled Pauli gates)
  • SWAP
  • RXX, RYY, RZZ
  • CRX, CRY, CRZ (Controlled rotations)

Example:

from qiskit.visualization import plot_histogram
from src.SYMQCircuit import *

# Defining number of qubits in circuit
_N_QUBITS_ = 3

# Creating instance of circuit
my_circuit = SYMQCircuit(nr_qubits=_N_QUBITS_)

# Adding H to all qubits in circuit
for q in range(_N_QUBITS_):
    my_circuit.add_h(target_qubit=q)

# Adding miscellaneous gates to circuit 
my_circuit.add_cnot(target_qubit=2, control_qubit=0)
my_circuit.add_rz(target_qubit=1, angle=np.pi / 2)
my_circuit.add_cry(target_qubit=2, control_qubit=1, angle=np.pi / 7)

# Retrieving state vector
state_vector = my_circuit.get_state_vector()

# Or just get probability distribution 
probs = my_circuit.get_state_probabilities()

# Plotting the probability distribution
plot_histogram(probs)

N.B. the '+' operator is overloaded for the class, so that circuit1 + circuit2 corresponds to simply extending circuit1 by circuit2:

Overloaded '+':

_N_QUBITS_ = 10

## Creates circuits individually 
circuit1 = SYMQCircuit(nr_qubits=_N_QUBITS_,precision=64)
circuit1.add_cnot(target_qubit=2,control_qubit=4)
circuit1.add_rx(target_qubit=9,angle=9.32)

circuit2 = SYMQCircuit(nr_qubits=_N_QUBITS_,precision=64)
circuit2.add_x(1)
circuit2.add_h(2)

## Composes circuits by operator overloading + 
circuit3 = circuit1+circuit2

## The circuit that corresponds to the above 
circuit4 = SYMQCircuit(nr_qubits=_N_QUBITS_,precision=64)
circuit4.add_cnot(target_qubit=2,control_qubit=4)
circuit4.add_rx(target_qubit=9,angle=9.32)
circuit4.add_x(1)
circuit4.add_h(2)

Installation

MacOS/Unix:

env2/bin/python -m pip install -r requirements.txt

Windows:

env2\bin\python -m pip install -r requirements.txt

N.B. See pip 'freeze' documentation for detailed explanation.

Footnotes

  1. Sparse scipy matrices (scipy.sparse)

About

My own implementation of a state vector circuit w. gates

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published