Skip to content

Commit d0873f4

Browse files
committed
trying out qiskit and pennylane
1 parent 31bd247 commit d0873f4

File tree

2 files changed

+60
-36
lines changed

2 files changed

+60
-36
lines changed

doc/src/week10/programs/plqft.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import pennylane as qml
2+
from pennylane import numpy as np
3+
4+
# Define the number of qubits
5+
n_qubits = 3
6+
7+
# Create a device using default.qubit
8+
dev = qml.device("default.qubit", wires=n_qubits)
9+
10+
# Define the Quantum Fourier Transform as a Quantum Function
11+
@qml.qnode(dev)
12+
def qft_circuit():
13+
for j in range(n_qubits):
14+
# Apply the Hadamard gate to the j-th qubit
15+
qml.Hadamard(wires=j)
16+
# Apply controlled phase shifts
17+
for k in range(j + 1, n_qubits):
18+
qml.ControlledPhaseShift(np.pi / 2 ** (k - j), wires=[k, j])
19+
20+
# PennyLane natively returns the state, but if you want measurement in computational basis:
21+
return qml.probs(wires=range(n_qubits))
22+
23+
# Execute the QFT circuit
24+
probabilities = qft_circuit()
25+
26+
# Print the resulting state probabilities
27+
print("Probabilities after performing QFT:")
28+
print(probabilities)

doc/src/week10/programs/qft.py

Lines changed: 32 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,38 @@
1-
import matplotlib.pyplot as plt
21
import numpy as np
3-
from math import pi
4-
from qiskit import *
5-
from qiskit.circuit import QuantumCircuit, ParameterVector
6-
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
7-
from qiskit.tools.visualization import circuit_drawer
8-
9-
q = QuantumRegister(4)
10-
qc = QuantumCircuit(q)
11-
#-------------------
12-
qc.h(0)
13-
qc.cu1(pi/2,q[1],q[0])
14-
qc.cu1(pi/4,q[2],q[0])
15-
qc.cu1(pi/8,q[3],q[0])
16-
#-------------------
17-
qc.barrier()
18-
qc.h(1)
19-
qc.cu1(pi/2,q[2],q[1])
20-
qc.cu1(pi/4,q[3],q[1])
21-
#-------------------
22-
qc.barrier()
23-
qc.h(2)
24-
qc.cu1(pi/2,q[3],q[2])
25-
#-------------------
26-
qc.barrier()
27-
qc.h(3)
28-
#-------------------
29-
qc.draw(output='mpl')
30-
31-
# Import Aer
32-
from qiskit import Aer
33-
34-
# Run the quantum circuit on a statevector simulator backend
2+
from qiskit import QuantumCircuit, Aer, execute
3+
4+
def qft(circuit, n):
5+
"""Apply the Quantum Fourier Transform to the first n qubits in the circuit."""
6+
# Apply Hadamard gates and controlled rotations
7+
for j in range(n):
8+
circuit.h(j)
9+
for k in range(j + 1, n):
10+
circuit.cp(np.pi / 2**(k - j), k, j)
11+
12+
# Swap the qubits to reverse their order
13+
for i in range(n // 2):
14+
circuit.swap(i, n - i - 1)
15+
16+
# Number of qubits
17+
n = 4
18+
19+
# Create a quantum circuit with n qubits
20+
qc = QuantumCircuit(n)
21+
22+
# Apply QFT to the quantum circuit
23+
qft(qc, n)
24+
25+
# Draw the resulting circuit
26+
print("Quantum Circuit for QFT:")
27+
print(qc.draw(output='text'))
28+
29+
# Run the quantum circuit on a statevector simulator backend
3530
backend = Aer.get_backend('statevector_simulator')
3631

37-
# Create a Quantum Program for execution
32+
# Execute the quantum circuit and get results
3833
job = execute(qc, backend)
3934
result = job.result()
4035

41-
outputstate = result.get_statevector(qc, decimals=3)
42-
print(outputstate)
36+
output_state_vector = result.get_statevector()
37+
print("\nOutput State Vector:")
38+
print(output_state_vector)

0 commit comments

Comments
 (0)