def test_isclose_different_terms(self):
     a = FermionOperator(((1, 0),), -0.1j)
     b = FermionOperator(((1, 1),), -0.1j)
     self.assertTrue(a.isclose(b, rel_tol=1e-12, abs_tol=0.2))
     self.assertFalse(a.isclose(b, rel_tol=1e-12, abs_tol=0.05))
     self.assertTrue(b.isclose(a, rel_tol=1e-12, abs_tol=0.2))
     self.assertFalse(b.isclose(a, rel_tol=1e-12, abs_tol=0.05))
 def test_isclose_rel_tol(self):
     a = FermionOperator('0', 1)
     b = FermionOperator('0', 2)
     self.assertTrue(a.isclose(b, rel_tol=2.5, abs_tol=0.1))
     # Test symmetry
     self.assertTrue(a.isclose(b, rel_tol=1, abs_tol=0.1))
     self.assertTrue(b.isclose(a, rel_tol=1, abs_tol=0.1))
示例#3
0
    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_itruediv_and_idiv_npcomplex128(self):
     op = FermionOperator(((1, 1), (3, 0), (8, 1)), 0.5)
     divisor = numpy.complex128(12.3 + 7.4j)
     original = copy.deepcopy(op)
     correct = op * (1. / divisor)
     op /= divisor
     self.assertTrue(op.isclose(correct))
     # Test if done in-place
     self.assertFalse(op.isclose(original))
 def test_isclose_abs_tol(self):
     a = FermionOperator('0^', -1.)
     b = FermionOperator('0^', -1.05)
     c = FermionOperator('0^', -1.11)
     self.assertTrue(a.isclose(b, rel_tol=1e-14, abs_tol=0.1))
     self.assertFalse(a.isclose(c, rel_tol=1e-14, abs_tol=0.1))
     a = FermionOperator('0^', -1.0j)
     b = FermionOperator('0^', -1.05j)
     c = FermionOperator('0^', -1.11j)
     self.assertTrue(a.isclose(b, rel_tol=1e-14, abs_tol=0.1))
     self.assertFalse(a.isclose(c, rel_tol=1e-14, abs_tol=0.1))
 def test_add(self):
     term_a = ((1, 1), (3, 0), (8, 1))
     term_b = ((1, 0), (3, 0), (8, 1))
     a = FermionOperator(term_a, 1.0)
     b = FermionOperator(term_b, 0.5)
     res = a + b + b
     self.assertEqual(len(res.terms), 2)
     self.assertEqual(res.terms[term_a], 1.0)
     self.assertEqual(res.terms[term_b], 1.0)
     # Test out of place
     self.assertTrue(a.isclose(FermionOperator(term_a, 1.0)))
     self.assertTrue(b.isclose(FermionOperator(term_b, 0.5)))
 def test_mul_out_of_place(self):
     op1 = FermionOperator(((0, 1), (3, 1), (3, 0), (11, 1)), 3.j)
     op2 = FermionOperator(((1, 1), (3, 1), (8, 0)), 0.5)
     op3 = op1 * op2
     correct_coefficient = 3.0j * 0.5
     correct_term = ((0, 1), (3, 1), (3, 0), (11, 1),
                     (1, 1), (3, 1), (8, 0))
     self.assertTrue(op1.isclose(FermionOperator(
         ((0, 1), (3, 1), (3, 0), (11, 1)), 3.j)))
     self.assertTrue(op2.isclose(FermionOperator(((1, 1), (3, 1), (8, 0)),
                                                 0.5)))
     self.assertTrue(op3.isclose(FermionOperator(correct_term,
                                                 correct_coefficient)))
 def test_pow_zero_term(self):
     coeff = 6.7j
     ops = ((3, 1), (1, 0), (4, 1))
     term = FermionOperator(ops, coeff)
     zerod = term ** 0
     expected = FermionOperator(())
     self.assertTrue(expected.isclose(zerod))
 def test_pow_high_term(self):
     coeff = 6.7j
     ops = ((3, 1), (1, 0), (4, 1))
     term = FermionOperator(ops, coeff)
     high = term ** 10
     expected = FermionOperator(ops * 10, coeff ** 10)
     self.assertTrue(expected.isclose(high))
 def test_neg(self):
     op = FermionOperator(((1, 1), (3, 1), (8, 1)), 0.5)
     _ = -op
     # out of place
     self.assertTrue(op.isclose(FermionOperator(((1, 1), (3, 1), (8, 1)),
                                                0.5)))
     correct = -1.0 * op
     self.assertTrue(correct.isclose(-op))
 def test_truediv_and_div_npcomplex128(self):
     op = FermionOperator(((1, 1), (3, 0), (8, 1)), 0.5)
     divisor = numpy.complex128(566.4j + 0.3)
     original = copy.deepcopy(op)
     res = op / divisor
     correct = op * (1. / divisor)
     self.assertTrue(res.isclose(correct))
     # Test if done out of place
     self.assertTrue(op.isclose(original))
    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))
    def test_zero_is_additive_identity(self):
        o = FermionOperator.zero()
        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(o + f))
        self.assertTrue(f.isclose(f + o))
        self.assertTrue(g.isclose(o + g))
        self.assertTrue(g.isclose(g + o))
        self.assertTrue(h.isclose(o + h))
        self.assertTrue(h.isclose(h + o))

        o += h
        self.assertTrue(h.isclose(o))
        self.assertFalse(f.isclose(o))

        # Method always returns new instances.
        self.assertFalse(FermionOperator.zero().isclose(o))
