Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/beginners_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ import numpy as np
from qalcore.qiskit.vqls.vqls import VQLS, VQLSLog
from qiskit.primitives import Estimator
from qiskit.circuit.library.n_local.real_amplitudes import RealAmplitudes
from qiskit.algorithms import optimizers as opt
from qiskit_algorithms import optimizers as opt
size = 4

# define the matrix of the problem
Expand Down
2 changes: 1 addition & 1 deletion docs/how_tos/01_how_to_solve_linear_system.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@
"source": [
"from vqls_prototype import VQLS, VQLSLog\n",
"from qiskit.primitives import Estimator\n",
"from qiskit.algorithms import optimizers as opt\n",
"from qiskit_algorithms import optimizers as opt\n",
"\n",
"# instantiate an estimator primitive\n",
"estimator = Estimator()\n",
Expand Down
6 changes: 3 additions & 3 deletions docs/how_tos/02_how_to_use_circuits.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,13 @@
"qc1 = QuantumCircuit(nqbit)\n",
"qc1.x(0)\n",
"qc1.x(1)\n",
"qc1.cnot(0, 1)\n",
"qc1.cx(0, 1)\n",
"\n",
"# second quantum circuit for A\n",
"qc2 = QuantumCircuit(nqbit)\n",
"qc2.h(0)\n",
"qc2.x(1)\n",
"qc2.cnot(0, 1)\n",
"qc2.cx(0, 1)\n",
"\n",
"# quantum circuit for b\n",
"rhs = QuantumCircuit(nqbit)\n",
Expand All @@ -94,7 +94,7 @@
"source": [
"from vqls_prototype import VQLS, VQLSLog\n",
"from qiskit.primitives import Estimator\n",
"from qiskit.algorithms import optimizers as opt\n",
"from qiskit_algorithms import optimizers as opt\n",
"from qiskit.circuit.library.n_local.real_amplitudes import RealAmplitudes\n",
"\n",
"\n",
Expand Down
2 changes: 1 addition & 1 deletion docs/how_tos/03_how_to_use_runtime.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
"source": [
"from qiskit_ibm_runtime import QiskitRuntimeService, Estimator, Session, Options\n",
"from vqls_prototype import VQLS, VQLSLog\n",
"from qiskit.algorithms import optimizers as opt\n",
"from qiskit_algorithms import optimizers as opt\n",
"\n",
"# make sure your IBMQ account is saved\n",
"\n",
Expand Down
2 changes: 1 addition & 1 deletion docs/how_tos/04_how_to_control_options.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
"outputs": [],
"source": [
"from qiskit.primitives import Estimator, Sampler\n",
"from qiskit.algorithms import optimizers as opt\n",
"from qiskit_algorithms import optimizers as opt\n",
"from vqls_prototype import VQLS, VQLSLog\n",
"\n",
"# instantiate an estimator primitive\n",
Expand Down
2 changes: 1 addition & 1 deletion docs/technical_docs/vqls.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ Systems of linear equations arise naturally in many real-life applications in a
```python
from qalcore.qiskit.vqls.vqls import VQLS, VQLSLog
from qiskit.circuit.library.n_local.real_amplitudes import RealAmplitudes
from qiskit.algorithms import optimizers as opt
from qiskit_algorithms import optimizers as opt
from qiskit import Aer, BasicAer
import numpy as np

Expand Down
2 changes: 1 addition & 1 deletion docs/tutorials/vqls.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"from vqls_prototype import VQLS, VQLSLog\n",
"from qiskit.primitives import Estimator, Sampler\n",
"from qiskit.circuit.library.n_local.real_amplitudes import RealAmplitudes\n",
"from qiskit.algorithms.optimizers import COBYLA\n",
"from qiskit_algorithms.optimizers import COBYLA\n",
"import numpy as np"
]
},
Expand Down
2 changes: 1 addition & 1 deletion docs/tutorials/vqls_runtime.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"from vqls_prototype import VQLS, VQLSLog\n",
"from qiskit_ibm_runtime import QiskitRuntimeService, Estimator, Session, Options\n",
"from qiskit.circuit.library.n_local.real_amplitudes import RealAmplitudes\n",
"from qiskit.algorithms.optimizers import COBYLA\n",
"from qiskit_algorithms.optimizers import COBYLA\n",
"import numpy as np"
]
},
Expand Down
5 changes: 3 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@ dependencies = [
"certifi>=2021.5.30",
"importlib_metadata>=4.8.1",
"qiskit-aer>=0.10.3",
"qiskit>=0.14.1",
"qiskit>=0.44",
"qiskit_experiments>=0.5.3",
"qiskit_ibm_runtime>=0.9.3",
"qiskit_algorithms>=0.2.1",
"ipykernel>=6.15.0",
"matplotlib>=3.5.3",
"pylatexenc>=2.10",
Expand Down Expand Up @@ -69,4 +70,4 @@ py-modules = []

[tool.setuptools.packages.find]
include = ['vqls_prototype*']
exclude = ['vqls_prototype*tests']
exclude = ['vqls_prototype*tests']
2 changes: 2 additions & 0 deletions pytest.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[pytest]
filterwarnings = ignore::DeprecationWarning
5 changes: 1 addition & 4 deletions tests/test_hadamard.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,9 @@
import numpy as np

from qiskit.test import QiskitTestCase
from qiskit.utils import algorithm_globals

from qiskit.circuit.library import RealAmplitudes
from qiskit.algorithms import optimizers as opt
from qiskit_algorithms import optimizers as opt
from qiskit.primitives import Estimator, Sampler
from vqls_prototype import VQLS, VQLSLog, Hybrid_QST_VQLS

Expand All @@ -28,8 +27,6 @@
class TestHadamard(QiskitTestCase):
def setUp(self):
super().setUp()
self.seed = 50
algorithm_globals.random_seed = self.seed

# define system
self.estimator = Estimator()
Expand Down
5 changes: 1 addition & 4 deletions tests/test_hybrid_qst_vqls.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,8 @@

from qiskit import BasicAer
from qiskit.circuit.library import RealAmplitudes
from qiskit.utils import algorithm_globals

from qiskit.algorithms.optimizers import COBYLA
from qiskit_algorithms.optimizers import COBYLA
from qiskit.primitives import Estimator, Sampler, BackendEstimator, BackendSampler
from vqls_prototype import Hybrid_QST_VQLS, VQLSLog

Expand All @@ -32,8 +31,6 @@ class TestHybridQSTVQLS(QiskitTestCase):

def setUp(self):
super().setUp()
self.seed = 50
algorithm_globals.random_seed = self.seed

self.options = ({"use_local_cost_function": False, "use_overlap_test": False},)

Expand Down
5 changes: 1 addition & 4 deletions tests/test_qst_vqls.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,8 @@

from qiskit import BasicAer
from qiskit.circuit.library import RealAmplitudes
from qiskit.utils import algorithm_globals

from qiskit.algorithms.optimizers import COBYLA
from qiskit_algorithms.optimizers import COBYLA
from qiskit.primitives import Estimator, Sampler, BackendEstimator, BackendSampler
from vqls_prototype import QST_VQLS, VQLSLog

Expand All @@ -32,8 +31,6 @@ class TestQSTVQLS(QiskitTestCase):

def setUp(self):
super().setUp()
self.seed = 50
algorithm_globals.random_seed = self.seed

self.options = ({"use_local_cost_function": False, "use_overlap_test": False},)

Expand Down
3 changes: 0 additions & 3 deletions tests/test_tomography.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@

import numpy as np
from qiskit.test import QiskitTestCase
from qiskit.utils import algorithm_globals

from qiskit import Aer
from qiskit.circuit.library import RealAmplitudes
Expand All @@ -24,8 +23,6 @@
class TestTomography(QiskitTestCase):
def setUp(self):
super().setUp()
self.seed = 50
algorithm_globals.random_seed = self.seed

# define ansatz
num_qubits = 2
Expand Down
39 changes: 23 additions & 16 deletions tests/test_vqls.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,21 @@

from qiskit import BasicAer, QuantumCircuit
from qiskit.circuit.library import RealAmplitudes
from qiskit.utils import algorithm_globals

from qiskit.algorithms.optimizers import COBYLA
from qiskit_algorithms.optimizers import ADAM
from qiskit.primitives import Estimator, Sampler, BackendEstimator, BackendSampler
from vqls_prototype import VQLS, VQLSLog
from vqls_prototype import VQLS

# 8-11-2023
# Overlap Hadamard test do not work with BasicAer primitives anymore
# this test case is skipped for now


class TestVQLS(QiskitTestCase):
"""Test VQLS"""

def setUp(self):
super().setUp()
self.seed = 50
algorithm_globals.random_seed = self.seed

self.options = (
{"use_local_cost_function": False, "use_overlap_test": False},
Expand All @@ -51,8 +52,6 @@ def setUp(self):
BackendSampler(BasicAer.get_backend("qasm_simulator")),
)

self.log = VQLSLog([], [])

def test_numpy_input(self):
"""Test the VQLS on matrix input using statevector simulator."""

Expand All @@ -68,12 +67,16 @@ def test_numpy_input(self):
rhs = np.array([0.1] * 4)
ansatz = RealAmplitudes(num_qubits=2, reps=3, entanglement="full")

for estimator, sampler in zip(self.estimators, self.samplers):
for opt in self.options:
for iprim, (estimator, sampler) in enumerate(
zip(self.estimators, self.samplers)
):
for iopt, opt in enumerate(self.options):
if iprim == 1 and iopt == 2:
continue
vqls = VQLS(
estimator,
ansatz,
COBYLA(maxiter=2, disp=True),
ADAM(maxiter=2),
options=opt,
sampler=sampler,
)
Expand All @@ -92,19 +95,23 @@ def test_circuit_input_statevector(self):
qc1 = QuantumCircuit(num_qubits)
qc1.x(0)
qc1.x(1)
qc1.cnot(0, 1)
qc1.cx(0, 1)

qc2 = QuantumCircuit(num_qubits)
qc2.h(0)
qc2.x(1)
qc2.cnot(0, 1)

for estimator, sampler in zip(self.estimators, self.samplers):
for opt in self.options:
qc2.cx(0, 1)

for iprim, (estimator, sampler) in enumerate(
zip(self.estimators, self.samplers)
):
for iopt, opt in enumerate(self.options):
if iprim == 1 and iopt == 2:
continue
vqls = VQLS(
estimator,
ansatz,
COBYLA(maxiter=2, disp=True),
ADAM(maxiter=2),
sampler=sampler,
options=opt,
)
Expand Down
2 changes: 1 addition & 1 deletion vqls_prototype/hadamard_test/direct_hadamard_test.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Optional, List
from qiskit import QuantumCircuit
from qiskit.algorithms.exceptions import AlgorithmError
from qiskit_algorithms.exceptions import AlgorithmError
import numpy as np
import numpy.typing as npt

Expand Down
3 changes: 1 addition & 2 deletions vqls_prototype/hadamard_test/hadamard_overlap_test.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Optional, List, Union
from qiskit import QuantumCircuit, QuantumRegister, transpile
from qiskit.algorithms.exceptions import AlgorithmError
from qiskit_algorithms.exceptions import AlgorithmError
from qiskit.opflow import TensoredOp
from qiskit.quantum_info import SparsePauliOp
import numpy as np
Expand All @@ -17,7 +17,6 @@ def __init__(self, hdmr_list: List):
hdrm_list (List): A list of DirectHadamardTest instances
"""
self.hdmr_list = hdmr_list
# self.circuits = [hdmr.circuits for hdmr in hdmr_list]
self.circuits = [c for hdmr in hdmr_list for c in hdmr.circuits]
self.post_processing = hdmr_list[0].post_processing
self.shots = hdmr_list[0].shots
Expand Down
2 changes: 1 addition & 1 deletion vqls_prototype/hadamard_test/hadamard_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from typing import Optional, List, Union
from qiskit import QuantumCircuit, QuantumRegister, transpile
from qiskit.algorithms.exceptions import AlgorithmError
from qiskit_algorithms.exceptions import AlgorithmError
from qiskit.opflow import TensoredOp
from qiskit.quantum_info import SparsePauliOp
import numpy as np
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,7 @@ def get_possible_pauli_strings(self) -> List:
# if we use the sparse decomposition
if self.use_sparse:
# for now convert to coo and extract indices
assert isinstance(self._matrix, spsp.csr_array)
assert isinstance(self._matrix, spsp.spmatrix)
coo_mat = self._matrix.tocoo()
idx_row, idx_col = coo_mat.row, coo_mat.col

Expand Down
6 changes: 3 additions & 3 deletions vqls_prototype/solver/base_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@

from qiskit import QuantumCircuit
from qiskit.primitives import BaseEstimator, BaseSampler
from qiskit.algorithms.variational_algorithm import VariationalAlgorithm
from qiskit.utils.validation import validate_min
from qiskit_algorithms.variational_algorithm import VariationalAlgorithm
from qiskit_algorithms.utils.validation import validate_min
from qiskit.circuit.library.n_local.real_amplitudes import RealAmplitudes
from qiskit.algorithms.optimizers import Minimizer, Optimizer
from qiskit_algorithms.optimizers import Minimizer, Optimizer
from qiskit.opflow.gradients import GradientBase

from .variational_linear_solver import (
Expand Down
14 changes: 6 additions & 8 deletions vqls_prototype/solver/hybrid_qst_vqls.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,14 @@
See https://arxiv.org/abs/1909.05820
"""
from typing import Optional, Union, List, Callable, Dict, Tuple
from qiskit.algorithms.optimizers import Minimizer, Optimizer
from qiskit_algorithms.optimizers import Minimizer, Optimizer
import numpy as np
from qiskit.opflow.gradients import GradientBase
from qiskit.primitives import BaseEstimator, BaseSampler
from qiskit import Aer
from qiskit import QuantumCircuit

from qiskit.algorithms.minimum_eigen_solvers.vqe import (
_validate_bounds,
_validate_initial_point,
)
from qiskit_algorithms.utils import validate_bounds
from qiskit.quantum_info import SparsePauliOp

from .variational_linear_solver import (
Expand All @@ -39,6 +36,7 @@
from ..tomography.htree_qst import HTreeQST
from ..tomography.shadow_qst import ShadowQST

from .validation import validate_initial_point
from .base_solver import BaseSolver


Expand All @@ -56,7 +54,7 @@ class Hybrid_QST_VQLS(BaseSolver):

from qalcore.qiskit.vqls.vqls import VQLS, VQLSLog
from qiskit.circuit.library.n_local.real_amplitudes import RealAmplitudes
from qiskit.algorithms import optimizers as opt
from qiskit_algorithms import optimizers as opt
from qiskit import Aer, BasicAer
import numpy as np

Expand Down Expand Up @@ -489,8 +487,8 @@ def _solve(
)

# set an expectation for this algorithm run (will be reset to None at the end)
initial_point = _validate_initial_point(self.initial_point, self.ansatz)
bounds = _validate_bounds(self.ansatz)
initial_point = validate_initial_point(self.initial_point, self.ansatz)
bounds = validate_bounds(self.ansatz)

# Convert the gradient operator into a callable function that is compatible with the
# optimization routine.
Expand Down
Loading