예제 #1
0
def test_from_dictionary_sqrt_iswap_fails_when_invalid_parameters() -> None:
    a, b = cirq.LineQubit.range(2)
    parameters_ab = cirq.google.PhasedFSimCharacterization(
        theta=0.6, zeta=0.5, chi=0.4, gamma=0.3, phi=0.2
    )

    with pytest.raises(ValueError):
        PhasedFSimEngineSimulator.create_from_dictionary_sqrt_iswap(
            parameters={(b, a): parameters_ab}
        )
예제 #2
0
def test_floquet_get_calibrations_when_invalid_request_fails() -> None:

    parameters_ab = cirq.google.PhasedFSimCharacterization(theta=0.6,
                                                           zeta=0.5,
                                                           chi=0.4,
                                                           gamma=0.3,
                                                           phi=0.2)

    a, b = cirq.LineQubit.range(2)
    engine_simulator = PhasedFSimEngineSimulator.create_from_dictionary_sqrt_iswap(
        parameters={(a, b): parameters_ab})

    with pytest.raises(ValueError):
        engine_simulator.get_calibrations([
            FloquetPhasedFSimCalibrationRequest(
                gate=cirq.FSimGate(np.pi / 4, 0.5),
                pairs=((a, b), ),
                options=ALL_ANGLES_FLOQUET_PHASED_FSIM_CHARACTERIZATION,
            )
        ])

    with pytest.raises(ValueError):
        engine_simulator.get_calibrations([
            TestPhasedFSimCalibrationRequest(
                gate=cirq.FSimGate(np.pi / 4, 0.5),
                pairs=((a, b), ),
            )
        ])
예제 #3
0
def test_floquet_get_calibrations() -> None:

    parameters_ab = cirq.google.PhasedFSimCharacterization(
        theta=0.6, zeta=0.5, chi=0.4, gamma=0.3, phi=0.2
    )
    parameters_bc = cirq.google.PhasedFSimCharacterization(
        theta=0.8, zeta=-0.5, chi=-0.4, gamma=-0.3, phi=-0.2
    )
    parameters_cd_dict = {'theta': 0.1, 'zeta': 0.2, 'chi': 0.3, 'gamma': 0.4, 'phi': 0.5}
    parameters_cd = cirq.google.PhasedFSimCharacterization(**parameters_cd_dict)

    a, b, c, d = cirq.LineQubit.range(4)
    engine_simulator = PhasedFSimEngineSimulator.create_from_dictionary_sqrt_iswap(
        parameters={(a, b): parameters_ab, (b, c): parameters_bc, (c, d): parameters_cd_dict}
    )

    requests = [_create_sqrt_iswap_request([(a, b), (c, d)]), _create_sqrt_iswap_request([(b, c)])]

    results = engine_simulator.get_calibrations(requests)

    assert results == [
        cirq.google.PhasedFSimCalibrationResult(
            gate=cirq.FSimGate(np.pi / 4, 0.0),
            parameters={(a, b): parameters_ab, (c, d): parameters_cd},
            options=ALL_ANGLES_FLOQUET_PHASED_FSIM_CHARACTERIZATION,
        ),
        cirq.google.PhasedFSimCalibrationResult(
            gate=cirq.FSimGate(np.pi / 4, 0.0),
            parameters={(b, c): parameters_bc},
            options=ALL_ANGLES_FLOQUET_PHASED_FSIM_CHARACTERIZATION,
        ),
    ]
예제 #4
0
def test_from_dictionary_sqrt_iswap_ideal_when_missing_gate_fails() -> None:
    a, b = cirq.LineQubit.range(2)
    circuit = cirq.Circuit(cirq.FSimGate(np.pi / 4, 0.0).on(a, b))

    engine_simulator = PhasedFSimEngineSimulator.create_from_dictionary_sqrt_iswap(parameters={})

    with pytest.raises(ValueError):
        engine_simulator.final_state_vector(circuit)
