diff --git a/docs/beginners_guide.md b/docs/beginners_guide.md index 4f0e176..edd330b 100644 --- a/docs/beginners_guide.md +++ b/docs/beginners_guide.md @@ -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 diff --git a/docs/how_tos/01_how_to_solve_linear_system.ipynb b/docs/how_tos/01_how_to_solve_linear_system.ipynb index d912222..ddd1046 100644 --- a/docs/how_tos/01_how_to_solve_linear_system.ipynb +++ b/docs/how_tos/01_how_to_solve_linear_system.ipynb @@ -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", diff --git a/docs/how_tos/02_how_to_use_circuits.ipynb b/docs/how_tos/02_how_to_use_circuits.ipynb index a79f091..ebdb9df 100644 --- a/docs/how_tos/02_how_to_use_circuits.ipynb +++ b/docs/how_tos/02_how_to_use_circuits.ipynb @@ -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", @@ -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", diff --git a/docs/how_tos/03_how_to_use_runtime.ipynb b/docs/how_tos/03_how_to_use_runtime.ipynb index 4d80a6b..2b64632 100644 --- a/docs/how_tos/03_how_to_use_runtime.ipynb +++ b/docs/how_tos/03_how_to_use_runtime.ipynb @@ -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", diff --git a/docs/how_tos/04_how_to_control_options.ipynb b/docs/how_tos/04_how_to_control_options.ipynb index 9ac6fd5..fce35a5 100644 --- a/docs/how_tos/04_how_to_control_options.ipynb +++ b/docs/how_tos/04_how_to_control_options.ipynb @@ -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", diff --git a/docs/technical_docs/vqls.md b/docs/technical_docs/vqls.md index eb617e5..4cf66a9 100644 --- a/docs/technical_docs/vqls.md +++ b/docs/technical_docs/vqls.md @@ -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 diff --git a/docs/tutorials/vqls.ipynb b/docs/tutorials/vqls.ipynb index c284b44..0610cf1 100644 --- a/docs/tutorials/vqls.ipynb +++ b/docs/tutorials/vqls.ipynb @@ -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" ] }, diff --git a/docs/tutorials/vqls_runtime.ipynb b/docs/tutorials/vqls_runtime.ipynb index 49e6c67..82a9529 100644 --- a/docs/tutorials/vqls_runtime.ipynb +++ b/docs/tutorials/vqls_runtime.ipynb @@ -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" ] }, diff --git a/pyproject.toml b/pyproject.toml index d070b4e..74f2f06 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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", @@ -69,4 +70,4 @@ py-modules = [] [tool.setuptools.packages.find] include = ['vqls_prototype*'] -exclude = ['vqls_prototype*tests'] +exclude = ['vqls_prototype*tests'] \ No newline at end of file diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..4d6e978 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +filterwarnings = ignore::DeprecationWarning diff --git a/tests/test_hadamard.py b/tests/test_hadamard.py index 2ce1506..a208405 100644 --- a/tests/test_hadamard.py +++ b/tests/test_hadamard.py @@ -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 @@ -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() diff --git a/tests/test_hybrid_qst_vqls.py b/tests/test_hybrid_qst_vqls.py index 11f35e1..0496e62 100644 --- a/tests/test_hybrid_qst_vqls.py +++ b/tests/test_hybrid_qst_vqls.py @@ -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 @@ -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},) diff --git a/tests/test_qst_vqls.py b/tests/test_qst_vqls.py index 9f0a059..74bd996 100644 --- a/tests/test_qst_vqls.py +++ b/tests/test_qst_vqls.py @@ -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 @@ -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},) diff --git a/tests/test_tomography.py b/tests/test_tomography.py index 14ab761..5cd146b 100644 --- a/tests/test_tomography.py +++ b/tests/test_tomography.py @@ -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 @@ -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 diff --git a/tests/test_vqls.py b/tests/test_vqls.py index fa1414c..149ae58 100644 --- a/tests/test_vqls.py +++ b/tests/test_vqls.py @@ -20,11 +20,14 @@ 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): @@ -32,8 +35,6 @@ class TestVQLS(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}, @@ -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.""" @@ -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, ) @@ -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, ) diff --git a/vqls_prototype/hadamard_test/direct_hadamard_test.py b/vqls_prototype/hadamard_test/direct_hadamard_test.py index f38c612..776009b 100644 --- a/vqls_prototype/hadamard_test/direct_hadamard_test.py +++ b/vqls_prototype/hadamard_test/direct_hadamard_test.py @@ -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 diff --git a/vqls_prototype/hadamard_test/hadamard_overlap_test.py b/vqls_prototype/hadamard_test/hadamard_overlap_test.py index 9eb47f0..0d8822c 100644 --- a/vqls_prototype/hadamard_test/hadamard_overlap_test.py +++ b/vqls_prototype/hadamard_test/hadamard_overlap_test.py @@ -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 @@ -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 diff --git a/vqls_prototype/hadamard_test/hadamard_test.py b/vqls_prototype/hadamard_test/hadamard_test.py index 46d44f4..24eb91d 100644 --- a/vqls_prototype/hadamard_test/hadamard_test.py +++ b/vqls_prototype/hadamard_test/hadamard_test.py @@ -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 diff --git a/vqls_prototype/matrix_decomposition/matrix_decomposition.py b/vqls_prototype/matrix_decomposition/matrix_decomposition.py index eecabc3..b3496c4 100644 --- a/vqls_prototype/matrix_decomposition/matrix_decomposition.py +++ b/vqls_prototype/matrix_decomposition/matrix_decomposition.py @@ -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 diff --git a/vqls_prototype/solver/base_solver.py b/vqls_prototype/solver/base_solver.py index c9083a4..cbf11e9 100644 --- a/vqls_prototype/solver/base_solver.py +++ b/vqls_prototype/solver/base_solver.py @@ -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 ( diff --git a/vqls_prototype/solver/hybrid_qst_vqls.py b/vqls_prototype/solver/hybrid_qst_vqls.py index 16404da..4cb01db 100644 --- a/vqls_prototype/solver/hybrid_qst_vqls.py +++ b/vqls_prototype/solver/hybrid_qst_vqls.py @@ -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 ( @@ -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 @@ -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 @@ -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. diff --git a/vqls_prototype/solver/qst_vqls.py b/vqls_prototype/solver/qst_vqls.py index 5923d4b..3e09844 100644 --- a/vqls_prototype/solver/qst_vqls.py +++ b/vqls_prototype/solver/qst_vqls.py @@ -8,7 +8,7 @@ See https://arxiv.org/abs/1909.05820 """ from typing import Optional, Union, List, Callable, Dict -from qiskit.algorithms.optimizers import Minimizer, Optimizer +from qiskit_algorithms.optimizers import Minimizer, Optimizer import numpy as np import sparse @@ -17,10 +17,8 @@ from qiskit import Aer from qiskit import QuantumCircuit from qiskit.quantum_info import SparsePauliOp -from qiskit.algorithms.minimum_eigen_solvers.vqe import ( - _validate_bounds, - _validate_initial_point, -) +from qiskit_algorithms.utils import validate_bounds + from .variational_linear_solver import ( VariationalLinearSolverResult, @@ -35,6 +33,7 @@ from ..tomography.htree_qst import HTreeQST from ..tomography.shadow_qst import ShadowQST +from .validation import validate_initial_point from .base_solver import BaseSolver @@ -52,7 +51,7 @@ class 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 @@ -486,8 +485,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. diff --git a/vqls_prototype/solver/validation.py b/vqls_prototype/solver/validation.py new file mode 100644 index 0000000..0a23049 --- /dev/null +++ b/vqls_prototype/solver/validation.py @@ -0,0 +1,53 @@ +from __future__ import annotations + +from collections.abc import Sequence +from typing import Union, Any +import numpy as np +from qiskit.circuit import QuantumCircuit + + +def validate_initial_point( + point: Union[Sequence[float], np.ndarray] | None, circuit: QuantumCircuit +) -> Union[Sequence[float], Any, np.ndarray[Any, Any]]: + r""" + Validate a choice of initial point against a choice of circuit. If no point is provided, a + random point will be generated within certain parameter bounds. It will first look to the + circuit for these bounds. If the circuit does not specify bounds, bounds of :math:`-2\pi`, + :math:`2\pi` will be used. + + Args: + point: An initial point. + circuit: A parameterized quantum circuit. + + Returns: + A validated initial point. + + Raises: + ValueError: If the dimension of the initial point does not match the number of circuit + parameters. + """ + expected_size = circuit.num_parameters + + if point is None: + # get bounds if circuit has them set, otherwise use [-2pi, 2pi] for each parameter + bounds = getattr(circuit, "parameter_bounds", None) + if bounds is None: + bounds = [(-2 * np.pi, 2 * np.pi)] * expected_size + + # replace all Nones by [-2pi, 2pi] + lower_bounds = [] + upper_bounds = [] + for lower, upper in bounds: + lower_bounds.append(lower if lower is not None else -2 * np.pi) + upper_bounds.append(upper if upper is not None else 2 * np.pi) + + # sample from within bounds + point = np.random.uniform(low=lower_bounds, high=upper_bounds).tolist() + + elif len(point) != expected_size: + raise ValueError( + f"The dimension of the initial point ({len(point)}) does not match the " + f"number of parameters in the circuit ({expected_size})." + ) + + return point diff --git a/vqls_prototype/solver/variational_linear_solver.py b/vqls_prototype/solver/variational_linear_solver.py index c0057d3..f47aacd 100644 --- a/vqls_prototype/solver/variational_linear_solver.py +++ b/vqls_prototype/solver/variational_linear_solver.py @@ -17,7 +17,7 @@ import numpy as np from qiskit import QuantumCircuit -from qiskit.algorithms.variational_algorithm import VariationalResult +from qiskit_algorithms.variational_algorithm import VariationalResult class VariationalLinearSolverResult(VariationalResult): diff --git a/vqls_prototype/solver/vqls.py b/vqls_prototype/solver/vqls.py index 08ab05e..ff395b9 100644 --- a/vqls_prototype/solver/vqls.py +++ b/vqls_prototype/solver/vqls.py @@ -7,18 +7,14 @@ See https://arxiv.org/abs/1909.05820 """ - from typing import Optional, Union, List, Callable, Dict, Tuple import numpy as np from qiskit import QuantumCircuit from qiskit.primitives import BaseEstimator, BaseSampler -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 Statevector -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 ( @@ -48,7 +44,7 @@ DirectHadamardTest, BatchDirectHadammardTest, ) - +from .validation import validate_initial_point from .base_solver import BaseSolver @@ -66,7 +62,7 @@ class 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 @@ -646,9 +642,9 @@ def _solve( np.array([mat_i.coeff for mat_i in self.matrix_circuits]) ) - # 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) + # 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) # Convert the gradient operator into a callable function that is compatible with the # optimization routine. diff --git a/vqls_prototype/tomography/qst.py b/vqls_prototype/tomography/qst.py index 85b3b67..eeaa8bf 100644 --- a/vqls_prototype/tomography/qst.py +++ b/vqls_prototype/tomography/qst.py @@ -50,7 +50,7 @@ def get_density_matrix(self, parameters): Returns: _type_: _description_ """ - qstexp1 = StateTomography(self.circuit.bind_parameters(parameters)) + qstexp1 = StateTomography(self.circuit.assign_parameters(parameters)) qstdata1 = qstexp1.run(self.backend, shots=self.shots).block_for_results() return qstdata1.analysis_results("state").value.data.real diff --git a/vqls_prototype/tomography/simulator_qst.py b/vqls_prototype/tomography/simulator_qst.py index 89cc6b0..548ab2a 100644 --- a/vqls_prototype/tomography/simulator_qst.py +++ b/vqls_prototype/tomography/simulator_qst.py @@ -15,7 +15,9 @@ def get_relative_amplitude_sign(self, parameters): parameters (_type_): _description_ backend (_type_): _description_ """ - state_vector = (Statevector(self.circuit.bind_parameters(parameters))).data.real + state_vector = ( + Statevector(self.circuit.assign_parameters(parameters)) + ).data.real return np.sign(state_vector) def get_statevector(self, parameters, **kwargs): # pylint: disable=unused-argument @@ -26,4 +28,4 @@ def get_statevector(self, parameters, **kwargs): # pylint: disable=unused-argum parameters (_type_): _description_ backend (_type_): _description_ """ - return (Statevector(self.circuit.bind_parameters(parameters))).data.real + return (Statevector(self.circuit.assign_parameters(parameters))).data.real