def test_multiply(self): """Test multiply method.""" # Random initial state and Stinespring ops rho = self.rand_rho(2) val = 0.5 stine1, stine2 = self.rand_matrix(16, 2), self.rand_matrix(16, 2) # Single Stinespring set chan1 = Stinespring(stine1, input_dim=2, output_dim=4) targ = val * chan1._evolve(rho) chan = chan1.multiply(val) self.assertAllClose(chan._evolve(rho), targ) chan = val * chan1 self.assertAllClose(chan._evolve(rho), targ) chan = chan1 * val self.assertAllClose(chan._evolve(rho), targ) # Double Stinespring set chan2 = Stinespring((stine1, stine2), input_dim=2, output_dim=4) targ = val * chan2._evolve(rho) chan = chan2.multiply(val) self.assertAllClose(chan._evolve(rho), targ) chan = val * chan2 self.assertAllClose(chan._evolve(rho), targ) chan = chan2 * val self.assertAllClose(chan._evolve(rho), targ)
def test_multiply(self): """Test multiply method.""" # Random initial state and Stinespring ops rho_init = DensityMatrix(self.rand_rho(2)) val = 0.5 stine1, stine2 = self.rand_matrix(16, 2), self.rand_matrix(16, 2) # Single Stinespring set chan1 = Stinespring(stine1, input_dims=2, output_dims=4) rho_targ = val * (rho_init @ chan1) chan = chan1.multiply(val) self.assertEqual(rho_init.evolve(chan), rho_targ) chan = val * chan1 self.assertEqual(rho_init.evolve(chan), rho_targ) chan = chan1 * val self.assertEqual(rho_init.evolve(chan), rho_targ) # Double Stinespring set chan2 = Stinespring((stine1, stine2), input_dims=2, output_dims=4) rho_targ = val * (rho_init @ chan2) chan = chan2.multiply(val) self.assertEqual(rho_init.evolve(chan), rho_targ) chan = val * chan2 self.assertEqual(rho_init.evolve(chan), rho_targ) chan = chan2 * val self.assertEqual(rho_init.evolve(chan), rho_targ)