예제 #1
0
 def test_no_saving_intermidiate_state(self):
     processor = Processor(1)
     processor.add_pulse(pulse=Pulse(sigmax(),
                                     coeff=np.ones(10),
                                     tlist=np.linspace(0, 1, 10),
                                     targets=0))
     result = processor.run_state(basis(2, 0), tlist=[0, 1])
     assert (len(result.states) == 2)
예제 #2
0
 def testDrift(self):
     """
     Test for the drift Hamiltonian
     """
     processor = Processor(N=1)
     processor.add_drift(sigmaz(), 0)
     tlist = np.array([0., 1., 2.])
     processor.add_pulse(Pulse(identity(2), 0, tlist, False))
     ideal_qobjevo, _ = processor.get_qobjevo(noisy=True)
     assert_equal(ideal_qobjevo.cte, sigmaz())
예제 #3
0
 def test_user_defined_noise(self):
     """
     Test for the user-defined noise object
     """
     dr_noise = DriftNoise(sigmax())
     proc = Processor(1)
     proc.add_noise(dr_noise)
     tlist = np.array([0, np.pi / 2.])
     proc.add_pulse(Pulse(identity(2), 0, tlist, False))
     result = proc.run_state(init_state=basis(2, 0))
     assert_allclose(fidelity(result.states[-1], basis(2, 1)),
                     1,
                     rtol=1.0e-6)
예제 #4
0
 def test_id_evolution(self):
     """
     Test for identity evolution
     """
     N = 1
     proc = Processor(N=N)
     init_state = rand_ket(2)
     tlist = [0., 1., 2.]
     proc.add_pulse(Pulse(identity(2), 0, tlist, False))
     result = proc.run_state(
         init_state, options=Options(store_final_state=True))
     global_phase = init_state.data[0, 0]/result.final_state.data[0, 0]
     assert_allclose(global_phase*result.final_state, init_state)
예제 #5
0
    def testDrift(self):
        """
        Test for the drift Hamiltonian
        """
        processor = Processor(N=1)
        processor.add_drift(sigmax() / 2, 0)
        tlist = np.array([0., np.pi, 2 * np.pi, 3 * np.pi])
        processor.add_pulse(Pulse(None, None, tlist, False))
        ideal_qobjevo, _ = processor.get_qobjevo(noisy=True)
        assert_equal(ideal_qobjevo(0), sigmax() / 2)

        init_state = basis(2)
        propagators = processor.run_analytically()
        analytical_result = init_state
        for unitary in propagators:
            analytical_result = unitary * analytical_result
        fid = fidelity(sigmax() * init_state, analytical_result)
        assert ((1 - fid) < 1.0e-6)
예제 #6
0
    def test_id_with_T1_T2(self):
        """
        Test for identity evolution with relaxation t1 and t2
        """
        # setup
        a = destroy(2)
        Hadamard = hadamard_transform(1)
        ex_state = basis(2, 1)
        mines_state = (basis(2, 1) - basis(2, 0)).unit()
        end_time = 2.
        tlist = np.arange(0, end_time + 0.02, 0.02)
        t1 = 1.
        t2 = 0.5

        # test t1
        test = Processor(1, t1=t1)
        # zero ham evolution
        test.add_pulse(Pulse(identity(2), 0, tlist, False))
        result = test.run_state(ex_state, e_ops=[a.dag() * a])
        assert_allclose(result.expect[0][-1],
                        np.exp(-1. / t1 * end_time),
                        rtol=1e-5,
                        err_msg="Error in t1 time simulation")

        # test t2
        test = Processor(1, t2=t2)
        test.add_pulse(Pulse(identity(2), 0, tlist, False))
        result = test.run_state(init_state=mines_state,
                                e_ops=[Hadamard * a.dag() * a * Hadamard])
        assert_allclose(result.expect[0][-1],
                        np.exp(-1. / t2 * end_time) * 0.5 + 0.5,
                        rtol=1e-5,
                        err_msg="Error in t2 time simulation")

        # test t1 and t2
        t1 = np.random.rand(1) + 0.5
        t2 = np.random.rand(1) * 0.5 + 0.5
        test = Processor(1, t1=t1, t2=t2)
        test.add_pulse(Pulse(identity(2), 0, tlist, False))
        result = test.run_state(init_state=mines_state,
                                e_ops=[Hadamard * a.dag() * a * Hadamard])
        assert_allclose(result.expect[0][-1],
                        np.exp(-1. / t2 * end_time) * 0.5 + 0.5,
                        rtol=1e-5,
                        err_msg="Error in t1 & t2 simulation, "
                        "with t1={} and t2={}".format(t1, t2))
예제 #7
0
 def test_repeated_use_of_processor(self):
     processor = Processor(1, t1=1.)
     processor.add_pulse(Pulse(sigmax(), targets=0, coeff=True))
     result1 = processor.run_state(basis(2, 0), tlist=np.linspace(0, 1, 10))
     result2 = processor.run_state(basis(2, 0), tlist=np.linspace(0, 1, 10))
     assert_allclose(result1.states[-1].full(), result2.states[-1].full())