import intelqsdk.cbindings as iqsdk
compiler = "/opt/.qbraid/environments/intel_dk7c2g/intel-quantum-compiler"
num_qubits = 2
# Create the Python interpolated 2 qubit C++ Bell state source
Bell_source = f"""
#include <clang/Quantum/quintrinsics.h>
// Establish the classical and quantum kernel variables
cbit c[{num_qubits}];
qbit q[{num_qubits}];
// Our Bell state Quantum Kernel
quantum_kernel void bell()
{{
H(q[0]);
CNOT(q[0], q[1]);
MeasZ(q[0], c[0]);
MeasZ(q[1], c[1]);
}}
"""
# Create the Intel® Quantum SDK source file bell.cpp
with open("bell.cpp", "w", encoding="utf-8") as output_file:
print(Bell_source, file=output_file)
# Generate the Intel® Quantum SDK shared object file bell.so
iqsdk.compileProgram(compiler, "bell.cpp", "-s")
# Expose and label the Intel® Quantum SDK shared object as "my_bell"
iqsdk.loadSdk("./bell.so", "my_bell")
# Setup the Intel® Quantum Simulator to execute the quantum kernel
iqs_config = iqsdk.IqsConfig()
iqs_config.num_qubits = num_qubits
iqs_config.simulation_type = "noiseless"
iqs_device = iqsdk.FullStateSimulator(iqs_config)
iqs_device.ready()
# Invoke the quantum_kernel "bell" defined in the C++ source above
iqsdk.callCppFunction("bell", "my_bell")
# Establish references to the quantum kernel qubits
qbit_ref = iqsdk.RefVec()
for i in range(num_qubits):
qbit_ref.append( iqsdk.QbitRef("q", i, "my_bell").get_ref() )
# Print the probabilities of the quantum system
probabilities = iqs_device.getProbabilities(qbit_ref)
iqsdk.FullStateSimulator.displayProbabilities(probabilities, qbit_ref)
# Printing probability register of size 4
# |00> : 0 |10> : 0
# |01> : 0 |11> : 1