Skip to content

Commit 267b328

Browse files
committed
partial fix qiskit 1.4 version
1 parent e7dc3b9 commit 267b328

File tree

5 files changed

+339
-280
lines changed

5 files changed

+339
-280
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ repos:
4040
rev: 22.12.0
4141
hooks:
4242
- id: black
43-
language_version: python3.8
43+
language_version: python3.12
4444

4545
- repo: https://github.com/PyCQA/flake8
4646
rev: 6.0.0

torchquantum/plugin/qiskit/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,5 @@
2424

2525
from .qiskit_macros import *
2626
from .qiskit_plugin import *
27-
from .qiskit_pulse import *
2827
from .qiskit_processor import *
2928
from .qiskit_unitary_gate import *

torchquantum/plugin/qiskit/qiskit_plugin.py

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,14 @@
2727
import torchquantum.functional as tqf
2828
import qiskit.circuit.library.standard_gates as qiskit_gate
2929
import numpy as np
30+
import re
3031

32+
import qiskit
3133
from qiskit import QuantumCircuit, ClassicalRegister
32-
from qiskit import Aer, execute
34+
from qiskit_aer import AerSimulator, UnitarySimulator
35+
from qiskit import transpile
3336
from qiskit.circuit import Parameter
37+
from qiskit.circuit.library import UnitaryGate
3438
from torchpack.utils.logging import logger
3539
from torchquantum.util import (
3640
switch_little_big_endian_matrix,
@@ -85,7 +89,9 @@ def qiskit2tq_op_history(circ):
8589
init_params = (
8690
list(map(float, gate[0].params)) if len(gate[0].params) > 0 else None
8791
)
88-
print(op_name,)
92+
print(
93+
op_name,
94+
)
8995

9096
if op_name in [
9197
"h",
@@ -104,12 +110,12 @@ def qiskit2tq_op_history(circ):
104110
]:
105111
ops.append(
106112
{
107-
"name": op_name, # type: ignore
108-
"wires": np.array(wires),
109-
"params": None,
110-
"inverse": False,
111-
"trainable": False,
112-
}
113+
"name": op_name, # type: ignore
114+
"wires": np.array(wires),
115+
"params": None,
116+
"inverse": False,
117+
"trainable": False,
118+
}
113119
)
114120
elif op_name in [
115121
"rx",
@@ -138,12 +144,13 @@ def qiskit2tq_op_history(circ):
138144
]:
139145
ops.append(
140146
{
141-
"name": op_name, # type: ignore
142-
"wires": np.array(wires),
143-
"params": init_params,
144-
"inverse": False,
145-
"trainable": True
146-
})
147+
"name": op_name, # type: ignore
148+
"wires": np.array(wires),
149+
"params": init_params,
150+
"inverse": False,
151+
"trainable": True,
152+
}
153+
)
147154
elif op_name in ["barrier", "measure"]:
148155
continue
149156
else:
@@ -206,7 +213,10 @@ def append_parameterized_gate(func, circ, input_idx, params, wires):
206213
)
207214
elif func == "u2":
208215
from qiskit.circuit.library import U2Gate
209-
circ.append(U2Gate(phi=params[input_idx[0]], lam=params[input_idx[1]]), wires, [])
216+
217+
circ.append(
218+
U2Gate(phi=params[input_idx[0]], lam=params[input_idx[1]]), wires, []
219+
)
210220
# circ.u2(phi=params[input_idx[0]], lam=params[input_idx[1]], qubit=wires[0])
211221
elif func == "u3":
212222
circ.u(
@@ -297,6 +307,7 @@ def append_fixed_gate(circ, func, params, wires, inverse):
297307
circ.cu1(params, *wires)
298308
elif func == "u2":
299309
from qiskit.circuit.library import U2Gate
310+
300311
circ.append(U2Gate(phi=params[0], lam=params[1]), wires, [])
301312
# circ.u2(*list(params), *wires)
302313
elif func == "u3":
@@ -535,7 +546,15 @@ def tq2qiskit(
535546
circ.cu1(module.params[0][0].item(), *module.wires)
536547
elif module.name == "U2":
537548
from qiskit.circuit.library import U2Gate
538-
circ.append(U2Gate(phi=module.params[0].data.cpu().numpy()[0], lam=module.params[0].data.cpu().numpy()[0]), module.wires, [])
549+
550+
circ.append(
551+
U2Gate(
552+
phi=module.params[0].data.cpu().numpy()[0],
553+
lam=module.params[0].data.cpu().numpy()[0],
554+
),
555+
module.wires,
556+
[],
557+
)
539558
# circ.u2(*list(module.params[0].data.cpu().numpy()), *module.wires)
540559
elif module.name == "U3":
541560
circ.u3(*list(module.params[0].data.cpu().numpy()), *module.wires)
@@ -665,11 +684,9 @@ def op_history2qiskit_expand_params(n_wires, op_history, bsz):
665684
param = op["params"][i]
666685
else:
667686
param = None
668-
669-
append_fixed_gate(
670-
circ, op["name"], param, op["wires"], op["inverse"]
671-
)
672-
687+
688+
append_fixed_gate(circ, op["name"], param, op["wires"], op["inverse"])
689+
673690
circs_all.append(circ)
674691

675692
return circs_all
@@ -762,7 +779,7 @@ def qiskit2tq_Operator(circ: QuantumCircuit):
762779
raise NotImplementedError(
763780
f"{op_name} conversion to tq is currently not supported."
764781
)
765-
782+
766783
return ops
767784

768785

torchquantum/plugin/qiskit/qiskit_processor.py

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626
import torchquantum as tq
2727
import pathos.multiprocessing as multiprocessing
2828
import itertools
29+
import warnings # Added for handling deprecation warnings
2930

30-
from qiskit import Aer, execute, IBMQ, transpile, QuantumCircuit
31-
from qiskit.providers.aer.noise import NoiseModel
32-
from qiskit.tools.monitor import job_monitor
31+
from qiskit import transpile, QuantumCircuit
32+
from qiskit_aer.noise import NoiseModel
3333
from qiskit.exceptions import QiskitError
3434
from .qiskit_plugin import (
3535
tq2qiskit,
@@ -38,19 +38,19 @@
3838
)
3939
from torchquantum.util import (
4040
get_expectations_from_counts,
41-
get_provider,
42-
get_provider_hub_group_project,
41+
# Removed: get_provider (IBMQ specific)
42+
# Removed: get_provider_hub_group_project (IBMQ specific)
4343
get_circ_stats,
4444
)
45-
from .qiskit_macros import IBMQ_NAMES
45+
from .qiskit_macros import (
46+
IBMQ_NAMES,
47+
) # Keep for checking names? Or remove? Let's keep for now.
4648
from tqdm import tqdm
4749
from torchpack.utils.logging import logger
4850
from qiskit.transpiler import PassManager
4951
import numpy as np
5052
import datetime
5153

52-
from .my_job_monitor import my_job_monitor
53-
5454

5555
class EmptyPassManager(PassManager):
5656
def run(self, circuits, output_name: str = None, callback=None):
@@ -758,9 +758,9 @@ def process_circs_get_joint_expval(self, circs_all, observable, parallel=True):
758758
for circ_ in circs_all:
759759
circ = circ_.copy()
760760
for k, obs in enumerate(observable):
761-
if obs == 'X':
761+
if obs == "X":
762762
circ.h(k)
763-
elif obs == 'Y':
763+
elif obs == "Y":
764764
circ.z(k)
765765
circ.s(k)
766766
circ.h(k)
@@ -771,8 +771,10 @@ def process_circs_get_joint_expval(self, circs_all, observable, parallel=True):
771771

772772
mask = np.ones(len(observable), dtype=bool)
773773
mask[np.array([*observable]) == "I"] = False
774-
775-
counts = self.process_ready_circs_get_counts(circs_all_diagonalized, parallel=parallel)
774+
775+
counts = self.process_ready_circs_get_counts(
776+
circs_all_diagonalized, parallel=parallel
777+
)
776778

777779
# here we need to switch the little and big endian of distribution bitstrings
778780
distributions = []
@@ -786,31 +788,35 @@ def process_circs_get_joint_expval(self, circs_all, observable, parallel=True):
786788
n_eigen_one = 0
787789
n_eigen_minus_one = 0
788790
for bitstring, n_count in distri.items():
789-
if np.dot(list(map(lambda x: eval(x), [*bitstring])), mask).sum() % 2 == 0:
791+
if (
792+
np.dot(list(map(lambda x: eval(x), [*bitstring])), mask).sum() % 2
793+
== 0
794+
):
790795
n_eigen_one += n_count
791796
else:
792797
n_eigen_minus_one += n_count
793-
794-
expval = n_eigen_one / self.n_shots + (-1) * n_eigen_minus_one / self.n_shots
798+
799+
expval = (
800+
n_eigen_one / self.n_shots + (-1) * n_eigen_minus_one / self.n_shots
801+
)
795802
expval_all.append(expval)
796803

797804
return expval_all
798805

799806

800-
if __name__ == '__main__':
807+
if __name__ == "__main__":
801808
import pdb
809+
802810
pdb.set_trace()
803811
circ = QuantumCircuit(3)
804812
circ.h(0)
805813
circ.cx(0, 1)
806814
circ.cx(1, 2)
807815
circ.rx(0.1, 0)
808816

809-
qiskit_processor = QiskitProcessor(
810-
use_real_qc=False
811-
)
817+
qiskit_processor = QiskitProcessor(use_real_qc=False)
812818

813-
qiskit_processor.process_circs_get_joint_expval([circ], 'XII')
819+
qiskit_processor.process_circs_get_joint_expval([circ], "XII")
814820

815821
qdev = tq.QuantumDevice(n_wires=3, bsz=1)
816822
qdev.h(0)
@@ -819,5 +825,5 @@ def process_circs_get_joint_expval(self, circs_all, observable, parallel=True):
819825
qdev.rx(0, 0.1)
820826

821827
from torchquantum.measurement import expval_joint_sampling
822-
print(expval_joint_sampling(qdev, 'XII', n_shots=8192))
823828

829+
print(expval_joint_sampling(qdev, "XII", n_shots=8192))

0 commit comments

Comments
 (0)