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
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
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())
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(), )
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(), )
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(), )
def test_get_params(self, simple_circuit: Circuit) -> None: assert len(simple_circuit.get_params()) == 0 assert isinstance(simple_circuit.get_params(), np.ndarray)
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]
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
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)
def test_get_params(self, toffoli_circuit: Circuit) -> None: assert len(toffoli_circuit.get_params()) == 0 assert isinstance(toffoli_circuit.get_params(), np.ndarray)