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