Ejemplo n.º 1
0
        def sample_gate(a: cirq.Qid, b: cirq.Qid,
                        gate: cirq.FSimGate) -> PhasedFSimCharacterization:
            assert isinstance(gate,
                              cirq.FSimGate), f'Expected FSimGate, got {gate}'
            assert np.isclose(gate.theta, np.pi / 4) and np.isclose(
                gate.phi, 0.0), f'Expected ISWAP ** -0.5 like gate, got {gate}'

            if (a, b) in parameters:
                pair_parameters = parameters[(a, b)]
                if not isinstance(pair_parameters, PhasedFSimCharacterization):
                    pair_parameters = PhasedFSimCharacterization(
                        **pair_parameters)
            elif (b, a) in parameters:
                pair_parameters = parameters[(b, a)]
                if not isinstance(pair_parameters, PhasedFSimCharacterization):
                    pair_parameters = PhasedFSimCharacterization(
                        **pair_parameters)
                pair_parameters = pair_parameters.parameters_for_qubits_swapped(
                )
            elif ideal_when_missing_gate:
                pair_parameters = SQRT_ISWAP_INV_PARAMETERS
            else:
                raise ValueError(f'Missing parameters for pair {(a, b)}')

            if pair_parameters.any_none():
                if not ideal_when_missing_parameter:
                    raise ValueError(
                        f'Missing parameter value for pair {(a, b)}, '
                        f'parameters={pair_parameters}')
                pair_parameters = pair_parameters.merge_with(
                    SQRT_ISWAP_INV_PARAMETERS)

            return pair_parameters
Ejemplo n.º 2
0
        def sample_gate(a: cirq.Qid, b: cirq.Qid,
                        gate: cirq.FSimGate) -> PhasedFSimCharacterization:
            _assert_inv_sqrt_iswap_like(gate)

            if (a, b) in parameters:
                pair_parameters = parameters[(a, b)]
                if not isinstance(pair_parameters, PhasedFSimCharacterization):
                    pair_parameters = PhasedFSimCharacterization(
                        **pair_parameters)
            elif (b, a) in parameters:
                pair_parameters = parameters[(b, a)]
                if not isinstance(pair_parameters, PhasedFSimCharacterization):
                    pair_parameters = PhasedFSimCharacterization(
                        **pair_parameters)
                pair_parameters = pair_parameters.parameters_for_qubits_swapped(
                )
            elif ideal_when_missing_gate:
                pair_parameters = SQRT_ISWAP_INV_PARAMETERS
            else:
                raise ValueError(f'Missing parameters for pair {(a, b)}')

            if pair_parameters.any_none():
                if not ideal_when_missing_parameter:
                    raise ValueError(
                        f'Missing parameter value for pair {(a, b)}, '
                        f'parameters={pair_parameters}')
                pair_parameters = pair_parameters.merge_with(
                    SQRT_ISWAP_INV_PARAMETERS)

            return pair_parameters
Ejemplo n.º 3
0
def test_merge_with():
    characterization = PhasedFSimCharacterization(theta=0.1, zeta=0.2, chi=0.3)
    other = PhasedFSimCharacterization(gamma=0.4, phi=0.5, theta=0.6)
    assert characterization.merge_with(other) == PhasedFSimCharacterization(
        theta=0.1, zeta=0.2, chi=0.3, gamma=0.4, phi=0.5)