Пример #1
0
    def test_zero(self):
        n_qubits = 5
        transmed_i = reverse_jordan_wigner(QubitOperator(), n_qubits)
        expected_i = FermionOperator()
        self.assertTrue(transmed_i.isclose(expected_i))

        retransmed_i = jordan_wigner(transmed_i)
        self.assertTrue(expected_i.isclose(retransmed_i))
Пример #2
0
    def test_jordan_wigner_one_body(self):
        # Make sure it agrees with jordan_wigner(FermionTerm).
        for p in range(self.n_qubits):
            for q in range(self.n_qubits):
                # Get test qubit operator.
                test_operator = jordan_wigner_one_body(p, q)

                # Get correct qubit operator.
                fermion_term = FermionOperator(((p, 1), (q, 0)))
                correct_op = jordan_wigner(fermion_term)
                hermitian_conjugate = hermitian_conjugated(fermion_term)
                if not fermion_term.isclose(hermitian_conjugate):
                    correct_op += jordan_wigner(hermitian_conjugate)

                self.assertTrue(test_operator.isclose(correct_op))
Пример #3
0
    def test_jordan_wigner_two_body(self):
        # Make sure it agrees with jordan_wigner(FermionTerm).
        for p in range(self.n_qubits):
            for q in range(self.n_qubits):
                for r in range(self.n_qubits):
                    for s in range(self.n_qubits):
                        # Get test qubit operator.
                        test_operator = jordan_wigner_two_body(p, q, r, s)

                        # Get correct qubit operator.
                        fermion_term = FermionOperator(
                            ((p, 1), (q, 1), (r, 0), (s, 0)))
                        correct_op = jordan_wigner(fermion_term)
                        hermitian_conjugate = hermitian_conjugated(
                            fermion_term)
                        if not fermion_term.isclose(hermitian_conjugate):
                            if p == r and q == s:
                                pass
                            else:
                                correct_op += jordan_wigner(
                                    hermitian_conjugate)

                        self.assertTrue(test_operator.isclose(correct_op),
                                        str(test_operator - correct_op))
Пример #4
0
    def test_canonical_anticommutation_relations(self):
        op_1 = FermionOperator('3')
        op_1_dag = FermionOperator('3^')
        op_2 = FermionOperator('4')
        op_2_dag = FermionOperator('4^')
        zero = FermionOperator()
        one = FermionOperator('')

        self.assertTrue(
            one.isclose(normal_ordered(anticommutator(op_1, op_1_dag))))
        self.assertTrue(
            zero.isclose(normal_ordered(anticommutator(op_1, op_2))))
        self.assertTrue(
            zero.isclose(normal_ordered(anticommutator(op_1, op_2_dag))))
        self.assertTrue(
            zero.isclose(normal_ordered(anticommutator(op_1_dag, op_2))))
        self.assertTrue(
            zero.isclose(normal_ordered(anticommutator(op_1_dag, op_2_dag))))
        self.assertTrue(
            one.isclose(normal_ordered(anticommutator(op_2, op_2_dag))))