示例#1
0
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))
示例#2
0
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
示例#3
0
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)
示例#4
0
    '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 = []