def test_normal_ordered_triple(self): op_132 = FermionOperator(((1, 1), (3, 0), (2, 0))) op_123 = FermionOperator(((1, 1), (2, 0), (3, 0))) op_321 = FermionOperator(((3, 0), (2, 0), (1, 1))) self.assertTrue(op_132.isclose(normal_ordered(-op_123))) self.assertTrue(op_132.isclose(normal_ordered(op_132))) self.assertTrue(op_132.isclose(normal_ordered(op_321)))
def test_normal_ordered_multi(self): op = FermionOperator(((2, 0), (1, 1), (2, 1))) expected = (-FermionOperator(((2, 1), (1, 1), (2, 0))) - FermionOperator(((1, 1),))) self.assertTrue(expected.isclose(normal_ordered(op)))
def test_normal_ordered_offsite_reversed(self): op = FermionOperator(((3, 0), (2, 1))) expected = -FermionOperator(((2, 1), (3, 0))) self.assertTrue(expected.isclose(normal_ordered(op)))
def test_normal_ordered_double_create_separated(self): op = FermionOperator(((3, 1), (2, 0), (3, 1))) expected = FermionOperator((), 0.0) self.assertTrue(expected.isclose(normal_ordered(op)))
def test_normal_ordered_offsite(self): op = FermionOperator(((3, 1), (2, 0))) self.assertTrue(op.isclose(normal_ordered(op)))
def test_normal_ordered_number_reversed(self): n_term_rev2 = FermionOperator(((2, 0), (2, 1))) number_op2 = number_operator(3, 2) expected = FermionOperator(()) - number_op2 self.assertTrue(normal_ordered(n_term_rev2).isclose(expected))
def test_normal_ordered_number(self): number_op2 = FermionOperator(((2, 1), (2, 0))) self.assertTrue(number_op2.isclose(normal_ordered(number_op2)))
def test_normal_ordered_two_term(self): op_b = FermionOperator(((2, 0), (4, 0), (2, 1)), -88.) normal_ordered_b = normal_ordered(op_b) expected = (FermionOperator(((4, 0),), 88.) + FermionOperator(((2, 1), (4, 0), (2, 0)), 88.)) self.assertTrue(normal_ordered_b.isclose(expected))
def test_normal_ordered_single_term(self): op = FermionOperator('4 3 2 1') + FermionOperator('3 2') self.assertTrue(op.isclose(normal_ordered(op)))