Source code for tests.test_mapping

import os
import time
import unittest

import numpy as np

import pauliarray.pauli.operator as op
import pauliarray.pauli.operator_array_type_1 as opa
import pauliarray.pauli.pauli_array as pa
import pauliarray.pauli.weighted_pauli_array as wpa
from pauliarray.mapping.fermion import JordanWigner


[docs] class TestJordanWignerMapping(unittest.TestCase):
[docs] def test_majoranas(self): mapping = JordanWigner(4) real_majoranas, imag_majoranas = mapping.majoranas() expected_real_majoranas = pa.PauliArray.from_labels(["IIIX", "IIXZ", "IXZZ", "XZZZ"]) expected_imag_majoranas = pa.PauliArray.from_labels(["IIIY", "IIYZ", "IYZZ", "YZZZ"]) self.assertTrue(np.all(expected_real_majoranas == real_majoranas)) self.assertTrue(np.all(expected_imag_majoranas == imag_majoranas))
[docs] def test_creation_annihilation_operators(self): mapping = JordanWigner(4) creation_operators, annihilation_operators = mapping.assemble_creation_annihilation_operators() antis = opa.anticommutator( creation_operators[:, None], creation_operators[None, :], combine_repeated_terms=True ) self.assertTrue(np.all(antis.weights == 0)) antis = opa.anticommutator( annihilation_operators[:, None], annihilation_operators[None, :], combine_repeated_terms=True ) self.assertTrue(np.all(antis.weights == 0)) antis = opa.anticommutator( creation_operators[:, None], annihilation_operators[None, :], combine_repeated_terms=True ) self.assertTrue(np.all(antis.weights[:, :, 0] == np.eye(4)))
[docs] def test_occupation_operators(self): mapping = JordanWigner(4) occupation_operators = mapping.occupation_operators() creation_operators, annihilation_operators = mapping.assemble_creation_annihilation_operators() expected_occupation_operators = creation_operators.compose_operator_array_type_1(annihilation_operators) for i in range(expected_occupation_operators.size): self.assertTrue(occupation_operators.get_operator(i) == expected_occupation_operators.get_operator(i))
[docs] def test_one_body_to_pauli_operator_from_tensor(self): # filename = "h2_mo_integrals_d_0750.npz" filename = "lih_mo_integrals_d_1600.npz" file_path = os.path.join("tests/data/integrals", filename) npzfile = np.load(file_path) one_body = npzfile["one_body"] mapping = JordanWigner(one_body.shape[0]) one_body_operator = mapping.one_body_operator_from_array(one_body).simplify() expected_one_body_operator = mapping.assemble_one_body_operator_array().mul_weights(one_body).sum().simplify() self.assertTrue(one_body_operator == expected_one_body_operator)
[docs] def test_one_body_to_pauli_operator_from_sparse(self): # filename = "h2_mo_integrals_d_0750.npz" filename = "lih_mo_integrals_d_1600.npz" file_path = os.path.join("tests/data/integrals", filename) npzfile = np.load(file_path) one_body = npzfile["one_body"] mapping = JordanWigner(one_body.shape[0]) locations = np.where(one_body) values = one_body[locations] one_body_operator = mapping.one_body_operator_from_sparse(locations, values).simplify() expected_one_body_operator = mapping.assemble_one_body_operator_array().mul_weights(one_body).sum().simplify() self.assertTrue(one_body_operator == expected_one_body_operator)
[docs] def test_two_body_to_pauli_operator_from_tensor(self): # filename = "h2_mo_integrals_d_0750.npz" filename = "lih_mo_integrals_d_1600.npz" # filename = "nh3_mo_integrals_costum.npz" file_path = os.path.join("tests/data/integrals", filename) npzfile = np.load(file_path) two_body = npzfile["two_body"] mapping = JordanWigner(two_body.shape[0]) two_body_operator = mapping.two_body_operator_from_array(two_body).simplify() expected_two_body_operator = mapping.assemble_two_body_operator_array().mul_weights(two_body).sum().simplify() self.assertTrue(two_body_operator == expected_two_body_operator)
[docs] def test_two_body_to_pauli_operator_from_sparse(self): # filename = "h2_mo_integrals_d_0750.npz" # filename = "lih_mo_integrals_d_1600.npz" filename = "nh3_mo_integrals_costum.npz" # filename = "c2h4_mo_integrals.npz" file_path = os.path.join("tests/data/integrals", filename) npzfile = np.load(file_path) two_body = npzfile["two_body"] mapping = JordanWigner(two_body.shape[0]) locations = np.where(np.abs(two_body) > 1e-12) values = two_body[locations] two_body_operator = mapping.two_body_operator_from_sparse(locations, values).simplify() expected_two_body_operator = mapping.assemble_two_body_operator_array().mul_weights(two_body).sum().simplify() self.assertTrue(two_body_operator == expected_two_body_operator)
[docs] def test_assemble_qubit_hamiltonian_from_sparses(self): # filename = "h2_mo_integrals_d_0750.npz" # filename = "lih_mo_integrals_d_1600.npz" filename = "nh3_mo_integrals_costum.npz" # filename = "c2h4_mo_integrals.npz" file_path = os.path.join("tests/data/integrals", filename) npzfile = np.load(file_path) one_body = npzfile["one_body"] two_body = npzfile["two_body"] mapping = JordanWigner(two_body.shape[0]) one_body_locations = np.where(np.abs(one_body) > 1e-12) one_body_values = one_body[one_body_locations] two_body_locations = np.where(np.abs(two_body) > 1e-12) two_body_values = two_body[two_body_locations] hamiltonian = mapping.assemble_qubit_hamiltonian_from_sparses( (one_body_locations, one_body_values), (two_body_locations, two_body_values) ) expected_one_body_operator = mapping.assemble_one_body_operator_array().mul_weights(one_body).sum() expected_two_body_operator = mapping.assemble_two_body_operator_array().mul_weights(two_body).sum() expected_hamiltonian = (expected_one_body_operator + expected_two_body_operator).simplify() self.assertTrue(hamiltonian == expected_hamiltonian)
if __name__ == "__main__": unittest.main()