def test_hermitian_conjugated_quad_op(self): """Test conjugating QuadOperator.""" op = QuadOperator() op_hc = hermitian_conjugated(op) correct_op = op self.assertTrue(op_hc == correct_op) op = QuadOperator('q0 p1', 2.) op_hc = hermitian_conjugated(op) correct_op = op self.assertTrue(op_hc == correct_op) op = QuadOperator('q0 p1', 2.j) op_hc = hermitian_conjugated(op) correct_op = QuadOperator('q0 p1', -2.j) self.assertTrue(op_hc == correct_op) op = QuadOperator('q0 p1', 2.) + QuadOperator('q4 q5 p7', 3.j) op_hc = hermitian_conjugated(op) correct_op = (QuadOperator('q0 p1', 2.) + QuadOperator('q4 q5 p7', -3.j)) self.assertTrue(op_hc == correct_op) op = QuadOperator('q0 p0 q1', 2.) + QuadOperator('q1 p1 p2', 3.j) op_hc = hermitian_conjugated(op) correct_op = (QuadOperator('p0 q0 q1', 2.) + QuadOperator('p1 q1 p2', -3.j)) self.assertTrue(op_hc == correct_op)
def test_hermitian_conjugated_interaction_operator(self): for n_orbitals, _ in itertools.product((1, 2, 5), range(5)): operator = random_interaction_operator(n_orbitals) qubit_operator = jordan_wigner(operator) conjugate_operator = hermitian_conjugated(operator) conjugate_qubit_operator = jordan_wigner(conjugate_operator) assert hermitian_conjugated(qubit_operator) == \ conjugate_qubit_operator
def test_hermitian_conjugated_multiterm(self): op = FermionOperator('1^ 2') + FermionOperator('2 3 4') op_hc = FermionOperator('2^ 1') + FermionOperator('4^ 3^ 2^') self.assertEqual(op_hc, hermitian_conjugated(op)) op = BosonOperator('1^ 2') + BosonOperator('2 3 4') op_hc = BosonOperator('2^ 1') + BosonOperator('4^ 3^ 2^') self.assertEqual(op_hc, hermitian_conjugated(op))
def test_hermitian_conjugated_complex_const(self): op = FermionOperator('2^ 2', 3j) op_hc = FermionOperator('2^ 2', -3j) self.assertEqual(op_hc, hermitian_conjugated(op)) op = BosonOperator('2^ 2', 3j) op_hc = BosonOperator('2^ 2', -3j) self.assertEqual(op_hc, hermitian_conjugated(op))
def test_hermitian_conjugated_simple(self): op = FermionOperator('0') op_hc = FermionOperator('0^') self.assertEqual(op_hc, hermitian_conjugated(op)) op = BosonOperator('0') op_hc = BosonOperator('0^') self.assertEqual(op_hc, hermitian_conjugated(op))
def test_hermitian_conjugate_empty(self): op = FermionOperator() op = hermitian_conjugated(op) self.assertEqual(op, FermionOperator()) op = BosonOperator() op = hermitian_conjugated(op) self.assertEqual(op, BosonOperator())
def test_hermitian_conjugate_notordered(self): op = FermionOperator('1 3^ 3 3^', 3j) op_hc = -3j * FermionOperator('3 3^ 3 1^') op = hermitian_conjugated(op) self.assertEqual(op, op_hc) op = BosonOperator('1 3^ 3 3^', 3j) op_hc = -3j * BosonOperator('3 3^ 3 1^') op = hermitian_conjugated(op) self.assertEqual(op, op_hc)
def test_hermitian_conjugate_complex_const(self): op = FermionOperator('1^ 3', 3j) op_hc = -3j * FermionOperator('3^ 1') op = hermitian_conjugated(op) self.assertEqual(op, op_hc) op = BosonOperator('1^ 3', 3j) op_hc = -3j * BosonOperator('3^ 1') op = hermitian_conjugated(op) self.assertEqual(op, op_hc)
def test_hermitian_conjugate_simple(self): op = FermionOperator('1^') op_hc = FermionOperator('1') op = hermitian_conjugated(op) self.assertEqual(op, op_hc) op = BosonOperator('1^') op_hc = BosonOperator('1') op = hermitian_conjugated(op) self.assertEqual(op, op_hc)
def test_hermitian_conjugated_qubit_op_consistency(self): """Some consistency checks for conjugating QubitOperators.""" ferm_op = (FermionOperator('1^ 2') + FermionOperator('2 3 4') + FermionOperator('2^ 7 9 11^')) # Check that hermitian conjugation commutes with transforms self.assertEqual(jordan_wigner(hermitian_conjugated(ferm_op)), hermitian_conjugated(jordan_wigner(ferm_op))) self.assertEqual(bravyi_kitaev(hermitian_conjugated(ferm_op)), hermitian_conjugated(bravyi_kitaev(ferm_op)))
def test_hermitian_conjugated_semihermitian(self): op = (FermionOperator() + 2j * FermionOperator('1^ 3') + FermionOperator('3^ 1') * -2j + FermionOperator('2^ 2', 0.1j)) op_hc = (FermionOperator() + FermionOperator('1^ 3', 2j) + FermionOperator('3^ 1', -2j) + FermionOperator('2^ 2', -0.1j)) self.assertEqual(op_hc, hermitian_conjugated(op)) op = (BosonOperator() + 2j * BosonOperator('1^ 3') + BosonOperator('3^ 1') * -2j + BosonOperator('2^ 2', 0.1j)) op_hc = (BosonOperator() + BosonOperator('1^ 3', 2j) + BosonOperator('3^ 1', -2j) + BosonOperator('2^ 2', -0.1j)) self.assertEqual(op_hc, hermitian_conjugated(op))
def setUp(self): self.n_qubits = 5 self.majorana_operator = MajoranaOperator((1, 4, 9)) self.fermion_term = FermionOperator('1^ 2^ 3 4', -3.17) self.fermion_operator = self.fermion_term + hermitian_conjugated( self.fermion_term) self.qubit_operator = jordan_wigner(self.fermion_operator) self.interaction_operator = get_interaction_operator( self.fermion_operator)
def setUp(self): self.n_qubits = 5 self.fermion_term = FermionOperator('1^ 2^ 3 4', -3.17) self.fermion_operator = self.fermion_term + hermitian_conjugated( self.fermion_term) self.boson_term = BosonOperator('1^ 2^ 3 4', -3.17) self.boson_operator = self.boson_term + hermitian_conjugated( self.boson_term) self.quad_term = QuadOperator('q0 p0 q1 p0 p0', -3.17) self.quad_operator = self.quad_term + hermitian_conjugated( self.quad_term) self.qubit_operator = jordan_wigner(self.fermion_operator) self.file_name = "test_file" self.bad_operator_filename = 'bad_file.data' bad_op = "A:\nB" with open(os.path.join(DATA_DIRECTORY, self.bad_operator_filename), 'w') as fid: fid.write(bad_op)
def test_hermitian_conjugated_qubit_op(self): """Test conjugating QubitOperators.""" op = QubitOperator() op_hc = hermitian_conjugated(op) correct_op = op self.assertEqual(op_hc, correct_op) op = QubitOperator('X0 Y1', 2.) op_hc = hermitian_conjugated(op) correct_op = op self.assertEqual(op_hc, correct_op) op = QubitOperator('X0 Y1', 2.j) op_hc = hermitian_conjugated(op) correct_op = QubitOperator('X0 Y1', -2.j) self.assertEqual(op_hc, correct_op) op = QubitOperator('X0 Y1', 2.) + QubitOperator('Z4 X5 Y7', 3.j) op_hc = hermitian_conjugated(op) correct_op = (QubitOperator('X0 Y1', 2.) + QubitOperator('Z4 X5 Y7', -3.j)) self.assertEqual(op_hc, correct_op)
def test_exceptions(self): with self.assertRaises(TypeError): _ = is_hermitian('a') with self.assertRaises(TypeError): _ = hermitian_conjugated(1)