def test_arbitrary(self):
        """Test on-site interacting and chemical potential on a 3-cycle"""
        H = BosonOperator('0 1^', -self.J) + BosonOperator('0^ 1', -self.J)
        H += BosonOperator('0 2^', -self.J) + BosonOperator('0^ 2', -self.J)
        H += BosonOperator('1 2^', -self.J) + BosonOperator('1^ 2', -self.J)

        res = trotter_layer(H, self.t, self.k)
        res['BS'] = res['BS'][:2] + (sorted(res['BS'][2],
                                            key=lambda x: x[0]), )

        theta = -self.t * self.J / self.k
        phi = np.pi / 2
        expected = {'BS': (theta, phi, [(0, 1), (0, 2), (1, 2)])}
        assert res == expected

        H += BosonOperator('0^ 0 0^ 0', 0.5 * self.U) - BosonOperator(
            '0^ 0', 0.5 * self.U)
        H += BosonOperator('1^ 1 1^ 1', 0.5 * self.U) - BosonOperator(
            '1^ 1', 0.5 * self.U)
        H += BosonOperator('2^ 2 2^ 2', 0.5 * self.U) - BosonOperator(
            '2^ 2', 0.5 * self.U)

        kappa = -self.t * self.U / (2 * self.k)
        r = -kappa
        expected = {
            'BS': (theta, phi, [(0, 1), (0, 2), (1, 2)]),
            'K': (kappa, [0, 1, 2]),
            'R': (r, [0, 1, 2]),
        }
        res = trotter_layer(H, self.t, self.k)

        res['BS'] = res['BS'][:2] + (sorted(res['BS'][2],
                                            key=lambda x: x[0]), )
        assert res == expected
Beispiel #2
0
    def test_arbitrary(self):
        """Test on-site interacting and chemical potential on a 3-cycle"""
        H = BosonOperator('0 1^', -self.J) + BosonOperator('0^ 1', -self.J)
        H += BosonOperator('0 2^', -self.J) + BosonOperator('0^ 2', -self.J)
        H += BosonOperator('1 2^', -self.J) + BosonOperator('1^ 2', -self.J)

        res = trotter_layer(H, self.t, self.k)
        theta = -self.t * self.J / self.k
        phi = np.pi / 2
        expected = {'BS': (theta, phi, [(0, 1), (0, 2), (1, 2)])}
        self.assertEqual(res, expected)

        H += BosonOperator('0^ 0 0^ 0', 0.5 * self.U) - BosonOperator(
            '0^ 0', 0.5 * self.U)
        H += BosonOperator('1^ 1 1^ 1', 0.5 * self.U) - BosonOperator(
            '1^ 1', 0.5 * self.U)
        H += BosonOperator('2^ 2 2^ 2', 0.5 * self.U) - BosonOperator(
            '2^ 2', 0.5 * self.U)

        kappa = -self.t * self.U / (2 * self.k)
        r = -kappa
        expected = {
            'BS': (theta, phi, [(0, 1), (0, 2), (1, 2)]),
            'K': (kappa, [0, 1, 2]),
            'R': (r, [0, 1, 2]),
        }
        res = trotter_layer(H, self.t, self.k)
        self.assertEqual(res, expected)
Beispiel #3
0
 def test_tunneling_2x2(self):
     """Test non-interacting 2x2 grid"""
     H = bose_hubbard(2, 2, self.J, 0, 0)
     res = trotter_layer(H, self.t, self.k)
     theta = -self.t * self.J / self.k
     phi = np.pi / 2
     expected = {'BS': (theta, phi, [(0, 1), (0, 2), (1, 3), (2, 3)])}
     self.assertEqual(res, expected)
 def test_tunneling_2x2(self):
     """Test non-interacting 2x2 grid"""
     H = bose_hubbard(2, 2, self.J, 0, 0)
     res = trotter_layer(H, self.t, self.k)
     theta = -self.t * self.J / self.k
     phi = np.pi / 2
     expected = {'BS': (theta, phi, [(0, 1), (0, 2), (1, 3), (2, 3)])}
     res['BS'] = res['BS'][:2] + (sorted(res['BS'][2],
                                         key=lambda x: x[0]), )
     assert res == expected
