def test_random_operators_are_reproducible(self): op1 = random_diagonal_coulomb_hamiltonian(5, seed=5947) op2 = random_diagonal_coulomb_hamiltonian(5, seed=5947) numpy.testing.assert_allclose(op1.one_body, op2.one_body) numpy.testing.assert_allclose(op1.two_body, op2.two_body) op1 = random_interaction_operator(5, seed=8911) op2 = random_interaction_operator(5, seed=8911) numpy.testing.assert_allclose(op1.one_body_tensor, op2.one_body_tensor) numpy.testing.assert_allclose(op1.two_body_tensor, op2.two_body_tensor) op1 = random_quadratic_hamiltonian(5, seed=17711) op2 = random_quadratic_hamiltonian(5, seed=17711) numpy.testing.assert_allclose(op1.combined_hermitian_part, op2.combined_hermitian_part) numpy.testing.assert_allclose(op1.antisymmetric_part, op2.antisymmetric_part) op1 = random_antisymmetric_matrix(5, seed=24074) op2 = random_antisymmetric_matrix(5, seed=24074) numpy.testing.assert_allclose(op1, op2) op1 = random_hermitian_matrix(5, seed=56753) op2 = random_hermitian_matrix(5, seed=56753) numpy.testing.assert_allclose(op1, op2) op1 = random_unitary_matrix(5, seed=56486) op2 = random_unitary_matrix(5, seed=56486) numpy.testing.assert_allclose(op1, op2)
def test_diagonal_coulomb_hamiltonian(self): n_qubits = 5 one_body = random_hermitian_matrix(n_qubits, real=False) two_body = random_hermitian_matrix(n_qubits, real=True) constant = numpy.random.randn() op = DiagonalCoulombHamiltonian(one_body, two_body, constant) op1 = get_sparse_operator(op) op2 = get_sparse_operator(jordan_wigner(get_fermion_operator(op))) diff = op1 - op2 discrepancy = 0. if diff.nnz: discrepancy = max(abs(diff.data)) self.assertAlmostEqual(discrepancy, 0.)
def setUp(self): self.n_qubits = 5 self.constant = 1.7 self.chemical_potential = 2. # Obtain random Hermitian and antisymmetric matrices self.hermitian_mat = random_hermitian_matrix(self.n_qubits) self.antisymmetric_mat = random_antisymmetric_matrix(self.n_qubits) self.combined_hermitian = ( self.hermitian_mat - self.chemical_potential * numpy.eye(self.n_qubits)) # Initialize a particle-number-conserving Hamiltonian self.quad_ham_pc = QuadraticHamiltonian(self.hermitian_mat, constant=self.constant) # Initialize a non-particle-number-conserving Hamiltonian self.quad_ham_npc = QuadraticHamiltonian(self.hermitian_mat, self.antisymmetric_mat, self.constant, self.chemical_potential) # Initialize the sparse operators and get their ground energies self.quad_ham_pc_sparse = get_sparse_operator(self.quad_ham_pc) self.quad_ham_npc_sparse = get_sparse_operator(self.quad_ham_npc) self.pc_ground_energy, self.pc_ground_state = get_ground_state( self.quad_ham_pc_sparse) self.npc_ground_energy, self.npc_ground_state = get_ground_state( self.quad_ham_npc_sparse)