Exemplo n.º 1
0
def test_low_rank_trotter_ansatz_params():

    n = openfermion.count_qubits(lih_hamiltonian)
    final_rank = 2
    ansatz = LowRankTrotterAnsatz(lih_hamiltonian,
                                  final_rank=final_rank,
                                  include_all_cz=True,
                                  include_all_z=True)
    assert len(list(ansatz.params())) == n + final_rank * (n + n *
                                                           (n - 1) // 2)

    ansatz = LowRankTrotterAnsatz(lih_hamiltonian, final_rank=2)
    assert set(ansatz.params()) == {
        cirq.Symbol(name)
        for name in {
            'U_0_0', 'U_0_0_0', 'U_0_1_0', 'U_1_0', 'U_1_0_0', 'U_1_1_0',
            'U_2_0', 'U_2_0_0', 'U_2_1_0', 'U_3_0', 'U_3_0_0', 'U_3_1_0',
            'V_0_1_0_0', 'V_0_1_1_0', 'V_0_2_0_0', 'V_0_2_1_0', 'V_0_3_0_0',
            'V_0_3_1_0', 'V_1_2_0_0', 'V_1_2_1_0', 'V_1_3_0_0', 'V_1_3_1_0',
            'V_2_3_0_0', 'V_2_3_1_0'
        }
    }
Exemplo n.º 2
0
def test_swap_network_trotter_ansatz_default_initial_params_length():

    ansatz = LowRankTrotterAnsatz(lih_hamiltonian)
    assert len(ansatz.default_initial_params()) == len(list(ansatz.params()))
Exemplo n.º 3
0
def test_low_rank_trotter_ansatz_param_bounds():

    ansatz = LowRankTrotterAnsatz(lih_hamiltonian, final_rank=2)
    assert ansatz.param_bounds() == [(-1.0, 1.0)] * len(list(ansatz.params()))
Exemplo n.º 4
0
def test_low_rank_trotter_ansatz_circuit():

    ansatz = LowRankTrotterAnsatz(lih_hamiltonian, final_rank=2)
    circuit = ansatz.circuit
    cirq.DropNegligible().optimize_circuit(circuit)
    assert circuit.to_text_diagram(transpose=True).strip() == """
0         1           2           3
│         │           │           │
Z         Z           Z           Z
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
YXXY──────#2^0.0813   │           │
│         │           │           │
Z^U_0_0   │           YXXY────────#2^-0.0813
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
│         Z^U_1_0     │           Z^U_3_0
│         │           │           │
│         │           Z^U_2_0     │
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
YXXY──────#2^-0.051   │           │
│         │           │           │
│         │           YXXY────────#2^0.051
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
@─────────@^V_0_1_0_0 │           │
│         │           │           │
×─────────×           @───────────@^V_2_3_0_0
│         │           │           │
│         │           ×───────────×
│         │           │           │
│         @───────────@^V_0_3_0_0 │
│         │           │           │
│         ×───────────×           │
│         │           │           │
@─────────@^V_1_3_0_0 @───────────@^V_0_2_0_0
│         │           │           │
×─────────×           ×───────────×
│         │           │           │
Z^U_3_0_0 @───────────@^V_1_2_0_0 Z^U_0_0_0
│         │           │           │
│         ×───────────×           │
│         │           │           │
│         Z^U_2_0_0   Z^U_1_0_0   │
│         │           │           │
│         Z           Z           │
│         │           │           │
│         #2──────────YXXY^-1     │
│         │           │           │
│         │           #2──────────YXXY^-0.95
│         │           │           │
#2────────YXXY^0.95   │           │
│         │           │           │
│         #2──────────YXXY^-1     │
│         │           │           │
│         │           @───────────@^V_0_1_1_0
│         │           │           │
@─────────@^V_2_3_1_0 ×───────────×
│         │           │           │
×─────────×           │           │
│         │           │           │
│         @───────────@^V_0_3_1_0 │
│         │           │           │
│         ×───────────×           │
│         │           │           │
@─────────@^V_0_2_1_0 @───────────@^V_1_3_1_0
│         │           │           │
×─────────×           ×───────────×
│         │           │           │
Z^U_0_1_0 @───────────@^V_1_2_1_0 Z^U_3_1_0
│         │           │           │
│         ×───────────×           │
│         │           │           │
│         Z^U_1_1_0   Z^U_2_1_0   │
│         │           │           │
│         Z           Z           │
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
YXXY──────#2^-0.918   │           │
│         │           │           │
│         │           YXXY────────#2^0.918
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
""".strip()

    ansatz = LowRankTrotterAnsatz(lih_hamiltonian,
                                  final_rank=1,
                                  include_all_cz=True,
                                  include_all_z=True,
                                  iterations=2)
    circuit = ansatz.circuit
    cirq.DropNegligible().optimize_circuit(circuit)
    assert circuit.to_text_diagram(transpose=True).strip() == """
0         1            2           3
│         │            │           │
Z         Z            Z           Z
│         │            │           │
│         YXXY─────────#2^-1       │
│         │            │           │
YXXY──────#2^0.0813    │           │
│         │            │           │
Z^U_0_0   │            YXXY────────#2^-0.0813
│         │            │           │
│         YXXY─────────#2^-1       │
│         │            │           │
│         Z^U_1_0      │           Z^U_3_0
│         │            │           │
│         │            Z^U_2_0     │
│         │            │           │
│         YXXY─────────#2^-1       │
│         │            │           │
YXXY──────#2^-0.051    │           │
│         │            │           │
│         │            YXXY────────#2^0.051
│         │            │           │
│         YXXY─────────#2^-1       │
│         │            │           │
@─────────@^V_0_1_0_0  │           │
│         │            │           │
×─────────×            @───────────@^V_2_3_0_0
│         │            │           │
│         │            ×───────────×
│         │            │           │
│         @────────────@^V_0_3_0_0 │
│         │            │           │
│         ×────────────×           │
│         │            │           │
@─────────@^V_1_3_0_0  @───────────@^V_0_2_0_0
│         │            │           │
×─────────×            ×───────────×
│         │            │           │
Z^U_3_0_0 @────────────@^V_1_2_0_0 Z^U_0_0_0
│         │            │           │
Z         ×────────────×           Z
│         │            │           │
│         Z^U_2_0_0    Z^U_1_0_0   │
│         │            │           │
│         #2───────────YXXY^-1     │
│         │            │           │
│         │            #2──────────YXXY^0.132
│         │            │           │
#2────────YXXY^-0.132  │           Z
│         │            │           │
│         #2───────────YXXY^-1     │
│         │            │           │
Z         │            Z           │
│         │            │           │
│         Z            │           │
│         │            │           │
│         #2───────────YXXY^-1     │
│         │            │           │
│         │            #2──────────YXXY^0.0813
│         │            │           │
#2────────YXXY^-0.0813 │           Z^U_0_1
│         │            │           │
│         #2───────────YXXY^-1     │
│         │            │           │
Z^U_3_1   │            Z^U_1_1     │
│         │            │           │
│         Z^U_2_1      │           │
│         │            │           │
│         #2───────────YXXY^-1     │
│         │            │           │
│         │            #2──────────YXXY^-0.051
│         │            │           │
#2────────YXXY^0.051   │           │
│         │            │           │
│         #2───────────YXXY^-1     │
│         │            │           │
│         │            @───────────@^V_0_1_0_1
│         │            │           │
@─────────@^V_2_3_0_1  ×───────────×
│         │            │           │
×─────────×            │           │
│         │            │           │
│         @────────────@^V_0_3_0_1 │
│         │            │           │
│         ×────────────×           │
│         │            │           │
@─────────@^V_0_2_0_1  @───────────@^V_1_3_0_1
│         │            │           │
×─────────×            ×───────────×
│         │            │           │
Z^U_0_0_1 @────────────@^V_1_2_0_1 Z^U_3_0_1
│         │            │           │
Z         ×────────────×           Z
│         │            │           │
│         Z^U_1_0_1    Z^U_2_0_1   │
│         │            │           │
│         YXXY─────────#2^-1       │
│         │            │           │
YXXY──────#2^0.132     │           │
│         │            │           │
│         │            YXXY────────#2^-0.132
│         │            │           │
│         YXXY─────────#2^-1       │
│         │            │           │
""".strip()
Exemplo n.º 5
0
def test_low_rank_trotter_ansatz_circuit():

    ansatz = LowRankTrotterAnsatz(lih_hamiltonian, final_rank=2)
    circuit = ansatz.circuit
    cirq.DropNegligible().optimize_circuit(circuit)
    cirq.testing.assert_has_diagram(circuit,
                                    """
0         1           2           3
│         │           │           │
Rz(π)     Rz(π)       Rz(π)       Rz(π)
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
YXXY──────#2^0.081    │           │
│         │           │           │
Z^U_0_0   │           YXXY────────#2^-0.081
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
│         Z^U_1_0     │           Z^U_3_0
│         │           │           │
│         │           Z^U_2_0     │
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
YXXY──────#2^-0.051   │           │
│         │           │           │
│         │           YXXY────────#2^0.051
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
@─────────@^V_0_1_0_0 │           │
│         │           │           │
×─────────×           @───────────@^V_2_3_0_0
│         │           │           │
│         │           ×───────────×
│         │           │           │
│         @───────────@^V_0_3_0_0 │
│         │           │           │
│         ×───────────×           │
│         │           │           │
@─────────@^V_1_3_0_0 @───────────@^V_0_2_0_0
│         │           │           │
×─────────×           ×───────────×
│         │           │           │
Z^U_3_0_0 @───────────@^V_1_2_0_0 Z^U_0_0_0
│         │           │           │
│         ×───────────×           │
│         │           │           │
│         Z^U_2_0_0   Z^U_1_0_0   │
│         │           │           │
│         Rz(π)       Rz(π)       │
│         │           │           │
│         #2──────────YXXY^-1     │
│         │           │           │
│         │           #2──────────YXXY^-0.95
│         │           │           │
#2────────YXXY^0.95   │           │
│         │           │           │
│         #2──────────YXXY^-1     │
│         │           │           │
│         │           @───────────@^V_0_1_1_0
│         │           │           │
@─────────@^V_2_3_1_0 ×───────────×
│         │           │           │
×─────────×           │           │
│         │           │           │
│         @───────────@^V_0_3_1_0 │
│         │           │           │
│         ×───────────×           │
│         │           │           │
@─────────@^V_0_2_1_0 @───────────@^V_1_3_1_0
│         │           │           │
×─────────×           ×───────────×
│         │           │           │
Z^U_0_1_0 @───────────@^V_1_2_1_0 Z^U_3_1_0
│         │           │           │
│         ×───────────×           │
│         │           │           │
│         Z^U_1_1_0   Z^U_2_1_0   │
│         │           │           │
│         Rz(π)       Rz(π)       │
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
YXXY──────#2^-0.918   │           │
│         │           │           │
│         │           YXXY────────#2^0.918
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
""",
                                    transpose=True)

    ansatz = LowRankTrotterAnsatz(lih_hamiltonian,
                                  final_rank=1,
                                  include_all_cz=True,
                                  include_all_z=True,
                                  iterations=2)
    circuit = ansatz.circuit
    cirq.DropNegligible().optimize_circuit(circuit)
    cirq.testing.assert_has_diagram(circuit,
                                    """
0         1           2           3
│         │           │           │
Rz(π)     Rz(π)       Rz(π)       Rz(π)
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
YXXY──────#2^0.081    │           │
│         │           │           │
Z^U_0_0   │           YXXY────────#2^-0.081
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
│         Z^U_1_0     │           Z^U_3_0
│         │           │           │
│         │           Z^U_2_0     │
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
YXXY──────#2^-0.051   │           │
│         │           │           │
│         │           YXXY────────#2^0.051
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
@─────────@^V_0_1_0_0 │           │
│         │           │           │
×─────────×           @───────────@^V_2_3_0_0
│         │           │           │
│         │           ×───────────×
│         │           │           │
│         @───────────@^V_0_3_0_0 │
│         │           │           │
│         ×───────────×           │
│         │           │           │
@─────────@^V_1_3_0_0 @───────────@^V_0_2_0_0
│         │           │           │
×─────────×           ×───────────×
│         │           │           │
Z^U_3_0_0 @───────────@^V_1_2_0_0 Z^U_0_0_0
│         │           │           │
Rz(π)     ×───────────×           Rz(π)
│         │           │           │
│         Z^U_2_0_0   Z^U_1_0_0   │
│         │           │           │
│         #2──────────YXXY^-1     │
│         │           │           │
│         │           #2──────────YXXY^0.132
│         │           │           │
#2────────YXXY^-0.132 │           Rz(π)
│         │           │           │
│         #2──────────YXXY^-1     │
│         │           │           │
Rz(π)     │           Rz(π)       │
│         │           │           │
│         Rz(π)       │           │
│         │           │           │
│         #2──────────YXXY^-1     │
│         │           │           │
│         │           #2──────────YXXY^0.081
│         │           │           │
#2────────YXXY^-0.081 │           Z^U_0_1
│         │           │           │
│         #2──────────YXXY^-1     │
│         │           │           │
Z^U_3_1   │           Z^U_1_1     │
│         │           │           │
│         Z^U_2_1     │           │
│         │           │           │
│         #2──────────YXXY^-1     │
│         │           │           │
│         │           #2──────────YXXY^-0.051
│         │           │           │
#2────────YXXY^0.051  │           │
│         │           │           │
│         #2──────────YXXY^-1     │
│         │           │           │
│         │           @───────────@^V_0_1_0_1
│         │           │           │
@─────────@^V_2_3_0_1 ×───────────×
│         │           │           │
×─────────×           │           │
│         │           │           │
│         @───────────@^V_0_3_0_1 │
│         │           │           │
│         ×───────────×           │
│         │           │           │
@─────────@^V_0_2_0_1 @───────────@^V_1_3_0_1
│         │           │           │
×─────────×           ×───────────×
│         │           │           │
Z^U_0_0_1 @───────────@^V_1_2_0_1 Z^U_3_0_1
│         │           │           │
Rz(π)     ×───────────×           Rz(π)
│         │           │           │
│         Z^U_1_0_1   Z^U_2_0_1   │
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
YXXY──────#2^0.132    │           │
│         │           │           │
│         │           YXXY────────#2^-0.132
│         │           │           │
│         YXXY────────#2^-1       │
│         │           │           │
""",
                                    transpose=True)