Skip to content

Commit 7d958fc

Browse files
committed
Fixed the examples
1 parent 1c71688 commit 7d958fc

File tree

8 files changed

+171
-33
lines changed

8 files changed

+171
-33
lines changed

examples/module1_fundamentals/02_quantum_gates_circuits.py

Lines changed: 82 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -137,27 +137,59 @@ def visualize_gate_effects(single_qubit_circuits):
137137
print("=== GATE EFFECTS VISUALIZATION ===")
138138
print()
139139

140-
# Create Bloch sphere plots
141-
n_gates = len(single_qubit_circuits)
142-
fig, axes = plt.subplots(1, n_gates, figsize=(3*n_gates, 3))
143-
if n_gates == 1:
144-
axes = [axes]
145-
140+
# Create individual Bloch sphere plots for each gate
146141
for i, (gate_name, circuit) in enumerate(single_qubit_circuits.items()):
147142
state = Statevector.from_instruction(circuit)
148143

149-
ax = axes[i]
150-
# plot_bloch_multivector no longer accepts ax parameter in Qiskit 2.x
144+
print(f"{gate_name}:")
145+
print(f" State vector: {state}")
146+
print(f" Probabilities: |0⟩: {abs(state[0])**2:.3f}, |1⟩: {abs(state[1])**2:.3f}")
147+
148+
# Create individual Bloch sphere plots
151149
try:
152-
bloch_fig = plot_bloch_multivector(state, title="Qubit State")
153-
# Save individual figure instead of using subplot
150+
bloch_fig = plot_bloch_multivector(state, title=f"{gate_name} - Qubit State")
151+
plt.savefig(f'module1_02_bloch_{i+1}.png', dpi=300, bbox_inches='tight')
152+
plt.show()
154153
except Exception as e:
155-
print(f"⚠️ Could not create Bloch sphere: {e}")
156-
ax.set_title(gate_name, fontsize=10, pad=10)
154+
print(f"⚠️ Could not create Bloch sphere for {gate_name}: {e}")
155+
# Provide alternative visualization information
156+
print(f" Alternative: State components - α=({state[0].real:.3f}+{state[0].imag:.3f}i), β=({state[1].real:.3f}+{state[1].imag:.3f}i)")
157+
158+
print()
157159

158-
plt.tight_layout()
159-
plt.savefig('module1_02_gate_effects.png', dpi=300, bbox_inches='tight')
160-
plt.show()
160+
# Create a summary visualization with state information
161+
try:
162+
fig, ax = plt.subplots(1, 1, figsize=(12, 8))
163+
164+
gate_names = list(single_qubit_circuits.keys())
165+
prob_0 = []
166+
prob_1 = []
167+
168+
for gate_name, circuit in single_qubit_circuits.items():
169+
state = Statevector.from_instruction(circuit)
170+
prob_0.append(abs(state[0])**2)
171+
prob_1.append(abs(state[1])**2)
172+
173+
x = range(len(gate_names))
174+
width = 0.35
175+
176+
ax.bar([i - width/2 for i in x], prob_0, width, label='|0⟩ probability', alpha=0.8)
177+
ax.bar([i + width/2 for i in x], prob_1, width, label='|1⟩ probability', alpha=0.8)
178+
179+
ax.set_xlabel('Quantum Gates')
180+
ax.set_ylabel('Probability')
181+
ax.set_title('Gate Effects: Measurement Probabilities')
182+
ax.set_xticks(x)
183+
ax.set_xticklabels(gate_names, rotation=45, ha='right')
184+
ax.legend()
185+
ax.grid(True, alpha=0.3)
186+
187+
plt.tight_layout()
188+
plt.savefig('module1_02_gate_effects.png', dpi=300, bbox_inches='tight')
189+
plt.show()
190+
191+
except Exception as e:
192+
print(f"⚠️ Could not create gate effects summary: {e}")
161193

162194

163195
def create_quantum_circuit_examples():
@@ -193,25 +225,49 @@ def create_quantum_circuit_examples():
193225
qc3.h(0)
194226
circuits['Circuit 3: GHZ preparation'] = qc3
195227

196-
# Display circuit diagrams
197-
fig, axes = plt.subplots(len(circuits), 1, figsize=(12, 3*len(circuits)))
198-
if len(circuits) == 1:
199-
axes = [axes]
200-
228+
# Display circuit information and create diagrams
201229
for i, (name, circuit) in enumerate(circuits.items()):
202230
print(f"{name}:")
203231
print(f" Depth: {circuit.depth()}")
204232
print(f" Gates: {circuit.count_ops()}")
205233

