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 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()