def test_circular_SQRTISWAP(self): """ Circular Spin Chain Setup: compare unitary matrix for SQRTISWAP and propogator matrix of the implemented physical model. """ N = 3 qc = QubitCircuit(N) qc.add_gate("SQRTISWAP", targets=[0, 1]) U_ideal = gate_sequence_product(qc.propagators()) p = CircularSpinChain(N, correct_global_phase=True) U_list = p.run(qc) U_physical = gate_sequence_product(U_list) assert_((U_ideal - U_physical).norm() < 1e-12)
def test_circular_combination(self): """ Linear Spin Chain Setup: compare unitary matrix for ISWAP, SQRTISWAP, RX and RY gates and the propogator matrix of the implemented physical model. """ N = 3 qc = QubitCircuit(N) qc.add_gate("ISWAP", targets=[0, 1]) qc.add_gate("SQRTISWAP", targets=[0, 1]) qc.add_gate("RZ", arg_value=np.pi / 2, arg_label=r"\pi/2", targets=[1]) qc.add_gate("RX", arg_value=np.pi / 2, arg_label=r"\pi/2", targets=[0]) U_ideal = gate_sequence_product(qc.propagators()) p = CircularSpinChain(N, correct_global_phase=True) U_list = p.run(qc) U_physical = gate_sequence_product(U_list) assert_((U_ideal - U_physical).norm() < 1e-12)
def test_numerical_evo(self): """ Test run_state with qutip solver """ N = 3 qc = QubitCircuit(N) qc.add_gate("RX", targets=[0], arg_value=np.pi / 2) qc.add_gate("CNOT", targets=[0], controls=[1]) qc.add_gate("ISWAP", targets=[2, 1]) qc.add_gate("CNOT", targets=[0], controls=[2]) qc.add_gate("SQRTISWAP", targets=[0, 2]) qc.add_gate("RZ", arg_value=np.pi / 2, targets=[1]) # CircularSpinChain test = CircularSpinChain(N) tlist, coeffs = test.load_circuit(qc) init_state = rand_ket(2**N) init_state.dims = [[2] * N, [1] * N] rho1 = gate_sequence_product([init_state] + qc.propagators()) result = test.run_state( init_state=init_state, analytical=False, options=Options(store_final_state=True)).final_state assert_allclose( fidelity(result, rho1), 1., rtol=1e-6, err_msg="Numerical run_state fails in CircularSpinChain") # LinearSpinChain test = LinearSpinChain(N) tlist, coeffs = test.load_circuit(qc) init_state = rand_ket(2**N) init_state.dims = [[2] * N, [1] * N] rho1 = gate_sequence_product([init_state] + qc.propagators()) result = test.run_state( init_state=init_state, analytical=False, options=Options(store_final_state=True)).final_state assert_allclose(fidelity(result, rho1), 1., rtol=1e-6, err_msg="Numerical run_state fails in LinearSpinChain")
def test_analytical_evo(self): """ Test of run_state with exp(-iHt) """ N = 3 qc = QubitCircuit(N) qc.add_gate("RX", targets=[0], arg_value=np.pi/2) qc.add_gate("CNOT", targets=[0], controls=[1]) qc.add_gate("ISWAP", targets=[2, 1]) qc.add_gate("CNOT", targets=[0], controls=[2]) qc.add_gate("SQRTISWAP", targets=[0, 2]) qc.add_gate("RZ", arg_value=np.pi/2, targets=[1]) # CircularSpinChain test = CircularSpinChain(N) tlist, coeffs = test.load_circuit(qc) rho0 = rand_ket(2**N) rho0.dims = [[2]*N, [1]*N] rho1 = gate_sequence_product([rho0] + qc.propagators()) U_list = test.run_state( rho0=rho0, analytical=True) result = gate_sequence_product(U_list) assert_allclose( fidelity(result, rho1), 1., rtol=1e-6, err_msg="Analytical run_state fails in CircularSpinChain") # LinearSpinChain test = LinearSpinChain(N) tlist, coeffs = test.load_circuit(qc) rho0 = rand_ket(2**N) rho0.dims = [[2]*N, [1]*N] rho1 = gate_sequence_product([rho0] + qc.propagators()) U_list = test.run_state( rho0=rho0, analytical=True) result = gate_sequence_product(U_list) assert_allclose( fidelity(result, rho1), 1., rtol=1e-6, err_msg="Analytical run_state fails in LinearSpinChain")