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 (QTensor or InitialState, 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

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

]