def test_swap_network_trotter_ansatz_param_bounds(): ansatz = SwapNetworkTrotterAnsatz(hubbard_hamiltonian) assert list(symbol.name for symbol in ansatz.params()) == [ 'V_0_1_0', 'T_0_2_0', 'T_0_4_0', 'T_1_3_0', 'T_1_5_0', 'V_2_3_0', 'T_2_6_0', 'T_3_7_0', 'V_4_5_0', 'T_4_6_0', 'T_5_7_0', 'V_6_7_0' ] assert ansatz.param_bounds() == [(-1.0, 1.0), (-2.0, 2.0), (-2.0, 2.0), (-2.0, 2.0), (-2.0, 2.0), (-1.0, 1.0), (-2.0, 2.0), (-2.0, 2.0), (-1.0, 1.0), (-2.0, 2.0), (-2.0, 2.0), (-1.0, 1.0)]
def test_swap_network_trotter_ansatz_param_bounds(): ansatz = SwapNetworkTrotterAnsatz(hubbard_hamiltonian) assert ansatz.param_names() == [ 'V0_1', 'T0_2', 'T0_4', 'T1_3', 'T1_5', 'V2_3', 'T2_6', 'T3_7', 'V4_5', 'T4_6', 'T5_7', 'V6_7' ] assert ansatz.param_bounds() == [(-1.0, 1.0), (-2.0, 2.0), (-2.0, 2.0), (-2.0, 2.0), (-2.0, 2.0), (-1.0, 1.0), (-2.0, 2.0), (-2.0, 2.0), (-1.0, 1.0), (-2.0, 2.0), (-2.0, 2.0), (-1.0, 1.0)]
def test_swap_network_trotter_ansatz_parameters(): ansatz = SwapNetworkTrotterAnsatz(hubbard_hamiltonian) assert (set(ansatz.param_names()) == set(ansatz.params.keys()) == {symbol.name for symbol in ansatz.params.values()} == { 'T0_2', 'T4_6', 'T1_3', 'T5_7', 'T0_4', 'T2_6', 'T1_5', 'T3_7', 'V0_1', 'V2_3', 'V4_5', 'V6_7' }) ansatz = SwapNetworkTrotterAnsatz(hubbard_hamiltonian, iterations=2) assert (set(ansatz.param_names()) == set(ansatz.params.keys()) == {symbol.name for symbol in ansatz.params.values()} == { 'T0_2-0', 'T4_6-0', 'T1_3-0', 'T5_7-0', 'T0_4-0', 'T2_6-0', 'T1_5-0', 'T3_7-0', 'V0_1-0', 'V2_3-0', 'V4_5-0', 'V6_7-0', 'T0_2-1', 'T4_6-1', 'T1_3-1', 'T5_7-1', 'T0_4-1', 'T2_6-1', 'T1_5-1', 'T3_7-1', 'V0_1-1', 'V2_3-1', 'V4_5-1', 'V6_7-1' })
def test_swap_network_trotter_ansatz_params(): ansatz = SwapNetworkTrotterAnsatz(hubbard_hamiltonian) assert (set(ansatz.params()) == { cirq.Symbol(name) for name in { 'T_0_2_0', 'T_4_6_0', 'T_1_3_0', 'T_5_7_0', 'T_0_4_0', 'T_2_6_0', 'T_1_5_0', 'T_3_7_0', 'V_0_1_0', 'V_2_3_0', 'V_4_5_0', 'V_6_7_0' } }) ansatz = SwapNetworkTrotterAnsatz(hubbard_hamiltonian, iterations=2) assert (set(ansatz.params()) == { cirq.Symbol(name) for name in { 'T_0_2_0', 'T_4_6_0', 'T_1_3_0', 'T_5_7_0', 'T_0_4_0', 'T_2_6_0', 'T_1_5_0', 'T_3_7_0', 'V_0_1_0', 'V_2_3_0', 'V_4_5_0', 'V_6_7_0', 'T_0_2_1', 'T_4_6_1', 'T_1_3_1', 'T_5_7_1', 'T_0_4_1', 'T_2_6_1', 'T_1_5_1', 'T_3_7_1', 'V_0_1_1', 'V_2_3_1', 'V_4_5_1', 'V_6_7_1' } })
def test_swap_network_trotter_ansatz_circuit(): complete_ansatz = SwapNetworkTrotterAnsatz(zero_hamiltonian, include_all_xxyy=True, include_all_yxxy=True, include_all_cz=True, include_all_z=True) circuit = complete_ansatz.circuit assert circuit.to_text_diagram(transpose=True).strip() == """ 0 1 2 3 │ │ │ │ XXYY────XXYY^T_0_1_0 XXYY─────────XXYY^T_2_3_0 │ │ │ │ YXXY────#2^W_0_1_0 YXXY─────────#2^W_2_3_0 │ │ │ │ @───────@^V_0_1_0 @────────────@^V_2_3_0 │ │ │ │ ×ᶠ──────×ᶠ ×ᶠ───────────×ᶠ │ │ │ │ │ XXYY─────────XXYY^T_0_3_0 │ │ │ │ │ │ YXXY─────────#2^W_0_3_0 │ │ │ │ │ │ @────────────@^V_0_3_0 │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ │ │ │ XXYY────XXYY^T_1_3_0 XXYY─────────XXYY^T_0_2_0 │ │ │ │ YXXY────#2^W_1_3_0 YXXY─────────#2^W_0_2_0 │ │ │ │ @───────@^V_1_3_0 @────────────@^V_0_2_0 │ │ │ │ ×ᶠ──────×ᶠ ×ᶠ───────────×ᶠ │ │ │ │ Z^U_3_0 XXYY─────────XXYY^T_1_2_0 Z^U_0_0 │ │ │ │ │ YXXY─────────#2^W_1_2_0 │ │ │ │ │ │ @────────────@^V_1_2_0 │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ │ │ │ │ Z^U_2_0 Z^U_1_0 │ │ │ │ │ │ @────────────@^V_1_2_0 │ │ │ │ │ │ #2───────────YXXY^W_1_2_0 │ │ │ │ │ │ XXYY─────────XXYY^T_1_2_0 │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ │ │ │ @───────@^V_1_3_0 @────────────@^V_0_2_0 │ │ │ │ #2──────YXXY^W_1_3_0 #2───────────YXXY^W_0_2_0 │ │ │ │ XXYY────XXYY^T_1_3_0 XXYY─────────XXYY^T_0_2_0 │ │ │ │ ×ᶠ──────×ᶠ ×ᶠ───────────×ᶠ │ │ │ │ │ @────────────@^V_0_3_0 │ │ │ │ │ │ #2───────────YXXY^W_0_3_0 │ │ │ │ │ │ XXYY─────────XXYY^T_0_3_0 │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ │ │ │ @───────@^V_0_1_0 @────────────@^V_2_3_0 │ │ │ │ #2──────YXXY^W_0_1_0 #2───────────YXXY^W_2_3_0 │ │ │ │ XXYY────XXYY^T_0_1_0 XXYY─────────XXYY^T_2_3_0 │ │ │ │ ×ᶠ──────×ᶠ ×ᶠ───────────×ᶠ │ │ │ │ """.strip() hubbard_ansatz = SwapNetworkTrotterAnsatz(hubbard_hamiltonian, iterations=2) circuit = hubbard_ansatz.circuit assert circuit.to_text_diagram(transpose=True).strip() == """ 0 1 2 3 4 5 6 7 │ │ │ │ │ │ │ │ @────@^V_0_1_0 @────────────@^V_2_3_0 @──@^V_4_5_0 @────────────@^V_6_7_0 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ ×ᶠ────────×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T_1_3_0 ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ XXYY─────────XXYY^T_4_6_0 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ────────×ᶠ │ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─────────XXYY^T_1_5_0 │ │ XXYY──────XXYY^T_2_6_0 │ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─────────XXYY^T_3_7_0 ×ᶠ────────×ᶠ XXYY──────XXYY^T_0_4_0 │ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T_5_7_0 ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ XXYY─────────XXYY^T_0_2_0 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ────────×ᶠ │ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ ×ᶠ────────×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T_5_7_0 ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ XXYY─────────XXYY^T_0_2_0 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ────────×ᶠ │ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─────────XXYY^T_3_7_0 │ │ XXYY──────XXYY^T_0_4_0 │ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─────────XXYY^T_1_5_0 ×ᶠ────────×ᶠ XXYY──────XXYY^T_2_6_0 │ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T_1_3_0 ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ XXYY─────────XXYY^T_4_6_0 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ────────×ᶠ │ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ @────@^V_0_1_0 @────────────@^V_2_3_0 @──@^V_4_5_0 @────────────@^V_6_7_0 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ @────@^V_0_1_1 @────────────@^V_2_3_1 @──@^V_4_5_1 @────────────@^V_6_7_1 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ ×ᶠ────────×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T_1_3_1 ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ XXYY─────────XXYY^T_4_6_1 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ────────×ᶠ │ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─────────XXYY^T_1_5_1 │ │ XXYY──────XXYY^T_2_6_1 │ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─────────XXYY^T_3_7_1 ×ᶠ────────×ᶠ XXYY──────XXYY^T_0_4_1 │ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T_5_7_1 ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ XXYY─────────XXYY^T_0_2_1 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ────────×ᶠ │ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ ×ᶠ────────×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T_5_7_1 ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ XXYY─────────XXYY^T_0_2_1 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ────────×ᶠ │ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─────────XXYY^T_3_7_1 │ │ XXYY──────XXYY^T_0_4_1 │ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─────────XXYY^T_1_5_1 ×ᶠ────────×ᶠ XXYY──────XXYY^T_2_6_1 │ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T_1_3_1 ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ XXYY─────────XXYY^T_4_6_1 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ────────×ᶠ │ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ───────────×ᶠ │ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ @────@^V_0_1_1 @────────────@^V_2_3_1 @──@^V_4_5_1 @────────────@^V_6_7_1 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ───────────×ᶠ ×ᶠ─×ᶠ ×ᶠ───────────×ᶠ │ │ │ │ │ │ │ │ """.strip()
def test_swap_network_trotter_ansatz_default_initial_params_length(): ansatz = SwapNetworkTrotterAnsatz(hubbard_hamiltonian, include_all_yxxy=True, include_all_z=True) assert len(ansatz.default_initial_params()) == len(list(ansatz.params()))
def test_swap_network_trotter_ansatz_circuit(): complete_ansatz = SwapNetworkTrotterAnsatz(zero_hamiltonian, include_all_xxyy=True, include_all_yxxy=True, include_all_cz=True, include_all_z=True) circuit = complete_ansatz.circuit assert circuit.to_text_diagram(transpose=True).strip() == """ 0 1 2 3 4 │ │ │ │ │ XXYY─XXYY^T0_1 XXYY──────XXYY^T2_3 │ │ │ │ │ │ YXXY─#2^W0_1 YXXY──────#2^W2_3 │ │ │ │ │ │ @────@^V0_1 @─────────@^V2_3 │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ XXYY──────XXYY^T0_3 XXYY──────XXYY^T2_4 │ │ │ │ │ │ YXXY──────#2^W0_3 YXXY──────#2^W2_4 │ │ │ │ │ │ @─────────@^V0_3 @─────────@^V2_4 │ │ │ │ │ │ ×ᶠ────────×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ XXYY─XXYY^T1_3 XXYY──────XXYY^T0_4 │ │ │ │ │ │ YXXY─#2^W1_3 YXXY──────#2^W0_4 │ │ │ │ │ │ @────@^V1_3 @─────────@^V0_4 │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ XXYY──────XXYY^T1_4 XXYY──────XXYY^T0_2 │ │ │ │ │ │ YXXY──────#2^W1_4 YXXY──────#2^W0_2 │ │ │ │ │ │ @─────────@^V1_4 @─────────@^V0_2 │ │ │ │ │ │ ×ᶠ────────×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ XXYY─XXYY^T3_4 XXYY──────XXYY^T1_2 Z^U0 │ │ │ │ │ YXXY─#2^W3_4 YXXY──────#2^W1_2 │ │ │ │ │ │ @────@^V3_4 @─────────@^V1_2 │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ Z^U4 Z^U3 Z^U2 Z^U1 │ │ │ │ │ │ @────@^V3_4 @─────────@^V1_2 │ │ │ │ │ │ #2───YXXY^W3_4 #2────────YXXY^W1_2 │ │ │ │ │ │ XXYY─XXYY^T3_4 XXYY──────XXYY^T1_2 │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ @─────────@^V1_4 @─────────@^V0_2 │ │ │ │ │ │ #2────────YXXY^W1_4 #2────────YXXY^W0_2 │ │ │ │ │ │ XXYY──────XXYY^T1_4 XXYY──────XXYY^T0_2 │ │ │ │ │ │ ×ᶠ────────×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ @────@^V1_3 @─────────@^V0_4 │ │ │ │ │ │ #2───YXXY^W1_3 #2────────YXXY^W0_4 │ │ │ │ │ │ XXYY─XXYY^T1_3 XXYY──────XXYY^T0_4 │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ @─────────@^V0_3 @─────────@^V2_4 │ │ │ │ │ │ #2────────YXXY^W0_3 #2────────YXXY^W2_4 │ │ │ │ │ │ XXYY──────XXYY^T0_3 XXYY──────XXYY^T2_4 │ │ │ │ │ │ ×ᶠ────────×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ @────@^V0_1 @─────────@^V2_3 │ │ │ │ │ │ #2───YXXY^W0_1 #2────────YXXY^W2_3 │ │ │ │ │ │ XXYY─XXYY^T0_1 XXYY──────XXYY^T2_3 │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ """.strip() xxyy_ansatz = SwapNetworkTrotterAnsatz(zero_hamiltonian, include_all_xxyy=True) circuit = xxyy_ansatz.circuit assert circuit.to_text_diagram(transpose=True).strip() == """ 0 1 2 3 4 │ │ │ │ │ XXYY─XXYY^T0_1 XXYY──────XXYY^T2_3 │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ XXYY──────XXYY^T0_3 XXYY──────XXYY^T2_4 │ │ │ │ │ │ ×ᶠ────────×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ XXYY─XXYY^T1_3 XXYY──────XXYY^T0_4 │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ XXYY──────XXYY^T1_4 XXYY──────XXYY^T0_2 │ │ │ │ │ │ ×ᶠ────────×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ XXYY─XXYY^T3_4 XXYY──────XXYY^T1_2 │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ XXYY─XXYY^T3_4 XXYY──────XXYY^T1_2 │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ XXYY──────XXYY^T1_4 XXYY──────XXYY^T0_2 │ │ │ │ │ │ ×ᶠ────────×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ XXYY─XXYY^T1_3 XXYY──────XXYY^T0_4 │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ XXYY──────XXYY^T0_3 XXYY──────XXYY^T2_4 │ │ │ │ │ │ ×ᶠ────────×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ XXYY─XXYY^T0_1 XXYY──────XXYY^T2_3 │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ """.strip() hubbard_ansatz = SwapNetworkTrotterAnsatz(hubbard_hamiltonian) circuit = hubbard_ansatz.circuit assert circuit.to_text_diagram(transpose=True).strip() == """ 0 1 2 3 4 5 6 7 │ │ │ │ │ │ │ │ @────@^V0_1 @─────────@^V2_3 @──@^V4_5 @─────────@^V6_7 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ ×ᶠ─×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ ×ᶠ─────×ᶠ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T1_3 ×ᶠ────────×ᶠ ×ᶠ─×ᶠ XXYY──────XXYY^T4_6 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ─────×ᶠ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY──────XXYY^T1_5 │ │ XXYY───XXYY^T2_6 │ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ │ │ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ ×ᶠ─×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY──────XXYY^T3_7 ×ᶠ─────×ᶠ XXYY───XXYY^T0_4 │ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ │ │ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T5_7 ×ᶠ────────×ᶠ ×ᶠ─×ᶠ XXYY──────XXYY^T0_2 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ─────×ᶠ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ ×ᶠ─────×ᶠ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ │ │ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T5_7 ×ᶠ────────×ᶠ ×ᶠ─×ᶠ XXYY──────XXYY^T0_2 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ─────×ᶠ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY──────XXYY^T3_7 │ │ XXYY───XXYY^T0_4 │ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ │ │ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ ×ᶠ─×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY──────XXYY^T1_5 ×ᶠ─────×ᶠ XXYY───XXYY^T2_6 │ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ │ │ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T1_3 ×ᶠ────────×ᶠ ×ᶠ─×ᶠ XXYY──────XXYY^T4_6 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ─────×ᶠ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ │ │ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ @────@^V0_1 @─────────@^V2_3 @──@^V4_5 @─────────@^V6_7 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ ×ᶠ─×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ """.strip() hubbard_ansatz_with_z = SwapNetworkTrotterAnsatz(hubbard_hamiltonian, include_all_z=True) circuit = hubbard_ansatz_with_z.circuit assert circuit.to_text_diagram(transpose=True).strip() == """ 0 1 2 3 4 5 6 7 │ │ │ │ │ │ │ │ @────@^V0_1 @─────────@^V2_3 @────@^V4_5 @─────────@^V6_7 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ ×ᶠ─────×ᶠ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T1_3 ×ᶠ────────×ᶠ ×ᶠ───×ᶠ XXYY──────XXYY^T4_6 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ─────×ᶠ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY──────XXYY^T1_5 │ │ XXYY───XXYY^T2_6 │ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ │ │ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY──────XXYY^T3_7 ×ᶠ─────×ᶠ XXYY───XXYY^T0_4 │ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ │ │ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T5_7 ×ᶠ────────×ᶠ ×ᶠ───×ᶠ XXYY──────XXYY^T0_2 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ─────×ᶠ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ Z^U7 ×ᶠ────────×ᶠ Z^U4 Z^U3 ×ᶠ─────×ᶠ Z^U0 │ │ │ │ │ │ │ │ │ Z^U6 Z^U5 ×ᶠ─────×ᶠ Z^U2 Z^U1 │ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ │ │ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T5_7 ×ᶠ────────×ᶠ ×ᶠ───×ᶠ XXYY──────XXYY^T0_2 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ─────×ᶠ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY──────XXYY^T3_7 │ │ XXYY───XXYY^T0_4 │ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ │ │ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ XXYY──────XXYY^T1_5 ×ᶠ─────×ᶠ XXYY───XXYY^T2_6 │ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ │ │ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ XXYY─XXYY^T1_3 ×ᶠ────────×ᶠ ×ᶠ───×ᶠ XXYY──────XXYY^T4_6 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ │ ×ᶠ─────×ᶠ │ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ │ ×ᶠ────────×ᶠ │ │ ×ᶠ─────×ᶠ │ │ │ │ │ │ │ │ │ @────@^V0_1 @─────────@^V2_3 @────@^V4_5 @─────────@^V6_7 │ │ │ │ │ │ │ │ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ ×ᶠ───×ᶠ ×ᶠ────────×ᶠ │ │ │ │ │ │ │ │ """.strip()