Skip to content

Commit 856cf8e

Browse files
fix qiskit bug
1 parent acf6944 commit 856cf8e

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"tensorflow": ["tensorflow"],
2323
"jax": ["jax", "jaxlib"],
2424
"torch": ["torch"],
25-
"qiskit": ["qiskit"],
25+
"qiskit": ["qiskit", "sympy", "symengine"],
2626
"cloud": ["qiskit", "mthree<2.8"],
2727
},
2828
classifiers=[

tensorcircuit/translation.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313

1414
try:
1515
import qiskit.quantum_info as qi
16-
import symengine
17-
import sympy
1816
from qiskit import QuantumCircuit
1917
from qiskit.circuit import Parameter, ParameterExpression
2018
from qiskit.circuit.exceptions import CircuitError
@@ -28,6 +26,14 @@
2826
CircuitInstruction = Any
2927
QuantumCircuit = Any
3028

29+
try:
30+
import symengine
31+
import sympy
32+
except ImportError:
33+
logger.info(
34+
"Please first ``pip install -U sympy symengine`` to enable `qiskit2tc` in translation module"
35+
)
36+
3137
try:
3238
import cirq
3339
except ImportError:
@@ -325,7 +331,9 @@ def qir2qiskit(
325331
qiskit_circ.append(gate, index_reversed)
326332
elif gate_name == "multicontrol":
327333
unitary = backend.numpy(backend.convert_to_tensor(parameters["unitary"]))
334+
k = int(np.log(unitary.shape[-1]) / np.log(2) + 1e-7)
328335
ctrl_str = "".join(map(str, parameters["ctrl"]))[::-1]
336+
unitary = perm_matrix(k) @ unitary @ perm_matrix(k)
329337
gate = UnitaryGate(unitary, label=qis_name).control(
330338
len(ctrl_str), ctrl_state=ctrl_str
331339
)

tests/test_circuit.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,7 +1094,7 @@ def test_qiskit2tc():
10941094
import qiskit.quantum_info as qi
10951095
from qiskit import QuantumCircuit
10961096
from qiskit.circuit.library import HamiltonianGate
1097-
from qiskit.circuit.library.standard_gates import MCXGate, SwapGate
1097+
from qiskit.circuit.library.standard_gates import MCXGate, SwapGate, CXGate
10981098

10991099
from tensorcircuit.translation import perm_matrix
11001100
except ImportError:
@@ -1150,12 +1150,13 @@ def test_qiskit2tc():
11501150
mcx_g = MCXGate(3, ctrl_state="010")
11511151
qisc.append(mcx_g, [0, 1, 2, 3])
11521152
qisc.ccx(0, 1, 2, ctrl_state="01")
1153-
CCCRX = SwapGate().control(2, ctrl_state="01")
1154-
qisc.append(CCCRX, [0, 1, 2, 3])
1153+
CCswap = SwapGate().control(2, ctrl_state="01")
1154+
qisc.append(CCswap, [0, 1, 2, 3])
1155+
CCCX = CXGate().control(2, ctrl_state="01")
1156+
qisc.append(CCCX, [1, 2, 3, 4])
11551157

1156-
c = tc.Circuit.from_qiskit(qisc, n, np.eye(2**n))
1157-
tc_unitary = c.wavefunction()
1158-
tc_unitary = np.reshape(tc_unitary, [2**n, 2**n])
1158+
c = tc.Circuit.from_qiskit(qisc, n)
1159+
tc_unitary = c.matrix()
11591160
qis_unitary = qi.Operator(qisc)
11601161
qis_unitary = np.reshape(qis_unitary, [2**n, 2**n])
11611162
p_mat = perm_matrix(n)

0 commit comments

Comments
 (0)