def test_compose_front_inplace(self): """Test inplace front compose method.""" matX = np.array([[0, 1], [1, 0]], dtype=complex) matY = np.array([[0, -1j], [1j, 0]], dtype=complex) matYX = np.dot(matY, matX) chan = UnitaryChannel(matY) chan.compose(UnitaryChannel(matX), inplace=True, front=True) self.assertEqual(chan, UnitaryChannel(matYX)) matXY = np.dot(matX, matY) chan = UnitaryChannel(matX) chan.compose(UnitaryChannel(matY), inplace=True, front=True) self.assertEqual(chan, UnitaryChannel(matXY))
def test_compose(self): """Test compose method.""" matX = np.array([[0, 1], [1, 0]], dtype=complex) matY = np.array([[0, -1j], [1j, 0]], dtype=complex) chan1 = UnitaryChannel(matX) chan2 = UnitaryChannel(matY) targ = UnitaryChannel(np.dot(matY, matX)) self.assertEqual(chan1.compose(chan2), targ) self.assertEqual(chan1 @ chan2, targ) targ = UnitaryChannel(np.dot(matX, matY)) self.assertEqual(chan2.compose(chan1), targ) self.assertEqual(chan2 @ chan1, targ)
def test_compose_inplace(self): """Test inplace compose method.""" matX = np.array([[0, 1], [1, 0]], dtype=complex) matY = np.array([[0, -1j], [1j, 0]], dtype=complex) targ = UnitaryChannel(np.dot(matY, matX)) chan1 = UnitaryChannel(matX) chan2 = UnitaryChannel(matY) chan1.compose(chan2, inplace=True) self.assertEqual(chan1, targ) chan1 = UnitaryChannel(matX) chan2 = UnitaryChannel(matY) chan1 @= chan2 self.assertEqual(chan1, targ) targ = UnitaryChannel(np.dot(matX, matY)) chan1 = UnitaryChannel(matX) chan2 = UnitaryChannel(matY) chan2.compose(chan1, inplace=True) self.assertEqual(chan2, targ) chan1 = UnitaryChannel(matX) chan2 = UnitaryChannel(matY) chan2 @= chan1 self.assertEqual(chan2, targ)