Source code for qiskit_algorithms.amplitude_amplifiers.amplitude_amplifier

# This code is part of a Qiskit project.
#
# (C) Copyright IBM 2021, 2023.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

"""The interface for amplification algorithms and results."""
from __future__ import annotations

from abc import ABC, abstractmethod
from typing import Any

from .amplification_problem import AmplificationProblem
from ..algorithm_result import AlgorithmResult


[docs]class AmplitudeAmplifier(ABC): """The interface for amplification algorithms."""
[docs] @abstractmethod def amplify(self, amplification_problem: AmplificationProblem) -> "AmplitudeAmplifierResult": """Run the amplification algorithm. Args: amplification_problem: The amplification problem. Returns: The result as a ``AmplificationResult``, where e.g. the most likely state can be queried as ``result.top_measurement``. """ raise NotImplementedError
class AmplitudeAmplifierResult(AlgorithmResult): """The amplification result base class.""" def __init__(self) -> None: super().__init__() self._top_measurement: str | None = None self._assignment = None self._oracle_evaluation: bool | None = None self._circuit_results: list[dict[str, int]] | None = None self._max_probability: float | None = None @property def top_measurement(self) -> str | None: """The most frequently measured output as bitstring. Returns: The most frequently measured output state. """ return self._top_measurement @top_measurement.setter def top_measurement(self, value: str) -> None: """Set the most frequently measured bitstring. Args: value: A new value for the top measurement. """ self._top_measurement = value @property def assignment(self) -> Any: """The post-processed value of the most likely bitstring. Returns: The output of the ``post_processing`` function of the respective ``AmplificationProblem``, where the input is the ``top_measurement``. The type is the same as the return type of the post-processing function. """ return self._assignment @assignment.setter def assignment(self, value: Any) -> None: """Set the value for the assignment. Args: value: A new value for the assignment/solution. """ self._assignment = value @property def oracle_evaluation(self) -> bool: """Whether the classical oracle evaluation of the top measurement was True or False. Returns: The classical oracle evaluation of the top measurement. """ return self._oracle_evaluation @oracle_evaluation.setter def oracle_evaluation(self, value: bool) -> None: """Set the classical oracle evaluation of the top measurement. Args: value: A new value for the classical oracle evaluation. """ self._oracle_evaluation = value @property def circuit_results(self) -> list[dict[str, int]] | None: """Return the circuit results.""" return self._circuit_results @circuit_results.setter def circuit_results(self, value: list[dict[str, int]]) -> None: """Set the circuit results.""" self._circuit_results = value @property def max_probability(self) -> float: """Return the maximum sampling probability.""" return self._max_probability @max_probability.setter def max_probability(self, value: float) -> None: """Set the maximum sampling probability.""" self._max_probability = value