def test_split_operator_trotter_ansatz_params(): ansatz = SplitOperatorTrotterAnsatz(hubbard_hamiltonian) assert (set(ansatz.params()) == {cirq.Symbol(name) for name in {'U_0_0', 'U_1_0', 'U_6_0', 'U_7_0', 'V_0_1_0', 'V_2_3_0', 'V_4_5_0', 'V_6_7_0'}}) ansatz = SplitOperatorTrotterAnsatz(hubbard_hamiltonian, iterations=2) assert (set(ansatz.params()) == {cirq.Symbol(name) for name in {'U_0_0', 'U_1_0', 'U_6_0', 'U_7_0', 'V_0_1_0', 'V_2_3_0', 'V_4_5_0', 'V_6_7_0', 'U_0_1', 'U_1_1', 'U_6_1', 'U_7_1', 'V_0_1_1', 'V_2_3_1', 'V_4_5_1', 'V_6_7_1'}})
def test_split_operator_trotter_ansatz_parameters(): ansatz = SplitOperatorTrotterAnsatz(hubbard_hamiltonian) assert (set(ansatz.param_names()) == set(ansatz.params.keys()) == { symbol.name for symbol in ansatz.params.values() } == {'U0', 'U1', 'U6', 'U7', 'V0_1', 'V2_3', 'V4_5', 'V6_7'}) ansatz = SplitOperatorTrotterAnsatz(hubbard_hamiltonian, iterations=2) assert (set(ansatz.param_names()) == set(ansatz.params.keys()) == { symbol.name for symbol in ansatz.params.values() } == { 'U0-0', 'U1-0', 'U6-0', 'U7-0', 'V0_1-0', 'V2_3-0', 'V4_5-0', 'V6_7-0', 'U0-1', 'U1-1', 'U6-1', 'U7-1', 'V0_1-1', 'V2_3-1', 'V4_5-1', 'V6_7-1' })
def test_split_operator_trotter_ansatz_param_bounds(): ansatz = SplitOperatorTrotterAnsatz(hubbard_hamiltonian) assert list(symbol.name for symbol in ansatz.params()) == [ 'U_0_0', 'U_1_0', 'U_6_0', 'U_7_0', 'V_0_1_0', 'V_2_3_0', 'V_4_5_0', 'V_6_7_0'] assert ansatz.param_bounds() == [ (-1.0, 1.0), (-1.0, 1.0), (-1.0, 1.0), (-1.0, 1.0), (-1.0, 1.0), (-1.0, 1.0), (-1.0, 1.0), (-1.0, 1.0)]
def test_split_operator_trotter_ansatz_param_bounds(): ansatz = SplitOperatorTrotterAnsatz(hubbard_hamiltonian) assert ansatz.param_names() == [ 'U0', 'U1', 'U6', 'U7', 'V0_1', 'V2_3', 'V4_5', 'V6_7' ] assert ansatz.param_bounds() == [(-1.0, 1.0), (-1.0, 1.0), (-1.0, 1.0), (-1.0, 1.0), (-1.0, 1.0), (-1.0, 1.0), (-1.0, 1.0), (-1.0, 1.0)]
def test_split_operator_trotter_ansatz_circuit(): complete_ansatz = SplitOperatorTrotterAnsatz(ones_hamiltonian, include_all_cz=True, include_all_z=True) circuit = complete_ansatz.circuit cirq.DropNegligible().optimize_circuit(circuit) cirq.testing.assert_has_diagram(circuit, """ 0 1 2 3 4 │ │ │ │ │ │ │ │ YXXY────────#2^0.5 │ │ │ │ │ │ │ YXXY────────#2^0.608 │ │ │ │ │ │ │ │ │ YXXY────────#2^-0.5 │ │ │ │ │ │ YXXY────────#2^-0.019 │ │ │ │ │ │ │ │ │ YXXY────────#2 │ │ │ │ │ │ YXXY────#2^-0.517 │ YXXY────────#2 │ │ │ │ │ Rz(-π) YXXY────────#2 │ │ │ │ │ │ │ Z^U_0_0 │ YXXY────────#2 │ │ │ │ │ │ Rz(π) Z^U_1_0 │ YXXY────────#2^-0.423 │ │ │ │ │ │ │ Z^U_2_0 │ Rz(-π) │ │ │ │ │ │ │ │ Z^U_3_0 Z^U_4_0 │ │ │ │ │ │ │ │ │ Rz(π) │ │ │ │ │ │ │ │ YXXY────────#2^0.423 │ │ │ │ │ │ │ YXXY────────#2^-1 │ │ │ │ │ │ │ YXXY────────#2^-1 │ │ │ │ │ │ │ YXXY────#2^0.517 │ YXXY────────#2^-1 │ │ │ │ │ │ │ YXXY────────#2^-1 │ │ │ │ │ │ │ YXXY────────#2^0.019 │ │ │ │ │ │ │ @───────@^V_0_1_0 │ YXXY────────#2^0.5 │ │ │ │ │ ×───────× YXXY────────#2^-0.608 │ │ │ │ │ │ │ │ │ YXXY────────#2^-0.5 │ │ │ │ │ │ │ @───────────@^V_2_3_0 │ │ │ │ │ │ │ │ ×───────────× │ │ │ │ │ │ │ @───────────@^V_0_3_0 @───────────@^V_2_4_0 │ │ │ │ │ │ ×───────────× ×───────────× │ │ │ │ │ @───────@^V_1_3_0 @───────────@^V_0_4_0 │ │ │ │ │ │ ×───────× ×───────────× │ │ │ │ │ │ │ @───────────@^V_1_4_0 @───────────@^V_0_2_0 │ │ │ │ │ │ ×───────────× ×───────────× │ │ │ │ │ @───────@^V_3_4_0 @───────────@^V_1_2_0 │ │ │ │ │ │ ×───────× ×───────────× │ │ │ │ │ │ #2──────YXXY^0.5 │ │ │ │ │ │ │ │ │ #2──────────YXXY^0.608 │ │ │ │ │ │ │ #2──────YXXY^-0.5 │ │ │ │ │ │ │ │ │ │ #2──────────YXXY^-0.019 │ │ │ │ │ │ │ #2──────────YXXY │ │ │ │ │ │ │ #2──────YXXY │ #2──────────YXXY^-0.517 │ │ │ │ │ │ │ #2──────────YXXY Rz(-π) │ │ │ │ │ │ #2──────────YXXY │ Z^U_0_0 │ │ │ │ │ #2──────YXXY^-0.423 │ Z^U_1_0 Rz(π) │ │ │ │ │ Rz(-π) │ Z^U_2_0 │ │ │ │ │ │ │ Z^U_4_0 Z^U_3_0 │ │ │ │ │ │ │ │ Rz(π) │ │ │ │ │ │ │ │ │ #2──────YXXY^0.423 │ │ │ │ │ │ │ │ │ #2──────────YXXY^-1 │ │ │ │ │ │ │ │ │ #2──────────YXXY^-1 │ │ │ │ │ │ #2──────YXXY^-1 │ #2──────────YXXY^0.517 │ │ │ │ │ │ #2──────────YXXY^-1 │ │ │ │ │ │ │ │ │ #2──────────YXXY^0.019 │ │ │ │ │ │ #2──────YXXY^0.5 │ │ │ │ │ │ │ │ │ #2──────────YXXY^-0.608 │ │ │ │ │ │ │ #2──────YXXY^-0.5 │ │ │ │ │ │ │ │ """, transpose=True) jellium_ansatz = SplitOperatorTrotterAnsatz(jellium_hamiltonian) circuit = jellium_ansatz.circuit cirq.DropNegligible().optimize_circuit(circuit) cirq.testing.assert_has_diagram(circuit, """ 0 1 2 3 │ │ │ │ │ │ YXXY────────#2^0.5 │ │ │ │ │ YXXY────────#2^0.608 │ │ │ │ │ │ │ YXXY────────#2^(-1/3) │ │ │ │ YXXY────#2^(2/3) │ │ │ │ │ │ Rz(-π) YXXY────────#2 │ │ │ │ │ Rz(π) Rz(-π) YXXY────────#2^-0.392 │ │ │ │ │ Z^U_1_0 │ Rz(-π) │ │ │ │ │ Rz(π) Z^U_2_0 Z^U_3_0 │ │ │ │ │ │ │ Rz(π) │ │ │ │ │ │ YXXY────────#2^0.392 │ │ │ │ │ YXXY────────#2^-1 │ │ │ │ │ YXXY────#2^(-2/3) │ │ │ │ │ │ │ │ YXXY────────#2^(1/3) │ │ │ │ │ YXXY────────#2^-0.608 │ │ │ │ │ @───────@^V_0_1_0 │ │ │ │ │ │ ×───────× YXXY────────#2^-0.5 │ │ │ │ │ │ @───────────@^V_2_3_0 │ │ │ │ │ │ ×───────────× │ │ │ │ │ @───────────@^V_0_3_0 │ │ │ │ │ │ ×───────────× │ │ │ │ │ @───────@^V_1_3_0 @───────────@^V_0_2_0 │ │ │ │ ×───────× ×───────────× │ │ │ │ │ @───────────@^V_1_2_0 │ │ │ │ │ │ ×───────────× │ │ │ │ │ #2──────YXXY^0.5 │ │ │ │ │ │ │ #2──────────YXXY^0.608 │ │ │ │ │ #2──────YXXY^(-1/3) │ │ │ │ │ │ │ │ #2──────────YXXY^(2/3) │ │ │ │ │ #2──────────YXXY Rz(-π) │ │ │ │ #2──────YXXY^-0.392 Rz(-π) Rz(π) │ │ │ │ Rz(-π) │ Z^U_1_0 │ │ │ │ │ Z^U_3_0 Z^U_2_0 Rz(π) │ │ │ │ │ Rz(π) │ │ │ │ │ │ │ #2──────YXXY^0.392 │ │ │ │ │ │ │ #2──────────YXXY^-1 │ │ │ │ │ │ │ #2──────────YXXY^(-2/3) │ │ │ │ #2──────YXXY^(1/3) │ │ │ │ │ │ │ #2──────────YXXY^-0.608 │ │ │ │ │ #2──────YXXY^-0.5 │ │ │ │ │ │ """, transpose=True)
def test_split_operator_trotter_ansatz_default_initial_params_length(): ansatz = SplitOperatorTrotterAnsatz(hubbard_hamiltonian) assert len(ansatz.default_initial_params()) == len(list(ansatz.params()))
def test_split_operator_trotter_ansatz_circuit(): complete_ansatz = SplitOperatorTrotterAnsatz(ones_hamiltonian, include_all_cz=True, include_all_z=True) circuit = complete_ansatz.circuit cirq.DropNegligible().optimize_circuit(circuit) assert circuit.to_text_diagram(transpose=True).strip() == """ 0 1 2 3 4 │ │ │ │ │ │ │ │ YXXY─────────#2^0.5 │ │ │ │ │ │ │ YXXY────────#2^0.608 │ │ │ │ │ │ │ │ │ YXXY─────────#2^-0.5 │ │ │ │ │ │ YXXY────────#2^-0.0187 │ │ │ │ │ │ │ │ │ YXXY────────#2 │ │ │ │ │ │ YXXY────#2^-0.517 │ YXXY─────────#2 │ │ │ │ │ Z YXXY────────#2 │ │ │ │ │ │ │ Z^U_0_0 │ YXXY────────#2 │ │ │ │ │ │ Z Z^U_1_0 │ YXXY─────────#2^-0.423 │ │ │ │ │ │ │ Z^U_2_0 │ Z │ │ │ │ │ │ │ │ Z^U_3_0 Z^U_4_0 │ │ │ │ │ │ │ │ │ Z │ │ │ │ │ │ │ │ YXXY─────────#2^0.423 │ │ │ │ │ │ │ YXXY────────#2^-1 │ │ │ │ │ │ │ YXXY────────#2^-1 │ │ │ │ │ │ │ YXXY────#2^0.517 │ YXXY─────────#2^-1 │ │ │ │ │ │ │ YXXY────────#2^-1 │ │ │ │ │ │ │ YXXY────────#2^0.0187 │ │ │ │ │ │ │ @───────@^V_0_1_0 │ YXXY─────────#2^0.5 │ │ │ │ │ ×───────× YXXY────────#2^-0.608 │ │ │ │ │ │ │ │ │ YXXY─────────#2^-0.5 │ │ │ │ │ │ │ @───────────@^V_2_3_0 │ │ │ │ │ │ │ │ ×───────────× │ │ │ │ │ │ │ @───────────@^V_0_3_0 @────────────@^V_2_4_0 │ │ │ │ │ │ ×───────────× ×────────────× │ │ │ │ │ @───────@^V_1_3_0 @───────────@^V_0_4_0 │ │ │ │ │ │ ×───────× ×───────────× │ │ │ │ │ │ │ @───────────@^V_1_4_0 @────────────@^V_0_2_0 │ │ │ │ │ │ ×───────────× ×────────────× │ │ │ │ │ @───────@^V_3_4_0 @───────────@^V_1_2_0 │ │ │ │ │ │ ×───────× ×───────────× │ │ │ │ │ │ #2──────YXXY^0.5 │ │ │ │ │ │ │ │ │ #2──────────YXXY^0.608 │ │ │ │ │ │ │ #2──────YXXY^-0.5 │ │ │ │ │ │ │ │ │ │ #2──────────YXXY^-0.0187 │ │ │ │ │ │ │ #2──────────YXXY │ │ │ │ │ │ │ #2──────YXXY │ #2───────────YXXY^-0.517 │ │ │ │ │ │ │ #2──────────YXXY Z │ │ │ │ │ │ #2──────────YXXY │ Z^U_0_0 │ │ │ │ │ #2──────YXXY^-0.423 │ Z^U_1_0 Z │ │ │ │ │ Z │ Z^U_2_0 │ │ │ │ │ │ │ Z^U_4_0 Z^U_3_0 │ │ │ │ │ │ │ │ Z │ │ │ │ │ │ │ │ │ #2──────YXXY^0.423 │ │ │ │ │ │ │ │ │ #2──────────YXXY^-1 │ │ │ │ │ │ │ │ │ #2──────────YXXY^-1 │ │ │ │ │ │ #2──────YXXY^-1 │ #2───────────YXXY^0.517 │ │ │ │ │ │ #2──────────YXXY^-1 │ │ │ │ │ │ │ │ │ #2──────────YXXY^0.0187 │ │ │ │ │ │ #2──────YXXY^0.5 │ │ │ │ │ │ │ │ │ #2──────────YXXY^-0.608 │ │ │ │ │ │ │ #2──────YXXY^-0.5 │ │ │ │ │ │ │ │ """.strip() jellium_ansatz = SplitOperatorTrotterAnsatz(jellium_hamiltonian) circuit = jellium_ansatz.circuit cirq.DropNegligible().optimize_circuit(circuit) assert circuit.to_text_diagram(transpose=True).strip() == """ 0 1 2 3 │ │ │ │ │ │ YXXY────────#2^0.5 │ │ │ │ │ YXXY────────#2^0.608 │ │ │ │ │ │ │ YXXY────────#2^-0.333 │ │ │ │ YXXY────#2^0.667 │ │ │ │ │ │ Z YXXY────────#2 │ │ │ │ │ Z Z YXXY────────#2^-0.392 │ │ │ │ │ Z^U_1_0 │ Z │ │ │ │ │ Z Z^U_2_0 Z^U_3_0 │ │ │ │ │ │ │ Z │ │ │ │ │ │ YXXY────────#2^0.392 │ │ │ │ │ YXXY────────#2^-1 │ │ │ │ │ YXXY────#2^-0.667 │ │ │ │ │ │ │ │ YXXY────────#2^0.333 │ │ │ │ │ YXXY────────#2^-0.608 │ │ │ │ │ @───────@^V_0_1_0 │ │ │ │ │ │ ×───────× YXXY────────#2^-0.5 │ │ │ │ │ │ @───────────@^V_2_3_0 │ │ │ │ │ │ ×───────────× │ │ │ │ │ @───────────@^V_0_3_0 │ │ │ │ │ │ ×───────────× │ │ │ │ │ @───────@^V_1_3_0 @───────────@^V_0_2_0 │ │ │ │ ×───────× ×───────────× │ │ │ │ │ @───────────@^V_1_2_0 │ │ │ │ │ │ ×───────────× │ │ │ │ │ #2──────YXXY^0.5 │ │ │ │ │ │ │ #2──────────YXXY^0.608 │ │ │ │ │ #2──────YXXY^-0.333 │ │ │ │ │ │ │ │ #2──────────YXXY^0.667 │ │ │ │ │ #2──────────YXXY Z │ │ │ │ #2──────YXXY^-0.392 Z Z │ │ │ │ Z │ Z^U_1_0 │ │ │ │ │ Z^U_3_0 Z^U_2_0 Z │ │ │ │ │ Z │ │ │ │ │ │ │ #2──────YXXY^0.392 │ │ │ │ │ │ │ #2──────────YXXY^-1 │ │ │ │ │ │ │ #2──────────YXXY^-0.667 │ │ │ │ #2──────YXXY^0.333 │ │ │ │ │ │ │ #2──────────YXXY^-0.608 │ │ │ │ │ #2──────YXXY^-0.5 │ │ │ │ │ │ """.strip()
def test_split_operator_trotter_ansatz_circuit(): complete_ansatz = SplitOperatorTrotterAnsatz(ones_hamiltonian, 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 │ │ │ │ │ │ │ │ │ Z^0.0 │ │ │ │ │ │ │ │ YXXY─────────#2^0.5 │ │ │ │ │ │ │ │ Z^0.0 Z^0.0 │ │ │ │ │ │ │ YXXY────────#2^0.608 │ │ │ │ │ │ │ │ Z^0.0 YXXY─────────#2^-0.5 │ │ │ │ │ │ YXXY────────#2^-0.0187 Z^0.0 Z^0.0 │ │ │ │ │ │ Z^0.0 YXXY────────#2 │ │ │ │ │ │ YXXY──#2^-0.517 Z^0.0 YXXY─────────#2 │ │ │ │ │ Z YXXY────────#2 Z^0.0 Z^0.0 │ │ │ │ │ Z^U0 Z^0.0 YXXY────────#2 │ │ │ │ │ │ Z Z^U1 Z^0.0 YXXY─────────#2^-0.423 │ │ │ │ │ │ Z^0.0 Z^U2 Z^0.0 Z │ │ │ │ │ │ │ Z^0.0 Z^U3 Z^U4 │ │ │ │ │ │ │ │ Z^0.0 Z │ │ │ │ │ │ │ │ YXXY─────────#2^0.423 │ │ │ │ │ │ │ YXXY────────#2^-1 Z^0.0 │ │ │ │ │ │ YXXY────────#2^-1 Z^0.0 │ │ │ │ │ │ YXXY──#2^0.517 Z^0.0 YXXY─────────#2^-1 │ │ │ │ │ │ Z^0.0 YXXY────────#2^-1 Z^0.0 │ │ │ │ │ │ YXXY────────#2^0.0187 Z^0.0 │ │ │ │ │ │ @─────@^V0_1 Z^0.0 YXXY─────────#2^0.5 │ │ │ │ │ ×─────× YXXY────────#2^-0.608 Z^0.0 │ │ │ │ │ │ │ │ Z^0.0 │ │ │ │ │ │ │ │ │ YXXY─────────#2^-0.5 │ │ │ │ │ │ │ @───────────@^V2_3 Z^0.0 │ │ │ │ │ │ │ ×───────────× │ │ │ │ │ │ │ @───────────@^V0_3 @────────────@^V2_4 │ │ │ │ │ │ ×───────────× ×────────────× │ │ │ │ │ @─────@^V1_3 @───────────@^V0_4 │ │ │ │ │ │ ×─────× ×───────────× │ │ │ │ │ │ │ @───────────@^V1_4 @────────────@^V0_2 │ │ │ │ │ │ ×───────────× ×────────────× │ │ │ │ │ @─────@^V3_4 @───────────@^V1_2 │ │ │ │ │ │ ×─────× ×───────────× │ │ │ │ │ │ Z^0.0 │ │ │ │ │ │ │ │ │ #2────YXXY^0.5 │ │ │ │ │ │ │ │ Z^0.0 Z^0.0 │ │ │ │ │ │ │ │ │ #2──────────YXXY^0.608 │ │ │ │ │ │ │ #2────YXXY^-0.5 Z^0.0 │ │ │ │ │ │ │ Z^0.0 Z^0.0 #2──────────YXXY^-0.0187 │ │ │ │ │ │ │ #2──────────YXXY Z^0.0 │ │ │ │ │ │ #2────YXXY Z^0.0 #2───────────YXXY^-0.517 │ │ │ │ │ Z^0.0 Z^0.0 #2──────────YXXY Z │ │ │ │ │ │ #2──────────YXXY Z^0.0 Z^U0 │ │ │ │ │ #2────YXXY^-0.423 Z^0.0 Z^U1 Z │ │ │ │ │ Z Z^0.0 Z^U2 Z^0.0 │ │ │ │ │ │ Z^U4 Z^U3 Z^0.0 │ │ │ │ │ │ │ Z Z^0.0 │ │ │ │ │ │ │ │ #2────YXXY^0.423 │ │ │ │ │ │ │ │ Z^0.0 #2──────────YXXY^-1 │ │ │ │ │ │ │ │ Z^0.0 #2──────────YXXY^-1 │ │ │ │ │ │ #2────YXXY^-1 Z^0.0 #2───────────YXXY^0.517 │ │ │ │ │ Z^0.0 #2──────────YXXY^-1 Z^0.0 │ │ │ │ │ │ │ Z^0.0 #2──────────YXXY^0.0187 │ │ │ │ │ │ #2────YXXY^0.5 Z^0.0 │ │ │ │ │ │ │ Z^0.0 #2──────────YXXY^-0.608 │ │ │ │ │ │ │ │ Z^0.0 │ │ │ │ │ │ │ │ #2────YXXY^-0.5 │ │ │ │ │ │ │ │ Z^0.0 │ │ │ │ │ │ │ │ │ """.strip() jellium_ansatz = SplitOperatorTrotterAnsatz(jellium_hamiltonian) circuit = jellium_ansatz.circuit assert circuit.to_text_diagram(transpose=True).strip() == """ 0 1 2 3 │ │ │ │ │ │ │ Z^0.0 │ │ │ │ │ │ YXXY────────#2^0.5 │ │ │ │ │ │ Z^0.0 Z^0.0 │ │ │ │ │ YXXY────────#2^0.608 │ │ │ │ │ │ Z^0.0 YXXY────────#2^-0.333 │ │ │ │ YXXY──#2^0.667 Z^0.0 Z^0.0 │ │ │ │ Z YXXY────────#2 │ │ │ │ │ Z Z YXXY────────#2^-0.392 │ │ │ │ │ Z^U1 Z^0.0 Z │ │ │ │ │ Z Z^U2 Z^U3 │ │ │ │ │ │ Z^0.0 Z │ │ │ │ │ │ YXXY────────#2^0.392 │ │ │ │ │ YXXY────────#2^-1 Z^0.0 │ │ │ │ YXXY──#2^-0.667 Z^0.0 │ │ │ │ │ │ Z^0.0 YXXY────────#2^0.333 │ │ │ │ │ YXXY────────#2^-0.608 Z^0.0 │ │ │ │ @─────@^V0_1 Z^0.0 │ │ │ │ │ ×─────× YXXY────────#2^-0.5 │ │ │ │ │ │ │ Z^0.0 │ │ │ │ │ │ @───────────@^V2_3 │ │ │ │ │ │ ×───────────× │ │ │ │ │ @───────────@^V0_3 │ │ │ │ │ │ ×───────────× │ │ │ │ │ @─────@^V1_3 @───────────@^V0_2 │ │ │ │ ×─────× ×───────────× │ │ │ │ Z^0.0 @───────────@^V1_2 │ │ │ │ │ │ ×───────────× │ │ │ │ │ #2────YXXY^0.5 │ │ │ │ │ │ Z^0.0 Z^0.0 │ │ │ │ │ │ │ #2──────────YXXY^0.608 │ │ │ │ │ #2────YXXY^-0.333 Z^0.0 │ │ │ │ │ Z^0.0 Z^0.0 #2──────────YXXY^0.667 │ │ │ │ │ #2──────────YXXY Z │ │ │ │ #2────YXXY^-0.392 Z Z │ │ │ │ Z Z^0.0 Z^U1 │ │ │ │ │ Z^U3 Z^U2 Z │ │ │ │ │ Z Z^0.0 │ │ │ │ │ │ #2────YXXY^0.392 │ │ │ │ │ │ Z^0.0 #2──────────YXXY^-1 │ │ │ │ │ │ Z^0.0 #2──────────YXXY^-0.667 │ │ │ │ #2────YXXY^0.333 Z^0.0 │ │ │ │ │ Z^0.0 #2──────────YXXY^-0.608 │ │ │ │ │ │ Z^0.0 │ │ │ │ │ │ #2────YXXY^-0.5 │ │ │ │ │ │ Z^0.0 │ │ │ │ │ │ │ """.strip()