Beispiel #1
0
    def define_noisy_readout(self, qubit: Union[int, QubitPlaceholder],
                             p00: float, p11: float) -> "Program":
        """
        For this program define a classical bit flip readout error channel parametrized by
        ``p00`` and ``p11``. This models the effect of thermal noise that corrupts the readout
        signal **after** it has interrogated the qubit.

        :param qubit: The qubit with noisy readout.
        :param p00: The probability of obtaining the measurement result 0 given that the qubit
          is in state 0.
        :param p11: The probability of obtaining the measurement result 1 given that the qubit
          is in state 1.
        :return: The Program with an appended READOUT-POVM Pragma.
        """
        if not 0.0 <= p00 <= 1.0:
            raise ValueError("p00 must be in the interval [0,1].")
        if not 0.0 <= p11 <= 1.0:
            raise ValueError("p11 must be in the interval [0,1].")
        if not (isinstance(qubit, int) or isinstance(qubit, QubitPlaceholder)):
            raise TypeError(
                "qubit must be a non-negative integer, or QubitPlaceholder.")
        if isinstance(qubit, int) and qubit < 0:
            raise ValueError("qubit cannot be negative.")
        p00 = float(p00)
        p11 = float(p11)
        aprobs = [p00, 1.0 - p11, 1.0 - p00, p11]
        aprobs_str = "({})".format(" ".join(
            format_parameter(p) for p in aprobs))
        pragma = Pragma("READOUT-POVM", [qubit], aprobs_str)
        return self.inst(pragma)
def test_pretty_print_pi():
    test_cases = [
        (0.0, "0"),
        (pi, "pi"),
        (-pi, "-pi"),
        (2 * pi / 3.0, "2*pi/3"),
        (pi / 9, "0.3490658503988659"),
        (pi / 8, "pi/8"),
        (-90 * pi / 2, "-45*pi"),
    ]

    for test_case in test_cases:
        assert format_parameter(test_case[0]) == test_case[1]
def test_format_parameter():
    test_cases = [
        (1, "1"),
        (1.0, "1.0"),
        (1j, "i"),
        (0 + 1j, "i"),
        (-1j, "-i"),
        (1e-15 + 1j, "i"),
        (1e-15 - 1j, "-i"),
    ]

    for test_case in test_cases:
        assert format_parameter(test_case[0]) == test_case[1]
Beispiel #4
0
def test_pretty_print_pi():
    test_cases = [
        (0., '0'),
        (pi, 'pi'),
        (-pi, '-pi'),
        (2 * pi / 3., '2*pi/3'),
        (pi / 9, '0.3490658503988659'),
        (pi / 8, 'pi/8'),
        (-90 * pi / 2, '-45*pi'),
    ]

    for test_case in test_cases:
        assert format_parameter(test_case[0]) == test_case[1]
Beispiel #5
0
        def format_matrix_element(element: Union[ExpressionDesignator, str]) -> str:
            """
            Formats a parameterized matrix element.

            :param element: The parameterized element to format.
            """
            if isinstance(element, (int, float, complex, np.int_)):
                return format_parameter(element)
            elif isinstance(element, str):
                return element
            elif isinstance(element, Expression):
                return str(element)
            else:
                raise TypeError("Invalid matrix element: %r" % element)
Beispiel #6
0
        def format_matrix_element(element):
            """
            Formats a parameterized matrix element.

            :param element: {int, float, complex, str} The parameterized element to format.
            """
            if isinstance(element, integer_types) or isinstance(
                    element, (float, complex, np.int_)):
                return format_parameter(element)
            elif isinstance(element, string_types):
                return element
            elif isinstance(element, Expression):
                return str(element)
            else:
                raise TypeError("Invalid matrix element: %r" % element)
Beispiel #7
0
def _format_params(params):
    return "(" + ",".join(format_parameter(param) for param in params) + ")"
Beispiel #8
0
def _format_params(params: Iterable[ParameterDesignator]) -> str:
    return "(" + ",".join(format_parameter(param) for param in params) + ")"
Beispiel #9
0
def _format_parameter(param, settings=None):
    formatted = format_parameter(param)
    if settings and settings.texify_numerical_constants:
        formatted = formatted.replace("pi", r"\pi")
    return formatted
Beispiel #10
0
def _format_parameter(param: ParameterDesignator,
                      settings: Optional[DiagramSettings] = None) -> str:
    formatted = format_parameter(param)
    if settings and settings.texify_numerical_constants:
        formatted = formatted.replace("pi", r"\pi")
    return formatted
Beispiel #11
0
def test_format_parameter():
    test_cases = [(1, '1'), (1.0, '1.0'), (1j, 'i'), (0 + 1j, 'i'),
                  (-1j, '-i'), (1e-15 + 1j, 'i'), (1e-15 - 1j, '-i')]

    for test_case in test_cases:
        assert format_parameter(test_case[0]) == test_case[1]