Skip to content

Qiskit code for discrete quantum walk

View on GitHub

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}")