[pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci
This commit is contained in:
pre-commit-ci[bot]
2024-02-13 00:24:33 +00:00
parent c119272470
commit 3a30d10ceb
9 changed files with 56 additions and 53 deletions

View File

@@ -1,6 +1,7 @@
from setuptools import setup, find_packages
import re
import pathlib import pathlib
import re
from setuptools import find_packages, setup
HERE = pathlib.Path(__file__).parent.absolute() HERE = pathlib.Path(__file__).parent.absolute()
PACKAGE = "qibotn" PACKAGE = "qibotn"

View File

@@ -1,6 +1,6 @@
import cupy as cp import cupy as cp
from cuquantum.cutensornet.experimental import contract_decompose
from cuquantum import contract from cuquantum import contract
from cuquantum.cutensornet.experimental import contract_decompose
def initial(num_qubits, dtype): def initial(num_qubits, dtype):

View File

@@ -94,8 +94,7 @@ class QiboCircuitToEinsum:
required_shape = self.op_shape_from_qubits(len(gate_qubits)) required_shape = self.op_shape_from_qubits(len(gate_qubits))
self.gate_tensors.append( self.gate_tensors.append(
( (
cp.asarray(gate.matrix(), dtype=self.dtype).reshape( cp.asarray(gate.matrix(), dtype=self.dtype).reshape(required_shape),
required_shape),
gate_qubits, gate_qubits,
) )
) )

View File

@@ -1,9 +1,9 @@
import cupy as cp import cupy as cp
import numpy as np import numpy as np
from cuquantum import cutensornet as cutn from cuquantum import cutensornet as cutn
from qibotn.MPSUtils import apply_gate, initial
from qibotn.QiboCircuitConvertor import QiboCircuitToEinsum from qibotn.QiboCircuitConvertor import QiboCircuitToEinsum
from qibotn.MPSUtils import initial, apply_gate
class QiboCircuitToMPS: class QiboCircuitToMPS:

View File

@@ -1,12 +1,13 @@
from qibotn.QiboCircuitConvertor import QiboCircuitToEinsum import multiprocessing
import cupy as cp
from cupy.cuda.runtime import getDeviceCount
from cuquantum import contract from cuquantum import contract
from cuquantum import cutensornet as cutn from cuquantum import cutensornet as cutn
import multiprocessing
from cupy.cuda.runtime import getDeviceCount
import cupy as cp
from qibotn.QiboCircuitToMPS import QiboCircuitToMPS
from qibotn.mps_contraction_helper import MPSContractionHelper from qibotn.mps_contraction_helper import MPSContractionHelper
from qibotn.QiboCircuitConvertor import QiboCircuitToEinsum
from qibotn.QiboCircuitToMPS import QiboCircuitToMPS
def eval(qibo_circ, datatype): def eval(qibo_circ, datatype):

View File

@@ -1,4 +1,4 @@
from cuquantum import contract, contract_path, CircuitToEinsum, tensor from cuquantum import CircuitToEinsum, contract, contract_path, tensor
class MPSContractionHelper: class MPSContractionHelper:

View File

@@ -3,8 +3,14 @@ import quimb.tensor as qtn
from qibo.models import Circuit as QiboCircuit from qibo.models import Circuit as QiboCircuit
def from_qibo(circuit: QiboCircuit, is_mps: False, psi0=None, method='svd', def from_qibo(
cutoff=1e-6, cutoff_mode='abs'): circuit: QiboCircuit,
is_mps: False,
psi0=None,
method="svd",
cutoff=1e-6,
cutoff_mode="abs",
):
nqubits = circuit.nqubits nqubits = circuit.nqubits
gate_opt = {} gate_opt = {}
if is_mps: if is_mps:

View File

@@ -1,8 +1,8 @@
from timeit import default_timer as timer from timeit import default_timer as timer
import config import config
import numpy as np
import cupy as cp import cupy as cp
import numpy as np
import pytest import pytest
import qibo import qibo
from qibo.models import QFT from qibo.models import QFT
@@ -35,18 +35,14 @@ def test_eval(nqubits: int, dtype="complex128"):
import qibotn.cutn import qibotn.cutn
# Test qibo # Test qibo
qibo.set_backend(backend=config.qibo.backend, qibo.set_backend(backend=config.qibo.backend, platform=config.qibo.platform)
platform=config.qibo.platform) qibo_time, (qibo_circ, result_sv) = time(lambda: qibo_qft(nqubits, swaps=True))
qibo_time, (qibo_circ, result_sv) = time(
lambda: qibo_qft(nqubits, swaps=True))
# Test Cuquantum # Test Cuquantum
cutn_time, result_tn = time( cutn_time, result_tn = time(lambda: qibotn.cutn.eval(qibo_circ, dtype).flatten())
lambda: qibotn.cutn.eval(qibo_circ, dtype).flatten())
assert 1e-2 * qibo_time < cutn_time < 1e2 * qibo_time assert 1e-2 * qibo_time < cutn_time < 1e2 * qibo_time
assert np.allclose( assert np.allclose(result_sv, result_tn), "Resulting dense vectors do not match"
result_sv, result_tn), "Resulting dense vectors do not match"
@pytest.mark.gpu @pytest.mark.gpu
@@ -62,25 +58,25 @@ def test_mps(nqubits: int, dtype="complex128"):
import qibotn.cutn import qibotn.cutn
# Test qibo # Test qibo
qibo.set_backend(backend=config.qibo.backend, qibo.set_backend(backend=config.qibo.backend, platform=config.qibo.platform)
platform=config.qibo.platform)
qibo_time, (circ_qibo, result_sv) = time( qibo_time, (circ_qibo, result_sv) = time(lambda: qibo_qft(nqubits, swaps=True))
lambda: qibo_qft(nqubits, swaps=True))
result_sv_cp = cp.asarray(result_sv) result_sv_cp = cp.asarray(result_sv)
# Test of MPS # Test of MPS
gate_algo = {'qr_method': False, gate_algo = {
'svd_method': { "qr_method": False,
'partition': 'UV', "svd_method": {
'abs_cutoff': 1e-12, "partition": "UV",
}} "abs_cutoff": 1e-12,
},
}
cutn_time, result_tn = time( cutn_time, result_tn = time(
lambda: qibotn.cutn.eval_mps(circ_qibo, gate_algo, dtype).flatten()) lambda: qibotn.cutn.eval_mps(circ_qibo, gate_algo, dtype).flatten()
)
print( print(f"State vector difference: {abs(result_tn - result_sv_cp).max():0.3e}")
f"State vector difference: {abs(result_tn - result_sv_cp).max():0.3e}")
assert cp.allclose(result_tn, result_sv_cp) assert cp.allclose(result_tn, result_sv_cp)

View File

@@ -1,5 +1,6 @@
import copy import copy
import os import os
import config import config
import numpy as np import numpy as np
import pytest import pytest
@@ -8,8 +9,7 @@ from qibo.models import QFT
def create_init_state(nqubits): def create_init_state(nqubits):
init_state = np.random.random(2**nqubits) + \ init_state = np.random.random(2**nqubits) + 1j * np.random.random(2**nqubits)
1j * np.random.random(2**nqubits)
init_state = init_state / np.sqrt((np.abs(init_state) ** 2).sum()) init_state = init_state / np.sqrt((np.abs(init_state) ** 2).sum())
return init_state return init_state
@@ -20,8 +20,10 @@ def qibo_qft(nqubits, init_state, swaps):
return circ_qibo, state_vec return circ_qibo, state_vec
@pytest.mark.parametrize("nqubits, tolerance, is_mps", @pytest.mark.parametrize(
[(1, 1e-6, True), (2, 1e-6, False), (5, 1e-3, True), (10, 1e-3, False)]) "nqubits, tolerance, is_mps",
[(1, 1e-6, True), (2, 1e-6, False), (5, 1e-3, True), (10, 1e-3, False)],
)
def test_eval(nqubits: int, tolerance: float, is_mps: bool): def test_eval(nqubits: int, tolerance: float, is_mps: bool):
# hack quimb to use the correct number of processes # hack quimb to use the correct number of processes
# TODO: remove completely, or at least delegate to the backend # TODO: remove completely, or at least delegate to the backend
@@ -33,13 +35,11 @@ def test_eval(nqubits: int, tolerance: float, is_mps: bool):
init_state_tn = copy.deepcopy(init_state) init_state_tn = copy.deepcopy(init_state)
# Test qibo # Test qibo
qibo.set_backend(backend=config.qibo.backend, qibo.set_backend(backend=config.qibo.backend, platform=config.qibo.platform)
platform=config.qibo.platform) # qibo_time, (qibo_circ, result_sv) = time(
#qibo_time, (qibo_circ, result_sv) = time( # lambda: qibo_qft(nqubits, init_state, swaps=True)
#lambda: qibo_qft(nqubits, init_state, swaps=True) # )
#) qibo_circ, result_sv = qibo_qft(nqubits, init_state, swaps=True)
qibo_circ, result_sv= qibo_qft(nqubits, init_state, swaps=True)
# Convert to qasm for other backends # Convert to qasm for other backends
qasm_circ = qibo_circ.to_qasm() qasm_circ = qibo_circ.to_qasm()
@@ -49,6 +49,6 @@ def test_eval(nqubits: int, tolerance: float, is_mps: bool):
qasm_circ, init_state_tn, is_mps, backend=config.quimb.backend qasm_circ, init_state_tn, is_mps, backend=config.quimb.backend
) )
assert np.allclose(
assert np.allclose(result_sv, result_tn, result_sv, result_tn, atol=tolerance
atol=tolerance), "Resulting dense vectors do not match" ), "Resulting dense vectors do not match"