Esempio n. 1
0
 def test_evolve(self, num_qubits):
     """Test evolve method."""
     for _ in range(self.samples):
         cliff1 = random_clifford(num_qubits, seed=self.rng)
         cliff2 = random_clifford(num_qubits, seed=self.rng)
         stab1 = StabilizerState(cliff1)
         stab2 = StabilizerState(cliff2)
         target = StabilizerState(cliff1.compose(cliff2))
         state = stab1.evolve(stab2)
         self.assertEqual(state, target)
Esempio n. 2
0
 def test_expand(self):
     """Test expand method."""
     for _ in range(self.samples):
         cliff1 = random_clifford(2, seed=self.rng)
         cliff2 = random_clifford(3, seed=self.rng)
         stab1 = StabilizerState(cliff1)
         stab2 = StabilizerState(cliff2)
         target = StabilizerState(cliff1.expand(cliff2))
         state = stab1.expand(stab2)
         self.assertEqual(state, target)
Esempio n. 3
0
 def test_evolve_subsystem(self, num_qubits_1, num_qubits_2):
     """Test subsystem evolve method."""
     for _ in range(self.samples):
         cliff1 = random_clifford(num_qubits_1, seed=self.rng)
         cliff2 = random_clifford(num_qubits_2, seed=self.rng)
         stab1 = StabilizerState(cliff1)
         stab2 = StabilizerState(cliff2)
         qargs = sorted(
             np.random.choice(range(num_qubits_1),
                              num_qubits_2,
                              replace=False))
         target = StabilizerState(cliff1.compose(cliff2, qargs))
         state = stab1.evolve(stab2, qargs)
         self.assertEqual(state, target)
Esempio n. 4
0
 def test_conjugate(self, num_qubits):
     """Test conjugate method."""
     for _ in range(self.samples):
         cliff = random_clifford(num_qubits, seed=self.rng)
         target = StabilizerState(cliff.conjugate())
         state = StabilizerState(cliff).conjugate()
         self.assertEqual(state, target)
Esempio n. 5
0
 def test_valid(self, num_qubits):
     """Test random_clifford {num_qubits}-qubits."""
     value = random_clifford(num_qubits)
     with self.subTest(msg='Test type'):
         self.assertIsInstance(value, Clifford)
     with self.subTest(msg='Test num_qubits'):
         self.assertEqual(value.num_qubits, num_qubits)
 def random(self, num_qubits, rand_seed=None):
     """Generate a random group element"""
     self._num_qubits = num_qubits
     if self._group_gates_type:
         return random_cnotdihedral(num_qubits, seed=rand_seed)
     else:
         return random_clifford(num_qubits, seed=rand_seed)
Esempio n. 7
0
 def test_to_operator(self, num_qubits):
     """Test to_operator method for returning projector."""
     for _ in range(self.samples):
         stab = StabilizerState(random_clifford(num_qubits, seed=self.rng))
         target = Operator(stab)
         op = StabilizerState(stab).to_operator()
         self.assertEqual(op, target)
Esempio n. 8
0
 def random(self, num_qubits, rand_seed=None):
     """Generate a random group element"""
     self._num_qubits = num_qubits
     if self._group_gates_type:
         assert num_qubits <= 2, "num_qubits for CNOT-Dihedral RB should be 1 or 2"
         return random_cnotdihedral(num_qubits, seed=rand_seed)
     else:
         return random_clifford(num_qubits, seed=rand_seed)
Esempio n. 9
0
 def test_valid(self, num_qubits):
     """Test random_clifford {num_qubits}-qubits."""
     seed = 213
     value = random_clifford(num_qubits, seed=seed)
     with self.subTest(msg="Test type"):
         self.assertIsInstance(value, Clifford)
     with self.subTest(msg="Test num_qubits"):
         self.assertEqual(value.num_qubits, num_qubits)
