Digital Propagation
The DigitalPropagation functional propagates a digital quantum circuit
through the backend. Because it subclasses
PrimitiveFunctional, any symbolic parameters exposed by the underlying
Circuit can be queried or updated through helper methods such as
get_parameter_names().
Measurement details such as the number of shots are specified separately via readout objects passed to
execute().
Parameters
circuit (
Circuit): Circuit to be propagated.initial_state (
QTensororInitialState, optional): The initial state of the circuit. If not provided, the zero state is used. Note that this is only used for simulation, on real devices this is ignored for now.
Returns
FunctionalResult: Access shot countsvia
get_samples()andprobabilities via
get_probabilities().
Usage Example
import numpy as np
from qilisdk.digital import Circuit, H, RX, CNOT
from qilisdk.functionals import DigitalPropagation
from qilisdk.core import InitialState
# Create a 2-qubit circuit
circuit = Circuit(2)
circuit.add(H(0))
circuit.add(RX(0, theta=np.pi))
circuit.add(CNOT(0, 1))
# Initialize the DigitalPropagation functional
digital_propagation = DigitalPropagation(circuit, initial_state=InitialState.ZERO)
This functional can be executed on any backend that supports digital circuits. For example, we can execute it on the CUDA backend:
from qilisdk.backends import CudaqBackend
from qilisdk.readout import Readout
# Run on CUDA backend and retrieve counts
backend = CudaqBackend()
results = backend.execute(digital_propagation, Readout().with_sampling(nshots=100))
print(results)
Output
- Functional Results: [
Sampling Results: (
nshots=100,
samples={'00': 53, '11': 47}
)
]