Esempio n. 1
0
 def test_empty(self) -> None:
     circuit = Circuit(1)
     assert len(circuit.get_params()) == 0
     circuit = Circuit(4)
     assert len(circuit.get_params()) == 0
     circuit = Circuit(4, [2, 3, 4, 5])
     assert len(circuit.get_params()) == 0
Esempio n. 2
0
def test_full_pauli_gate() -> None:
    circuit = Circuit(3)
    circuit.append_gate(PauliGate(3), [0, 1, 2])
    cost = HilbertSchmidtResiduals(circuit,
                                   UnitaryMatrix(unitary_group.rvs(8)))
    circuit.minimize(cost)
    assert cost.get_cost(circuit.get_params()) < 1e-6
Esempio n. 3
0
 def calc_cost(
     self,
     circuit: Circuit,
     target: UnitaryMatrix | StateVector,
 ) -> float:
     """Generate and calculate the cost from the CostFunction."""
     return self.gen_cost(circuit, target).get_cost(circuit.get_params())
Esempio n. 4
0
    def test_no_change(self) -> None:
        u1 = unitary_group.rvs(8)
        g1 = VariableUnitaryGate(3)
        circuit = Circuit(3)
        circuit.append_gate(g1, [0, 1, 2])
        utry_before = circuit.get_unitary()
        # The following call should not make any changes in circuit
        QFactor().instantiate(circuit, u1, circuit.get_params())
        utry_after = circuit.get_unitary()

        assert np.allclose(
            utry_before.get_numpy(),
            utry_after.get_numpy(),
        )
Esempio n. 5
0
    def test_1_gate(self) -> None:
        u1 = unitary_group.rvs(8)
        g1 = VariableUnitaryGate(3)
        circuit = Circuit(3)
        circuit.append_gate(g1, [0, 1, 2])
        params = QFactor().instantiate(circuit, u1, circuit.get_params())
        circuit.set_params(params)

        g1_params = list(np.reshape(u1, (64, )))
        g1_params = list(np.real(g1_params)) + list(np.imag(g1_params))

        assert np.allclose(
            circuit.get_unitary().get_numpy(),
            g1.get_unitary(g1_params).get_numpy(),
        )
Esempio n. 6
0
    def test_2_gate(self) -> None:
        g1 = VariableUnitaryGate(2)
        g2 = VariableUnitaryGate(3)
        g3 = RXGate()
        circuit = Circuit(4)
        circuit.append_gate(g1, [0, 1])
        circuit.append_gate(g2, [1, 2, 3])
        circuit.append_gate(g3, [1])
        utry = circuit.get_unitary(np.random.random(circuit.get_num_params()))
        params = QFactor().instantiate(circuit, utry, circuit.get_params())

        circuit.set_params(params)

        assert np.allclose(
            circuit.get_unitary().get_numpy(),
            utry.get_numpy(),
        )
Esempio n. 7
0
 def test_get_params(self, simple_circuit: Circuit) -> None:
     assert len(simple_circuit.get_params()) == 0
     assert isinstance(simple_circuit.get_params(), np.ndarray)
Esempio n. 8
0
 def test_no_modify(self, r6_qudit_circuit: Circuit) -> None:
     params = r6_qudit_circuit.get_params()
     if len(params) == 0:
         return
     params[0] = -params[0] + 1
     assert params[0] != r6_qudit_circuit.get_params()[0]
Esempio n. 9
0
 def test_count(self, r6_qudit_circuit: Circuit) -> None:
     num_params = r6_qudit_circuit.get_num_params()
     params = r6_qudit_circuit.get_params()
     assert len(params) == num_params
Esempio n. 10
0
 def test_type(self, r6_qudit_circuit: Circuit) -> None:
     params = r6_qudit_circuit.get_params()
     assert isinstance(params, np.ndarray)
     assert all(is_numeric(param) for param in params)
Esempio n. 11
0
 def test_get_params(self, toffoli_circuit: Circuit) -> None:
     assert len(toffoli_circuit.get_params()) == 0
     assert isinstance(toffoli_circuit.get_params(), np.ndarray)