From 662adfe1585c7eebede9006a76dfd379ff13734c Mon Sep 17 00:00:00 2001 From: Alessandro Candido Date: Wed, 15 Feb 2023 16:36:42 +0100 Subject: [PATCH] Drop circuit-specific dedicated handling for swaps --- src/qibotn/quimb.py | 17 +++++++++-------- tests/config.py | 1 - tests/test_qasm_quimb_backend.py | 18 +++++++----------- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/qibotn/quimb.py b/src/qibotn/quimb.py index 46a527c..8414540 100644 --- a/src/qibotn/quimb.py +++ b/src/qibotn/quimb.py @@ -3,16 +3,17 @@ import quimb.tensor as qtn from qibo.models import Circuit as QiboCircuit -def from_qibo(circuit: QiboCircuit, swaps: bool = True, psi0=None): +def from_qibo(circuit: QiboCircuit, psi0=None): nqubits = circuit.nqubits tncirc = qtn.Circuit(nqubits, psi0=psi0) for gate in circuit.queue: - tncirc.apply_gate(gate.name) - - if swaps: - for i in range(nqubits // 2): # TODO: Ignore the barrier indices? - tncirc.apply_gate("SWAP", i, nqubits - i - 1) + tncirc.apply_gate( + gate.name, + *gate.parameters, + *gate.qubits, + parametrize=len(gate.parameters) > 0 + ) return tncirc @@ -23,7 +24,7 @@ def init_state_tn(nqubits, init_state_sv): return qtn.tensor_1d.MatrixProductState.from_dense(init_state_sv, dims) -def eval(qasm: str, init_state, backend="numpy", swaps=True): +def eval(qasm: str, init_state, backend="numpy"): """Evaluate QASM with Quimb backend (quimb): numpy, cupy, jax. Passed to ``opt_einsum``. @@ -31,7 +32,7 @@ def eval(qasm: str, init_state, backend="numpy", swaps=True): """ circuit = QiboCircuit.from_qasm(qasm) init_state_mps = init_state_tn(circuit.nqubits, init_state) - circ_quimb = from_qibo(circuit, swaps=swaps, psi0=init_state_mps) + circ_quimb = from_qibo(circuit, psi0=init_state_mps) interim = circ_quimb.psi.full_simplify(seq="DRC") amplitudes = interim.to_dense(backend=backend).flatten() diff --git a/tests/config.py b/tests/config.py index 7570e30..7403673 100644 --- a/tests/config.py +++ b/tests/config.py @@ -6,7 +6,6 @@ from typing import Optional class Executor: backend: str platform: Optional[str] = None - swaps: bool = True qibo = Executor(backend="qibojit", platform="numpy") diff --git a/tests/test_qasm_quimb_backend.py b/tests/test_qasm_quimb_backend.py index db1ad27..e962018 100644 --- a/tests/test_qasm_quimb_backend.py +++ b/tests/test_qasm_quimb_backend.py @@ -1,13 +1,12 @@ -import os - -import pytest -import qibo -from qibo.models import QFT -import numpy as np import copy +import os from timeit import default_timer as timer import config +import numpy as np +import pytest +import qibo +from qibo.models import QFT def create_init_state(nqubits): @@ -44,7 +43,7 @@ def test_eval(nqubits: int): # Test qibo qibo.set_backend(backend=config.qibo.backend, platform=config.qibo.platform) qibo_time, (qibo_circ, result_sv) = time( - lambda: qibo_qft(nqubits, init_state, swaps=config.qibo.swaps) + lambda: qibo_qft(nqubits, init_state, swaps=True) ) # Convert to qasm for other backends @@ -53,10 +52,7 @@ def test_eval(nqubits: int): # Test quimb quimb_time, result_tn = time( lambda: qibotn.quimb.eval( - qasm_circ, - init_state_tn, - backend=config.quimb.backend, - swaps=config.quimb.swaps, + qasm_circ, init_state_tn, backend=config.quimb.backend ) )