Esempio n. 10
0
 def test_evolve_clifford_qargs(self):
     """Test evolve method for random Clifford"""
     cliff = random_clifford(3, seed=10)
     op = Operator(cliff)
     pauli = random_pauli(5, seed=10)
     qargs = [3, 0, 1]
     value = Operator(pauli.evolve(cliff, qargs=qargs))
     target = Operator(pauli).compose(op.adjoint(), qargs=qargs).dot(op, qargs=qargs)
     self.assertEqual(value, target)
Esempio n. 11
0
    def test_expval_random(self, num_qubits):
        """Test expectation_value method of random Cliffords"""

        for _ in range(self.samples):
            cliff = random_clifford(num_qubits, seed=self.rng)
            op = random_pauli(num_qubits, seed=self.rng)
            qc = cliff.to_circuit()
            stab = StabilizerState(cliff)
            exp_val = stab.expectation_value(op)
            target = Statevector(qc).expectation_value(op)
            self.assertAlmostEqual(exp_val, target)
Esempio n. 12
0
    def test_expval_random_subsystem(self, num_qubits):
        """Test expectation_value method of random Cliffords and a subsystem"""

        for _ in range(self.samples):
            cliff = random_clifford(num_qubits, seed=self.rng)
            op = random_pauli(2, seed=self.rng)
            qargs = np.random.choice(num_qubits, size=2, replace=False)
            qc = cliff.to_circuit()
            stab = StabilizerState(cliff)
            exp_val = stab.expectation_value(op, qargs)
            target = Statevector(qc).expectation_value(op, qargs)
            self.assertAlmostEqual(exp_val, target)
Esempio n. 13
0
    def test_probs_random_subsystem(self, num_qubits):
        """Test probabilities and probabilities_dict methods
        of random cliffords for a subsystem of qubits"""

        for _ in range(self.samples):
            for subsystem_size in range(1, num_qubits):
                cliff = random_clifford(num_qubits, seed=self.rng)
                qargs = np.random.choice(num_qubits,
                                         size=subsystem_size,
                                         replace=False)
                qc = cliff.to_circuit()
                stab = StabilizerState(cliff)
                probs = stab.probabilities(qargs)
                probs_dict = stab.probabilities_dict(qargs)
                target = Statevector(qc).probabilities(qargs)
                target_dict = Statevector(qc).probabilities_dict(qargs)
                self.assertTrue(np.allclose(probs, target))
                self.assertDictAlmostEqual(probs_dict, target_dict)
Esempio n. 14
0
 def test_fixed_seed(self):
     """Test fixing seed fixes output"""
     seed = 1532
     value1 = random_clifford(4, seed=seed)
     value2 = random_clifford(4, seed=seed)
     self.assertEqual(value1, value2)
Esempio n. 15
0
 def test_init_clifford(self, num_qubits):
     """Test initialization from Clifford."""
     stab1 = StabilizerState(random_clifford(num_qubits, seed=self.rng))
     stab2 = StabilizerState(stab1)
     self.assertEqual(stab1, stab2)
Esempio n. 16
0
 def test_random_clifford_valid(self, seed, num_qubits):
     """Test random_clifford."""
     value = random_clifford(num_qubits, seed=seed)
     self.assertValidClifford(value, num_qubits=num_qubits)
Esempio n. 17
0
 def test_init_instruction(self, num_qubits):
     """Test initialization from a Clifford instruction."""
     cliff = random_clifford(num_qubits, seed=self.rng)
     stab1 = StabilizerState(cliff.to_instruction())
     stab2 = StabilizerState(cliff)
     self.assertEqual(stab1, stab2)
Esempio n. 18
0
 def test_purity(self, num_qubits):
     """Test purity methods"""
     stab = StabilizerState(random_clifford(num_qubits, seed=self.rng))
     purity = stab.purity()
     self.assertEqual(purity, 1.0)
Esempio n. 19
0
 def test_trace(self, num_qubits):
     """Test trace methods"""
     stab = StabilizerState(random_clifford(num_qubits, seed=self.rng))
     trace = stab.trace()
     self.assertEqual(trace, 1.0)