Circuits

[1]:
import numpy as np

from qilisdk.backends import QutipBackend
from qilisdk.digital import CNOT, RX, Circuit, H, M
from qilisdk.functionals import Sampling

# Create a circuit with 2 qubits
circuit = Circuit(2)
circuit.add(H(0))  # Apply Hadamard on qubit 0
circuit.add(RX(0, theta=np.pi))  # Apply RX rotation on qubit 0con
circuit.add(CNOT(0, 1))  # Add a CNOT gate between qubit 0 and 1

# Retrieve the current gate parameters
print("Initial parameters:", circuit.get_parameter_values())

# Update circuit parameters (e.g., update RX rotation angle)
circuit.set_parameter_values([2 * np.pi])

# Execute the circuit simulation using QutipBackend
backend = QutipBackend()
results = backend.execute(Sampling(circuit))

# Display the simulation output and measurement probabilities
print("Simulation Results:")
print(results)
print("Probabilities:", results.probabilities)
Initial parameters: [3.141592653589793]
Simulation Results:
SamplingResult(
  nshots=1000,
  samples={'00': 489, '11': 511}
)
Probabilities: {'11': 0.511, '00': 0.489}

OpenQASM 2.0 Interoperability

[2]:
import numpy as np

from qilisdk.digital import CNOT, RX, Circuit, H
from qilisdk.utils.openqasm2 import from_qasm2, from_qasm2_file, to_qasm2, to_qasm2_file

# Create a sample circuit
circuit = Circuit(3)
circuit.add(H(0))
circuit.add(CNOT(0, 1))
circuit.add(RX(2, theta=np.pi))
circuit.add(M(0, 1, 2))

# Serialize to QASM string
qasm_code = to_qasm2(circuit)
print("Generated QASM:")
print(qasm_code)

# Deserialize back to a circuit
reconstructed_circuit = from_qasm2(qasm_code)

# Save to and load from a file
to_qasm2_file(circuit, "circuit.qasm")
reconstructed_circuit = from_qasm2_file("circuit.qasm")
Generated QASM:
OPENQASM 2.0;
include "qelib1.inc";
qreg q[3];
creg c[3];
h q[0];
cx q[0], q[1];
rx(3.141592653589793) q[2];
measure q -> c;