Beispiel #5
0
 def test_chemical_potential_2x2(self):
     """Test on-site interacting and chemical potential on a 2x2 grid"""
     H = bose_hubbard(2, 2, self.J, self.U, self.mu)
     res = trotter_layer(H, self.t, self.k)
     theta = -self.t * self.J / self.k
     phi = np.pi / 2
     kappa = -self.t * self.U / (2 * self.k)
     r = self.t * (0.5 * self.U + self.mu) / (2 * self.k)
     expected = {
         'BS': (theta, phi, [(0, 1), (0, 2), (1, 3), (2, 3)]),
         'K': (kappa, [0, 1, 2, 3]),
         'R': (r, [0, 1, 2, 3]),
     }
     self.assertEqual(res, expected)
Beispiel #6
0
 def test_onsite_2x2(self):
     """Test on-site interacting 2x2 grid"""
     H = bose_hubbard(2, 2, self.J, self.U, 0)
     res = trotter_layer(H, self.t, self.k)
     theta = -self.t * self.J / self.k
     phi = np.pi / 2
     kappa = -self.t * self.U / (2 * self.k)
     r = -kappa
     expected = {
         'BS': (theta, phi, [(0, 1), (0, 2), (1, 3), (2, 3)]),
         'K': (kappa, [0, 1, 2, 3]),
         'R': (r, [0, 1, 2, 3]),
     }
     self.assertEqual(res, expected)
 def test_chemical_potential_2x2(self):
     """Test on-site interacting and chemical potential on a 2x2 grid"""
     H = bose_hubbard(2, 2, self.J, self.U, self.mu)
     res = trotter_layer(H, self.t, self.k)
     theta = -self.t * self.J / self.k
     phi = np.pi / 2
     kappa = -self.t * self.U / (2 * self.k)
     r = self.t * (0.5 * self.U + self.mu) / (2 * self.k)
     expected = {
         'BS': (theta, phi, [(0, 1), (0, 2), (1, 3), (2, 3)]),
         'K': (kappa, [0, 1, 2, 3]),
         'R': (r, [0, 1, 2, 3]),
     }
     res['BS'] = res['BS'][:2] + (sorted(res['BS'][2],
                                         key=lambda x: x[0]), )
     assert res == expected
 def test_onsite_2x2(self):
     """Test on-site interacting 2x2 grid"""
     H = bose_hubbard(2, 2, self.J, self.U, 0)
     res = trotter_layer(H, self.t, self.k)
     theta = -self.t * self.J / self.k
     phi = np.pi / 2
     kappa = -self.t * self.U / (2 * self.k)
     r = -kappa
     expected = {
         'BS': (theta, phi, [(0, 1), (0, 2), (1, 3), (2, 3)]),
         'K': (kappa, [0, 1, 2, 3]),
         'R': (r, [0, 1, 2, 3]),
     }
     res['BS'] = res['BS'][:2] + (sorted(res['BS'][2],
                                         key=lambda x: x[0]), )
     assert res == expected
Beispiel #9
0
 def test_dipole_2x2(self):
     """Test on-site interacting and dipole interactions on a 2x2 grid"""
     self.logTestName()
     H = bose_hubbard(2, 2, self.J, self.U, 0, self.V)
     res = trotter_layer(H, self.t, self.k)
     theta = -self.t*self.J/self.k
     ckappa = -self.V*self.t/self.k
     phi = np.pi/2
     kappa = -self.t*self.U/(2*self.k)
     r = -kappa
     expected = {
         'BS': (theta, phi, [(0, 1), (0, 2), (1, 3), (2, 3)]),
         'CK': (ckappa, [(0, 1), (0, 2), (1, 3), (2, 3)]),
         'K': (kappa, [0, 1, 2, 3]),
         'R': (r, [0, 1, 2, 3]),
     }
     res['BS'] = res['BS'][:-1] + (sorted(res['BS'][-1], key=lambda x: x[0]),)
     res['CK'] = res['CK'][:-1] + (sorted(res['CK'][-1], key=lambda x: x[0]),)
     self.assertEqual(res, expected)
 def test_invalid(self):
     """Test exception raised for non-Bose-Hubbard Hamiltonian"""
     with pytest.raises(BoseHubbardError):
         H = BosonOperator('0')
         _ = trotter_layer(H, self.t, self.k)
Beispiel #11
0
 def test_invalid(self):
     """Test exception raised for non-Bose-Hubbard Hamiltonian"""
     self.logTestName()
     with self.assertRaises(BoseHubbardError):
         H = BosonOperator('0')
         _ = trotter_layer(H, self.t, self.k)
Beispiel #12
0
 def test_dipole(self):
     """Test exception raised for non-zero dipole terms"""
     with self.assertRaises(BoseHubbardError):
         H = bose_hubbard(2, 2, 1, 0.5, 0, 1)
         _ = trotter_layer(H, self.t, self.k)