File tree Expand file tree Collapse file tree 6 files changed +159
-0
lines changed Expand file tree Collapse file tree 6 files changed +159
-0
lines changed Original file line number Diff line number Diff line change @@ -2064,3 +2064,9 @@ for label in labels:
2064
2064
2065
2065
2066
2066
2067
+ !split
2068
+ ===== Corresponding Qiskit implementations =====
2069
+
2070
+ !bc pycod
2071
+
2072
+ !ec
Original file line number Diff line number Diff line change
1
+ from qiskit import QuantumCircuit , Aer , execute
2
+
3
+ class Circuit :
4
+ def __init__ (self , num_qubits ):
5
+ self .num_qubits = num_qubits
6
+ self .qc = QuantumCircuit (num_qubits )
7
+
8
+ def add_gate (self , gate_func ):
9
+ gate_func (self .qc )
10
+
11
+ def add_measure_all (self ):
12
+ self .qc .measure_all ()
13
+
14
+ def run_statevector (self ):
15
+ backend = Aer .get_backend ('statevector_simulator' )
16
+ job = execute (self .qc , backend )
17
+ result = job .result ()
18
+ statevector = result .get_statevector ()
19
+ return statevector
20
+
21
+ def run_measurement (self , shots = 1024 ):
22
+ backend = Aer .get_backend ('qasm_simulator' )
23
+ job = execute (self .qc , backend , shots = shots )
24
+ result = job .result ()
25
+ counts = result .get_counts ()
26
+ return counts
Original file line number Diff line number Diff line change
1
+ from qiskit import QuantumCircuit
2
+ import numpy as np
3
+
4
+ class Gates :
5
+ """Wrapper class for basic gates"""
6
+
7
+ @staticmethod
8
+ def I (qc , qubit ):
9
+ qc .id (qubit )
10
+
11
+ @staticmethod
12
+ def X (qc , qubit ):
13
+ qc .x (qubit )
14
+
15
+ @staticmethod
16
+ def Y (qc , qubit ):
17
+ qc .y (qubit )
18
+
19
+ @staticmethod
20
+ def Z (qc , qubit ):
21
+ qc .z (qubit )
22
+ @staticmethod
23
+ def H (qc , qubit ):
24
+ qc .h (qubit )
25
+
26
+ @staticmethod
27
+ def S (qc , qubit ):
28
+ qc .s (qubit )
29
+
30
+ @staticmethod
31
+ def T (qc , qubit ):
32
+ qc .t (qubit )
33
+
34
+ @staticmethod
35
+ def RX (qc , qubit , theta ):
36
+ qc .rx (theta , qubit )
37
+
38
+ @staticmethod
39
+ def RY (qc , qubit , theta ):
40
+ qc .ry (theta , qubit )
41
+
42
+ @staticmethod
43
+ def RZ (qc , qubit , theta ):
44
+ qc .rz (theta , qubit )
45
+
46
+ @staticmethod
47
+ def CNOT (qc , control , target ):
48
+ qc .cx (control , target )
49
+
50
+ @staticmethod
51
+ def CZ (qc , control , target ):
52
+ qc .cz (control , target )
53
+
54
+ @staticmethod
55
+ def SWAP (qc , qubit1 , qubit2 ):
56
+ qc .swap (qubit1 , qubit2 )
Original file line number Diff line number Diff line change
1
+ from states .bell_states import bell_state
2
+ import matplotlib .pyplot as plt
3
+ from qiskit .visualization import plot_histogram
4
+
5
+ labels = ["Phi+" , "Phi-" , "Psi+" , "Psi-" ]
6
+ shots = 1000
7
+
8
+ for label in labels :
9
+ print (f"\n Bell state { label } " )
10
+ c = bell_state (label )
11
+
12
+ # Run statevector simulation
13
+ state = c .run_statevector ()
14
+ print ("Statevector:" , state )
15
+
16
+ # Run measurements
17
+ c .add_measure_all ()
18
+ counts = c .run_measurement (shots = shots )
19
+ print ("Measurement counts:" , counts )
20
+
21
+ # Plot histogram
22
+ plot_histogram (counts , title = f"Bell state { label } " )
23
+ plt .show ()
Original file line number Diff line number Diff line change
1
+
2
+ # Modular Quantum Simulator (Qiskit Version)
3
+
4
+ This is a fully modular quantum simulator package implemented with Qiskit.
5
+
6
+ ## Modules
7
+
8
+ - ` core/gates.py ` — gate factory (wrapper around Qiskit gates)
9
+ - ` core/circuit.py ` — modular circuit builder
10
+ - ` states/bell_states.py ` — Bell state generators
11
+ - ` examples/bell_test.py ` — Bell state experiment
12
+
13
+ ## Features
14
+
15
+ - Fully based on Qiskit's QuantumCircuit
16
+ - Supports any number of qubits
17
+ - Native statevector simulation and measurement
18
+ - Measurement histograms
19
+ - Mirrors NumPy version structure for easy comparison
20
+
21
+ ## Dependencies
22
+
23
+ - Qiskit
24
+ - Matplotlib
Original file line number Diff line number Diff line change
1
+ from core .circuit import Circuit
2
+ from core .gates import Gates
3
+
4
+ def bell_state (label = "Phi+" ):
5
+ c = Circuit (2 )
6
+
7
+ # Create standard Bell basis preparation
8
+ Gates .H (c .qc , 0 )
9
+ Gates .CNOT (c .qc , 0 , 1 )
10
+
11
+ # Apply additional gates depending on label
12
+ if label == "Phi+" :
13
+ pass
14
+ elif label == "Phi-" :
15
+ Gates .Z (c .qc , 0 )
16
+ elif label == "Psi+" :
17
+ Gates .X (c .qc , 1 )
18
+ elif label == "Psi-" :
19
+ Gates .X (c .qc , 1 )
20
+ Gates .Z (c .qc , 0 )
21
+ else :
22
+ raise ValueError ("Unknown Bell state" )
23
+
24
+ return c
You can’t perform that action at this time.
0 commit comments