更新脚本
Some checks failed
Build wheels / build (ubuntu-latest, 3.11) (push) Has been cancelled
Build wheels / build (ubuntu-latest, 3.12) (push) Has been cancelled
Build wheels / build (ubuntu-latest, 3.13) (push) Has been cancelled
Tests / check (push) Has been cancelled
Tests / build (ubuntu-latest, 3.11) (push) Has been cancelled
Tests / build (ubuntu-latest, 3.12) (push) Has been cancelled
Tests / build (ubuntu-latest, 3.13) (push) Has been cancelled

This commit is contained in:
2026-05-09 21:15:19 +08:00
parent ff96e36cfc
commit fea8e5abc0
2 changed files with 33 additions and 5 deletions

View File

@@ -70,6 +70,8 @@ def main():
parser.add_argument("--exact", action="store_true")
parser.add_argument("--exact-max-qubits", type=int, default=24)
parser.add_argument("--preprocess", action="store_true")
parser.add_argument("--compile-circuit", action="store_true")
parser.add_argument("--track-memory", action="store_true")
args = parser.parse_args()
logging.getLogger("qibo.config").setLevel(logging.ERROR)
logging.getLogger("qtealeaves").setLevel(logging.ERROR)
@@ -105,10 +107,17 @@ def main():
cut_ratio=args.cut_ratio,
svd_control=args.svd_control,
tensor_module=args.tensor_module,
compile_circuit=args.compile_circuit,
track_memory=args.track_memory,
)
start = time.perf_counter()
value = float(
backend.expectation(circuit, observable, preprocess=args.preprocess).real
backend.expectation(
circuit,
observable,
preprocess=args.preprocess,
compile_circuit=args.compile_circuit,
).real
)
elapsed = time.perf_counter() - start
abs_error = float("nan") if exact is None else abs(value - exact)

View File

@@ -40,6 +40,9 @@ class QMatchaTeaBackend(QibotnBackend, NumpyBackend):
svd_control: str = "A",
ini_bond_dimension: int = 1,
tensor_module: str = "numpy",
compile_circuit: bool = False,
cache_gate_tensors: bool = True,
track_memory: bool = False,
):
"""Configure TN simulation given Quantum Matcha Tea interface.
@@ -78,6 +81,9 @@ class QMatchaTeaBackend(QibotnBackend, NumpyBackend):
)
self.ansatz = ansatz
self.tensor_module = tensor_module
self.compile_circuit = compile_circuit
self.cache_gate_tensors = cache_gate_tensors
self.track_memory = track_memory
if hasattr(self, "qmatchatea_backend"):
self._setup_backend_specifics()
@@ -100,6 +106,8 @@ class QMatchaTeaBackend(QibotnBackend, NumpyBackend):
ansatz=self.ansatz,
tensor_module=self.tensor_module,
)
self.qmatchatea_backend.cache_gate_tensors = self.cache_gate_tensors
self.qmatchatea_backend.track_memory = self.track_memory
def execute_circuit(
self,
@@ -199,7 +207,7 @@ class QMatchaTeaBackend(QibotnBackend, NumpyBackend):
statevector=statevector,
)
def expectation(self, circuit, observable, preprocess=True):
def expectation(self, circuit, observable, preprocess=True, compile_circuit=None):
"""Compute the expectation value of a Qibo-friendly ``observable`` on
the Tensor Network constructed from a Qibo ``circuit``.
@@ -225,7 +233,11 @@ class QMatchaTeaBackend(QibotnBackend, NumpyBackend):
observable = check_observable(observable, circuit.nqubits)
# From Qibo to Qiskit
circuit = self._qibocirc_to_qiskitcirc(circuit, preprocess=preprocess)
circuit = self._qibocirc_to_qiskitcirc(
circuit,
preprocess=preprocess,
compile_circuit=compile_circuit,
)
run_qk_params = qmatchatea.preprocessing.qk_transpilation_params(False)
operators = qmatchatea.QCOperators()
@@ -245,21 +257,28 @@ class QMatchaTeaBackend(QibotnBackend, NumpyBackend):
return np.real(results.observables["custom_hamiltonian"])
def _qibocirc_to_qiskitcirc(
self, qibo_circuit, preprocess=True
self, qibo_circuit, preprocess=True, compile_circuit=None
) -> qiskit.QuantumCircuit:
"""Convert a Qibo Circuit into a Qiskit Circuit."""
# Convert the circuit to QASM 2.0 to qiskit
qasm_circuit = qibo_circuit.to_qasm()
qiskit_circuit = qiskit.QuantumCircuit.from_qasm_str(qasm_circuit)
if compile_circuit is None:
compile_circuit = self.compile_circuit
if not preprocess:
if compile_circuit:
qiskit_circuit = qmatchatea.tensor_compiler(qiskit_circuit)
return qiskit_circuit
# Transpile the circuit to adapt it to the linear structure of the MPS,
# with the constraint of having only the gates basis_gates
qiskit_circuit = qmatchatea.preprocessing.preprocess(
qiskit_circuit,
qk_params=qmatchatea.preprocessing.qk_transpilation_params(),
qk_params=qmatchatea.preprocessing.qk_transpilation_params(
tensor_compiler=compile_circuit
),
)
return qiskit_circuit