Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
programs are called cliffords then `sum(cliffords, Program())` will give the randomized
benchmarking experiment, which will compose to the identity program.
"""
# Support QubitPlaceholders: we temporarily index to arbitrary integers.
# `generate_rb_sequence` handles mapping back to the original gateset gates.
gateset_as_program = address_qubits(sum(gateset, Program()))
qubits = len(gateset_as_program.get_qubits())
gateset_for_api = gateset_as_program.out().splitlines()
if interleaver:
assert isinstance(interleaver, Program)
interleaver = interleaver.out()
depth = int(depth) # needs to be jsonable, no np.int64 please!
payload = RandomizedBenchmarkingRequest(
depth=depth, qubits=qubits, gateset=gateset_for_api, seed=seed, interleaver=interleaver
)
response = self.client.call(
"generate_rb_sequence", payload
) # type: RandomizedBenchmarkingResponse
programs = []
for clifford in response.sequence:
clifford_program = Program()
# Like below, we reversed the order because the API currently hands back the Clifford
# decomposition right-to-left.
for index in reversed(clifford):
clifford_program.inst(gateset[index])
programs.append(clifford_program)
# The programs are returned in "textbook style" right-to-left order. To compose them into
# the correct pyquil program, we reverse the order.