示例#14
0
 def test_hermitian_conjugated_simple(self):
     op = FermionOperator('0')
     op_hc = FermionOperator('0^')
     self.assertTrue(op_hc.isclose(hermitian_conjugated(op)))
示例#15
0
 def test_hermitian_conjugated_empty(self):
     op = FermionOperator()
     self.assertTrue(op.isclose(hermitian_conjugated(op)))
示例#16
0
 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.assertTrue(op.isclose(op_hc))
示例#17
0
 def test_hermitian_conjugate_complex_const(self):
     op = FermionOperator('1^ 3', 3j)
     op_hc = -3j * FermionOperator('3^ 1')
     op = hermitian_conjugated(op)
     self.assertTrue(op.isclose(op_hc))
示例#18
0
 def test_hermitian_conjugate_simple(self):
     op = FermionOperator('1^')
     op_hc = FermionOperator('1')
     op = hermitian_conjugated(op)
     self.assertTrue(op.isclose(op_hc))
 def test_isclose_zero_terms(self):
     op = FermionOperator('1^ 0', -1j) * 0
     self.assertTrue(op.isclose(FermionOperator((), 0.0),
                                rel_tol=1e-12, abs_tol=1e-12))
     self.assertTrue(FermionOperator().isclose(
         op, rel_tol=1e-12, abs_tol=1e-12))
示例#20
0
 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)))
示例#21
0
 def test_normal_ordered_offsite(self):
     op = FermionOperator(((3, 1), (2, 0)))
     self.assertTrue(op.isclose(normal_ordered(op)))
示例#22
0
 def test_normal_ordered_number(self):
     number_op2 = FermionOperator(((2, 1), (2, 0)))
     self.assertTrue(number_op2.isclose(normal_ordered(number_op2)))
示例#23
0
 def test_normal_ordered_single_term(self):
     op = FermionOperator('4 3 2 1') + FermionOperator('3 2')
     self.assertTrue(op.isclose(normal_ordered(op)))
 def test_pow_one_term(self):
     coeff = 6.7j
     ops = ((3, 1), (1, 0), (4, 1))
     term = FermionOperator(ops, coeff)
     self.assertTrue(term.isclose(term ** 1))
示例#25
0
 def test_hermitian_conjugated_complex_const(self):
     op = FermionOperator('2^ 2', 3j)
     op_hc = FermionOperator('2^ 2', -3j)
     self.assertTrue(op_hc.isclose(hermitian_conjugated(op)))
示例#26
0
 def test_hermitian_conjugated_multiterm(self):
     op = FermionOperator('1^ 2') + FermionOperator('2 3 4')
     op_hc = FermionOperator('2^ 1') + FermionOperator('4^ 3^ 2^')
     self.assertTrue(op_hc.isclose(hermitian_conjugated(op)))
 def test_FermionOperator(self):
     op = FermionOperator((), 3.)
     self.assertTrue(op.isclose(FermionOperator(()) * 3.))