Qiskit code for discrete quantum walk
This notebook shows how to generate data for discrete quantum walk using qiskit
1.2.4.
# import time
# from qiskit import QuantumCircuit, QuantumRegister, transpile
# from qiskit.circuit.library.standard_gates import XGate
# BASIS_GATES = ["u", "cx"]
# OPT_LEVEL = 3
# SIZE = 6
# # mcx from control on X
# def mcx_gate(num_ctrl_qubits):
# my_mcx_gate = XGate().control(num_ctrl_qubits)
# return my_mcx_gate
# # get increment circuit as an MCX cascade
# def get_increment_circuit(num_qubits):
# increment_circuit= QuantumCircuit(num_qubits)
# for j in range(num_qubits - 1):
# increment_circuit.append(mcx_gate(num_qubits-1-j),[k for k in range(num_qubits-j)])
# increment_circuit.x(0)
# return increment_circuit
# # run an example
# start_time = time.time()
# q_walk_step = QuantumCircuit(SIZE+1)
# q_walk_step.h(0)
# q_walk_step.append(get_increment_circuit(SIZE).control(1, ctrl_state=1),
# [k for k in range(SIZE+1)])
# q_walk_step.append(get_increment_circuit(SIZE).inverse().control(1, ctrl_state=0),
# [k for k in range(SIZE+1)])
# transpiled_cir = transpile(
# q_walk_step,
# basis_gates=BASIS_GATES,
# optimization_level=OPT_LEVEL,
# )
# transpilation_time = time.time()-start_time
# depth = transpiled_cir.depth()
# cx_counts = transpiled_cir.count_ops()["cx"]
# width = transpiled_cir.width()
# print(f"==== qiskit for {SIZE}==== time: {transpilation_time}")