def test_empty(self) -> None: circuit = Circuit(1) assert circuit.get_num_params() == 0 circuit = Circuit(4) assert circuit.get_num_params() == 0 circuit = Circuit(4, [2, 3, 4, 5]) assert circuit.get_num_params() == 0
def test_inserting_gate(self) -> None: circuit = Circuit(1) assert circuit.get_num_params() == 0 circuit.insert_gate(0, U3Gate(), [0]) assert circuit.get_num_params() == 3 circuit.insert_gate(0, U3Gate(), [0]) assert circuit.get_num_params() == 6 circuit.insert_gate(0, U3Gate(), [0]) assert circuit.get_num_params() == 9
def test_adding_gate(self) -> None: circuit = Circuit(1) assert circuit.get_num_params() == 0 circuit.append_gate(U3Gate(), [0]) assert circuit.get_num_params() == 3 circuit.append_gate(U3Gate(), [0]) assert circuit.get_num_params() == 6 circuit.append_gate(U3Gate(), [0]) assert circuit.get_num_params() == 9
def test_r1(self, r3_qubit_circuit: Circuit) -> None: start = r3_qubit_circuit.get_num_params() r3_qubit_circuit.append_gate(U3Gate(), [0]) assert r3_qubit_circuit.get_num_params() == start + 3 r3_qubit_circuit.insert_gate(0, U3Gate(), [1]) assert r3_qubit_circuit.get_num_params() == start + 6 r3_qubit_circuit.insert_gate(0, CNOTGate(), [0, 2]) assert r3_qubit_circuit.get_num_params() == start + 6 r3_qubit_circuit.remove(U3Gate()) assert r3_qubit_circuit.get_num_params() == start + 3
def test_removing_gate(self) -> None: circuit = Circuit(1) circuit.append_gate(U3Gate(), [0]) circuit.append_gate(U3Gate(), [0]) circuit.append_gate(U3Gate(), [0]) assert circuit.get_num_params() == 9 circuit.remove(U3Gate()) assert circuit.get_num_params() == 6 circuit.remove(U3Gate()) assert circuit.get_num_params() == 3 circuit.remove(U3Gate()) assert circuit.get_num_params() == 0
def test_freezing_param(self) -> None: circuit = Circuit(1) circuit.append_gate(U3Gate(), [0]) circuit.append_gate(U3Gate(), [0]) circuit.append_gate(U3Gate(), [0]) assert circuit.get_num_params() == 9 circuit.freeze_param(0) assert circuit.get_num_params() == 8 circuit.freeze_param(0) assert circuit.get_num_params() == 7 circuit.freeze_param(0) assert circuit.get_num_params() == 6 circuit.freeze_param(0)
def test_hilbert_schmidt_residuals(r3_qubit_circuit: Circuit) -> None: x0 = np.random.random((r3_qubit_circuit.get_num_params(), )) cost = HilbertSchmidtResidualsGenerator().gen_cost( r3_qubit_circuit, r3_qubit_circuit.get_unitary(x0), ) assert cost.get_cost(x0) < 1e-10
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 gen_starting_points( self, multistarts: int, circuit: Circuit, target: UnitaryMatrix | StateVector, ) -> list[np.ndarray]: """ Generate `multistarts` starting points for instantiation. Args: multistarts (int): The number of starting points to generate. circuit (Circuit): The circuit to generate the points for. target (UnitaryMatrix | StateVector): The target. Return: (list[np.ndarray]): List of starting inputs for instantiation. Raises: ValueError: If `multistarts` is not a positive integer. """ if not is_integer(multistarts): raise TypeError( 'Expected int for multistarts, got %s.' % type(multistarts), ) if multistarts <= 0: raise ValueError( 'Expected positive integer for multistarts' ', got %d' % multistarts, ) return [ # [ circuit.get_params() ] + [ # TODO: re-evaluate np.random.random(circuit.get_num_params()) for i in range(multistarts) ]
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_get_num_params(self, simple_circuit: Circuit) -> None: assert simple_circuit.get_num_params() == 0
def test_value(self, r6_qudit_circuit: Circuit) -> None: assert r6_qudit_circuit.get_num_params() >= 0
def test_type(self, r6_qudit_circuit: Circuit) -> None: assert isinstance(r6_qudit_circuit.get_num_params(), int)
def test_get_num_params(self, toffoli_circuit: Circuit) -> None: assert toffoli_circuit.get_num_params() == 0
def test_gradients_native(r3_qubit_circuit: Circuit) -> None: circ = Circ(r3_qubit_circuit) check_gradient(circ, r3_qubit_circuit.get_num_params())
def test_gradients(r3_qubit_circuit: Circuit) -> None: check_gradient(r3_qubit_circuit, r3_qubit_circuit.get_num_params())