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_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)
'min_iters': 0, 'diff_tol_r': 1e-5, 'dist_tol': 1e-11, 'max_iters': 2500, } layer_generator = SimpleLayerGenerator( single_qudit_gate_1=VariableUnitaryGate(1), ) synthesizer = LEAPSynthesisPass( layer_generator=layer_generator, instantiate_options=instantiate_options, ) partitioner = ScanPartitioner() converter = VariableToU3Pass() pre_synth = circuit.get_unitary() for cycle, op in circuit.operations_with_cycles(): print('(', cycle, ',', op.location[0], ')', ': ', op) partitioner.run(circuit, {}) synthesizer.run(circuit, {}) old_unis = [] for cycle, op in circuit.operations_with_cycles(): print('(', cycle, ',', op.location[0], ')', ': ', op) old_unis.append(op.get_unitary()) converter.run(circuit, {}) new_unis = []