206-
# Draw circuit
207-
circuit_drawer(circuit, output='mpl', ax=axes[i], style={'backgroundcolor': '#EEEEEE'})
208-
axes[i].set_title(f'{name} (Depth: {circuit.depth()})', fontsize=12, pad=20)
234+
# Draw circuit - create individual figures to avoid ax parameter issues
235+
try:
236+
fig = circuit.draw(output='mpl', style={'backgroundcolor': '#EEEEEE'})
237+
fig.suptitle(f'{name} (Depth: {circuit.depth()})', fontsize=12)
238+
# Save individual circuit diagrams
239+
plt.figure(fig.number)
240+
plt.savefig(f'module1_02_circuit_{i+1}.png', dpi=300, bbox_inches='tight')
241+
plt.show()
242+
except Exception as e:
243+
print(f"⚠️ Could not create circuit diagram: {e}")
244+
print(f" Circuit structure: {circuit.data}")
209245

210246
print()
211247

212-
plt.tight_layout()
213-
plt.savefig('module1_02_circuit_examples.png', dpi=300, bbox_inches='tight')
214-
plt.show()
248+
# Create combined figure with all circuits
249+
try:
250+
fig, axes = plt.subplots(len(circuits), 1, figsize=(12, 3*len(circuits)))
251+
if len(circuits) == 1:
252+
axes = [axes]
253+
254+
for i, (name, circuit) in enumerate(circuits.items()):
255+
# Use text representation instead of circuit_drawer with ax parameter
256+
axes[i].text(0.5, 0.5, f'{name}\nDepth: {circuit.depth()}\nGates: {circuit.count_ops()}',
257+
ha='center', va='center', transform=axes[i].transAxes,
258+
fontsize=10, bbox=dict(boxstyle="round,pad=0.3", facecolor="lightgray"))
259+
axes[i].set_xlim(0, 1)
260+
axes[i].set_ylim(0, 1)
261+
axes[i].set_xticks([])
262+
axes[i].set_yticks([])
263+
axes[i].set_title(f'{name} (Depth: {circuit.depth()})', fontsize=12, pad=20)
264+
265+
plt.tight_layout()
266+
plt.savefig('module1_02_circuit_examples.png', dpi=300, bbox_inches='tight')
267+
plt.show()
268+
269+
except Exception as e:
270+
print(f"⚠️ Could not create combined circuit diagram: {e}")
215271

216272
return circuits
217273

examples/module1_fundamentals/07_no_cloning_theorem.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,18 @@
2525
import matplotlib.pyplot as plt
2626
from qiskit import QuantumCircuit, ClassicalRegister, transpile
2727
from qiskit.visualization import plot_bloch_multivector, plot_histogram
28-
from qiskit.quantum_info import Statevector, random_statevector, fidelity
28+
from qiskit.quantum_info import Statevector, random_statevector
29+
# Handle different Qiskit versions for fidelity
30+
try:
31+
from qiskit.quantum_info import fidelity
32+
except ImportError:
33+
# For older Qiskit versions, use state_fidelity
34+
try:
35+
from qiskit.quantum_info import state_fidelity as fidelity
36+
except ImportError:
37+
# Fallback implementation
38+
def fidelity(state1, state2):
39+
return abs(np.vdot(state1.data, state2.data))**2
2940
from qiskit_aer import AerSimulator
3041
import sys
3142
from pathlib import Path

examples/module3_programming/06_quantum_debugging_guide.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,18 @@
2222
import matplotlib.pyplot as plt
2323
from qiskit import QuantumCircuit, ClassicalRegister, transpile
2424
from qiskit.visualization import plot_histogram, plot_bloch_multivector
25-
from qiskit.quantum_info import Statevector, DensityMatrix, fidelity
25+
from qiskit.quantum_info import Statevector, DensityMatrix
26+
# Handle different Qiskit versions for fidelity
27+
try:
28+
from qiskit.quantum_info import fidelity
29+
except ImportError:
30+
# For older Qiskit versions, use state_fidelity
31+
try:
32+
from qiskit.quantum_info import state_fidelity as fidelity
33+
except ImportError:
34+
# Fallback implementation
35+
def fidelity(state1, state2):
36+
return abs(np.vdot(state1.data, state2.data))**2
2637
from qiskit_aer import AerSimulator
2738
import warnings
2839
import sys

examples/module6_machine_learning/03_quantum_neural_networks.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,22 @@
1212
from qiskit import QuantumCircuit, ClassicalRegister, ClassicalRegister
1313
from qiskit.quantum_info import Statevector
1414
from qiskit_aer import AerSimulator
15-
from sklearn.datasets import make_regression, make_classification, load_boston
15+
# Handle sklearn dataset changes
16+
from sklearn.datasets import make_regression, make_classification
17+
try:
18+
from sklearn.datasets import load_boston
19+
except ImportError:
20+
# Boston dataset removed in sklearn 1.2+, create alternative
21+
def load_boston():
22+
print("ℹ️ Boston housing dataset removed from sklearn, using synthetic regression data")
23+
X, y = make_regression(n_samples=506, n_features=13, noise=10, random_state=42)
24+
# Return in format similar to original boston dataset
25+
return type('Dataset', (), {
26+
'data': X,
27+
'target': y,
28+
'feature_names': [f'feature_{i}' for i in range(13)],
29+
'DESCR': 'Synthetic regression dataset (replacing Boston housing)'
30+
})()
1631
from sklearn.preprocessing import StandardScaler
1732
from sklearn.model_selection import train_test_split
1833
from sklearn.metrics import mean_squared_error, accuracy_score

