def test_get_unitary(gate: Gate) -> None: size = gate.get_size() circ = Circ(size, radixes=gate.get_radixes()) circ.append_gate(gate, list(range(size))) num_params = circ.get_num_params() x = np.random.random((num_params, )) circuit = Circuit(circ) assert np.allclose(circ.get_unitary(x).get_numpy(), circuit.get_unitary(x))
def test_minimize_bfgs_multiqubit(r3_qubit_circuit: Circuit) -> None: num_params = r3_qubit_circuit.get_num_params() x0 = np.random.random((num_params,)) cost = HilbertSchmidtResidualsGenerator().gen_cost( r3_qubit_circuit, r3_qubit_circuit.get_unitary(x0), ) minimizer = CeresMinimizer() x = minimizer.minimize(cost, np.random.random((num_params,))) assert cost.get_cost(x) < 1e-6, x
def test_get_grad(gate: Gate) -> None: size = gate.get_size() circ = Circ(size, radixes=gate.get_radixes()) circ.append_gate(gate, list(range(size))) num_params = circ.get_num_params() x = np.random.random((num_params, )) circuit = Circuit(circ) grad_python = circ.get_grad(x) grad_rust = circuit.get_grad(x) for py, rs in zip(grad_python, grad_rust): assert np.allclose(py, rs)
def test_get_unitary_and_grad(gate: Gate) -> None: size = gate.get_size() circ = Circ(size, radixes=gate.get_radixes()) circ.append_gate(gate, list(range(size))) num_params = circ.get_num_params() x = np.random.random((num_params, )) circuit = Circuit(circ) utry_python, grad_python = circ.get_unitary_and_grad(x) utry_rust, grad_rust = circuit.get_unitary_and_grad(x) assert np.allclose(utry_python.get_numpy(), utry_rust) for i, (py, rs) in enumerate(zip(grad_python, grad_rust)): assert np.allclose(py, rs)
def test_random_circuit_qubit_gates(qubit_gate: Gate) -> None: circ = Circ(qubit_gate.get_size()) circ.append_gate(qubit_gate, location=list(range(qubit_gate.get_size()))) num_params = circ.get_num_params() if qubit_gate.is_constant(): assert num_params == 0 x = np.random.random((num_params, )) circuit = Circuit(circ) py = circ.get_unitary(x).get_numpy() rs = circuit.get_unitary(x) assert py.shape == rs.shape assert py.dtype is rs.dtype np.testing.assert_allclose(py, rs, verbose=True)