Source code for tests.test_symplectic

import unittest

import numpy as np

import pauliarray.pauli.pauli_array as pa
from pauliarray.binary import bit_operations as bitops
from pauliarray.binary import symplectic


[docs] class TestSymplecticBitsOperations(unittest.TestCase):
[docs] def test_dot(self): zx_strings = np.tri(4, 4, k=0, dtype=np.bool_) assert np.all(symplectic.dot(zx_strings, zx_strings) == np.array([0, 0, 2, 4]))
[docs] def test_orthogonal_complement(self): paulis = pa.PauliArray.from_labels(["IIXX", "ZZXI", "IZII", "ZZIY"]) subspace_zx_strings = paulis.zx_strings orthogonal_zx_strings = symplectic.orthogonal_complement(subspace_zx_strings) self.assertTrue(np.all(symplectic.is_orthogonal(subspace_zx_strings[:, None], orthogonal_zx_strings[None, :]))) self.assertTrue( orthogonal_zx_strings.shape[0] == subspace_zx_strings.shape[1] - bitops.rank(subspace_zx_strings) )
[docs] def test_isotropic_subspace(self): paulis = pa.PauliArray.from_labels(["IIXX", "ZZXI", "IZII", "ZZIX"]) isotropic_zx_strings = symplectic.isotropic_subspace(paulis.zx_strings) self.assertTrue(symplectic.is_isotropic(isotropic_zx_strings))
[docs] def test_gram_schmidt_orthogonalization(self): paulis = pa.PauliArray.from_labels(["XXXX", "XXYY", "YYXX", "YYYY"]) gs_paulis = pa.PauliArray.from_zx_strings(symplectic.gram_schmidt_orthogonalization(paulis.zx_strings))
if __name__ == "__main__": unittest.main()