예제 #5
0
def test_from_dictionary_sqrt_iswap_simulates_correctly() -> None:
    parameters_ab = cirq.google.PhasedFSimCharacterization(theta=0.6,
                                                           zeta=0.5,
                                                           chi=0.4,
                                                           gamma=0.3,
                                                           phi=0.2)
    parameters_bc = cirq.google.PhasedFSimCharacterization(theta=0.8,
                                                           zeta=-0.5,
                                                           chi=-0.4,
                                                           gamma=-0.3,
                                                           phi=-0.2)
    parameters_cd_dict = {
        'theta': 0.1,
        'zeta': 0.2,
        'chi': 0.3,
        'gamma': 0.4,
        'phi': 0.5
    }

    a, b, c, d = cirq.LineQubit.range(4)
    circuit = cirq.Circuit([
        [cirq.X(a), cirq.Y(c)],
        [
            cirq.FSimGate(np.pi / 4, 0.0).on(a, b),
            cirq.FSimGate(np.pi / 4, 0.0).on(d, c)
        ],
        [cirq.FSimGate(np.pi / 4, 0.0).on(b, c)],
        [
            cirq.FSimGate(np.pi / 4, 0.0).on(a, b),
            cirq.FSimGate(np.pi / 4, 0.0).on(c, d)
        ],
    ])
    expected_circuit = cirq.Circuit([
        [cirq.X(a), cirq.X(c)],
        [
            cirq.PhasedFSimGate(**parameters_ab.asdict()).on(a, b),
            cirq.PhasedFSimGate(**parameters_cd_dict).on(c, d),
        ],
        [cirq.PhasedFSimGate(**parameters_bc.asdict()).on(b, c)],
        [
            cirq.PhasedFSimGate(**parameters_ab.asdict()).on(a, b),
            cirq.PhasedFSimGate(**parameters_cd_dict).on(c, d),
        ],
    ])

    engine_simulator = PhasedFSimEngineSimulator.create_from_dictionary_sqrt_iswap(
        parameters={
            (a, b): parameters_ab,
            (b, c): parameters_bc,
            (c, d): parameters_cd_dict
        })

    actual = engine_simulator.final_state_vector(circuit)
    expected = cirq.final_state_vector(expected_circuit)

    assert cirq.allclose_up_to_global_phase(actual, expected)
예제 #6
0
def test_from_dictionary_sqrt_iswap_ideal_when_missing_parameter_fails() -> None:
    parameters_ab = cirq.google.PhasedFSimCharacterization(theta=0.8, zeta=-0.5, chi=-0.4)

    a, b = cirq.LineQubit.range(2)
    circuit = cirq.Circuit(cirq.FSimGate(np.pi / 4, 0.0).on(a, b))

    engine_simulator = PhasedFSimEngineSimulator.create_from_dictionary_sqrt_iswap(
        parameters={(a, b): parameters_ab},
    )

    with pytest.raises(ValueError):
        engine_simulator.final_state_vector(circuit)
예제 #7
0
def test_from_dictionary_sqrt_iswap_ideal_when_missing_simulates_correctly(
) -> None:
    parameters_ab = cirq.google.PhasedFSimCharacterization(theta=0.6,
                                                           zeta=0.5,
                                                           chi=0.4,
                                                           gamma=0.3,
                                                           phi=0.2)
    parameters_bc = cirq.google.PhasedFSimCharacterization(theta=0.8,
                                                           zeta=-0.5,
                                                           chi=-0.4)

    a, b, c, d = cirq.LineQubit.range(4)
    circuit = cirq.Circuit([
        [cirq.X(a), cirq.Y(c)],
        [
            cirq.FSimGate(np.pi / 4, 0.0).on(a, b),
            cirq.FSimGate(np.pi / 4, 0.0).on(c, d)
        ],
        [cirq.FSimGate(np.pi / 4, 0.0).on(b, c)],
    ])
    expected_circuit = cirq.Circuit([
        [cirq.X(a), cirq.X(c)],
        [
            cirq.PhasedFSimGate(**parameters_ab.asdict()).on(a, b),
            cirq.PhasedFSimGate(**SQRT_ISWAP_PARAMETERS.asdict()).on(c, d),
        ],
        [
            cirq.PhasedFSimGate(
                **parameters_bc.merge_with(SQRT_ISWAP_PARAMETERS).asdict()).on(
                    b, c)
        ],
    ])

    engine_simulator = PhasedFSimEngineSimulator.create_from_dictionary_sqrt_iswap(
        parameters={
            (a, b): parameters_ab,
            (b, c): parameters_bc
        },
        ideal_when_missing_parameter=True,
        ideal_when_missing_gate=True,
    )

    actual = engine_simulator.final_state_vector(circuit)
    expected = cirq.final_state_vector(expected_circuit)

    assert cirq.allclose_up_to_global_phase(actual, expected)