def test_init_array(self):
        """Test initialization from array."""
        rho = self.rand_rho(3)
        state = DensityMatrix(rho)
        self.assertAllClose(state.data, rho)
        self.assertEqual(state.dim, 3)
        self.assertEqual(state.dims(), (3,))

        rho = self.rand_rho(2 * 3 * 4)
        state = DensityMatrix(rho, dims=[2, 3, 4])
        self.assertAllClose(state.data, rho)
        self.assertEqual(state.dim, 2 * 3 * 4)
        self.assertEqual(state.dims(), (2, 3, 4))
 def test_init_array_qubit(self):
     """Test subsystem initialization from N-qubit array."""
     # Test automatic inference of qubit subsystems
     rho = self.rand_rho(8)
     for dims in [None, 8]:
         state = DensityMatrix(rho, dims=dims)
         self.assertAllClose(state.data, rho)
         self.assertEqual(state.dim, 8)
         self.assertEqual(state.dims(), (2, 2, 2))
 def test_tensor(self):
     """Test tensor method."""
     for _ in range(10):
         rho0 = self.rand_rho(2)
         rho1 = self.rand_rho(3)
         target = np.kron(rho0, rho1)
         state = DensityMatrix(rho0).tensor(DensityMatrix(rho1))
         self.assertEqual(state.dim, 6)
         self.assertEqual(state.dims(), (3, 2))
         self.assertAllClose(state.data, target)
 def test_expand(self):
     """Test expand method."""
     for _ in range(10):
         rho0 = self.rand_rho(2)
         rho1 = self.rand_rho(3)
         target = np.kron(rho1, rho0)
         state = DensityMatrix(rho0).expand(DensityMatrix(rho1))
         self.assertEqual(state.dim, 6)
         self.assertEqual(state.dims(), (2, 3))
         self.assertAllClose(state.data, target)