examples/module7_hardware/04_real_hardware_errors.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,22 @@
1111
import argparse
1212
from qiskit import QuantumCircuit, ClassicalRegister, transpile, QuantumRegister, ClassicalRegister
1313
from qiskit_aer import AerSimulator
14-
from qiskit_aer.noise import NoiseModel, depolarizing_error, thermal_relaxation_error, readout_error
14+
# Handle different Qiskit Aer versions for noise models
15+
try:
16+
from qiskit_aer.noise import NoiseModel, depolarizing_error, thermal_relaxation_error, readout_error
17+
except ImportError:
18+
try:
19+
from qiskit_aer.noise import NoiseModel, depolarizing_error, thermal_relaxation_error
20+
from qiskit_aer.noise import ReadoutError as readout_error
21+
except ImportError:
22+
try:
23+
from qiskit_aer.noise import NoiseModel, depolarizing_error, thermal_relaxation_error
24+
# Create a simple readout error class for compatibility
25+
def readout_error(probabilities):
26+
from qiskit_aer.noise import ReadoutError
27+
return ReadoutError(probabilities)
28+
except ImportError:
29+
print("ℹ️ Noise models not fully available, using simplified simulation")
1530
from qiskit.quantum_info import state_fidelity, process_fidelity, Statevector
1631
from qiskit.result import marginal_counts
1732
from qiskit.circuit.library import XGate, HGate, CXGate

examples/module8_applications/01_quantum_chemistry_drug_discovery.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,17 @@
1313
from qiskit.circuit.library import TwoLocal, EfficientSU2
1414
from qiskit_aer import AerSimulator
1515
from qiskit.quantum_info import SparsePauliOp, Statevector
16-
from qiskit.algorithms.optimizers import SPSA, COBYLA
16+
# Handle different Qiskit versions for algorithms
17+
try:
18+
from qiskit.algorithms.optimizers import SPSA, COBYLA
19+
except ImportError:
20+
try:
21+
from qiskit_algorithms.optimizers import SPSA, COBYLA
22+
except ImportError:
23+
# Fallback: use scipy optimizers only
24+
print("ℹ️ Qiskit optimizers not available, using scipy.optimize only")
25+
SPSA = None
26+
COBYLA = None
1727
from scipy.optimize import minimize
1828
from scipy.spatial.distance import cdist
1929
import json

examples/module8_applications/02_financial_portfolio_optimization.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,17 @@
1313
from qiskit.circuit.library import QAOAAnsatz
1414
from qiskit_aer import AerSimulator
1515
from qiskit.quantum_info import SparsePauliOp
16-
from qiskit.algorithms.optimizers import COBYLA, SPSA
16+
# Handle different Qiskit versions for algorithms
17+
try:
18+
from qiskit.algorithms.optimizers import COBYLA, SPSA
19+
except ImportError:
20+
try:
21+
from qiskit_algorithms.optimizers import COBYLA, SPSA
22+
except ImportError:
23+
# Fallback: use scipy optimizers only
24+
print("ℹ️ Qiskit optimizers not available, using scipy.optimize only")
25+
COBYLA = None
26+
SPSA = None
1727
from scipy.optimize import minimize
1828
import pandas as pd
1929
import yfinance as yf

examples/module8_applications/05_materials_science_manufacturing.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,17 @@
1313
from qiskit.circuit.library import TwoLocal, EfficientSU2
1414
from qiskit_aer import AerSimulator
1515
from qiskit.quantum_info import SparsePauliOp, Statevector
16-
from qiskit.algorithms.optimizers import SPSA, COBYLA
16+
# Handle different Qiskit versions for algorithms
17+
try:
18+
from qiskit.algorithms.optimizers import SPSA, COBYLA
19+
except ImportError:
20+
try:
21+
from qiskit_algorithms.optimizers import SPSA, COBYLA
22+
except ImportError:
23+
# Fallback: use scipy optimizers only
24+
print("ℹ️ Qiskit optimizers not available, using scipy.optimize only")
25+
SPSA = None
26+
COBYLA = None
1727
from scipy.optimize import minimize
1828
from scipy.spatial.distance import cdist
1929
import pandas as pd

0 commit comments

Comments
 (0)