def test_zero_is_multiplicative_nil(self):
     o = FermionOperator.zero()
     u = FermionOperator.identity()
     f = FermionOperator(((0, 1), (5, 0), (6, 1)), 0.6j)
     g = FermionOperator(((0, 0), (5, 0), (6, 1)), 0.3j)
     self.assertTrue(o.isclose(o * u))
     self.assertTrue(o.isclose(o * f))
     self.assertTrue(o.isclose(o * g))
     self.assertTrue(o.isclose(o * (f + g)))
    def test_identity_is_multiplicative_identity(self):
        u = FermionOperator.identity()
        f = FermionOperator(((0, 1), (5, 0), (6, 1)), 0.6j)
        g = FermionOperator(((0, 0), (5, 0), (6, 1)), 0.3j)
        h = f + g
        self.assertTrue(f.isclose(u * f))
        self.assertTrue(f.isclose(f * u))
        self.assertTrue(g.isclose(u * g))
        self.assertTrue(g.isclose(g * u))
        self.assertTrue(h.isclose(u * h))
        self.assertTrue(h.isclose(h * u))

        u *= h
        self.assertTrue(h.isclose(u))
        self.assertFalse(f.isclose(u))

        # Method always returns new instances.
        self.assertFalse(FermionOperator.identity().isclose(u))